Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Betas et WIPs » TitaniK et Iceberg (12 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 21 juin 2004 à 19:50 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


J'ai sorti des bêtas de:
* TitaniK - lanceur-kernel pour Titanium sans HW3Patch (il y a quelques jours déjà)
* Iceberg - kernel TSR pour Titanium avec HW3Patch, entièrement compatible avec PreOs 0.67 (nouveau!)

Since the TI-89 Titanium is slowly, but surely, appearing in stores all over the US, I have decided to rush the first public alpha release of TitaniK. TitaniK is currently the only way to run kernel-based programs on the TI-89 Titanium. Note that while a small set of programs might run unmodified, most programs definitely do need patching to:
* remove all use of the 0x40000 ghost space,
* use a special trick to make interrupt handlers work (see below for details).
A patched version of SMQ is available here.

Here are the details:
   
TitaniK (Titanium Kernel) 0.12 by Kevin Kofler
==============================================

This is a fork of Patrick Pélissier's PreOs which targets the TI-89 Titanium
WITHOUT any patches (HW2Patch or the like). It is NOT a TSR, but a launcher. It
also adds code to (temporary copies of) the programs it executes, so it won't
work for programs which are excessively close to the file size limit (more than
56 KB in this implementation).

Usage: titanik("yourprog") 

See PreOs.txt for details about PreOs.

List of known unsupported PreOs features in TitaniK 0.12:
* Support for non-Titanium calculators
* Everything requiring a TSR: SHIFT+ON support, AMS error intercepting,
  automatic nostub crash protection, ...
* Crash protection
* Passing command-line parameters to the programs. (I need to add more estack
  handling to the auto-exec feature.)
* Running _nostub programs through kernel::exec.
* Programs >56 KB.
* Programs/libraries which would require >8 KB of stubs/callers/receivers.
* Programs which require all the RAM. (The stubs take away part of it.)
* Programs which require all the stack. (The stubs need lots of it.)
* The (un)reloc(2) functions won't work if you don't reserve enough room for the
  stubs at the end of the handle (NOT counted in the file size). (Note that you
  also have to account for the execution protection if you want to use
  (un)reloc(2)...)
* Read-only libraries. (The relocation code currently adds at least a receiver
  to all libraries. For read-only libraries to work, this has to be skipped for
  them.)
* Indirect function calls (lea ...,%a0;jsr (%a0)) to libraries or to RAM_CALLs.
* Nonstandard (e.g. huge structure by-value returns) or excessive (>60 bytes)
  stack parameters to libraries or RAM_CALLs.
* Archive packs. (Uncompressed files need to be copied to add the stubs,
  compressed ones need TitaniK to call the uncompressor through a receiver.)
* Custom interrupt handlers that survive over a libcall or return-from-lib.
  Anything using such interrupt handlers needs to be ported to use the graphlib
  hack.
* Programs relying on libcalls keeping the keyboard mask instact. (AMS interrupt
  handlers used by the unprotection clobber it. Could be fixed by
  saving/restoring it in the stubs.)

List of programs known to work with TitaniK:
* Empty test program ;-)
* Patched version of SMQ


Technical:

All non-internal function calls (including the call to _main in kernel::exec)
have to go through a client-side stub, a client-side caller and a server-side
receiver. The stubs look like:
 pea [target]
 pea [server_receiver]
 pea [server_base]
 bra caller
The callers and receivers are copied from stubs.h.

Unlike PreOs, kernel::exec calls kernel programs through a direct call to
kernel:tart_kernel_prgm, not through a stub call to $34.

The problem is that library references and RAM_CALLs can be to both variables
and functions. TitaniK uses a simple (improvable) heuristic to detect function
calls: a jsr or jmp is a function call, everything else is a variable reference.

Interrupt handlers are even more annoying: they can move the control flow from
one file to another completely unpredictably. One solution that would
theoretically work would be to update the interrupt vectors whenever the control
changes from one file to another, and route them through the caller/receiver
mechanism. However, this is way too slow and makes the interrupt handler consume
all the CPU and crash the calculator. So the solution we actually implement is
different:
* Remember the TI-89 Titanium is a TI-89. This means it is not using the last
  850 bytes of LCD_MEM at all.
* Remember where the always-execution-unprotected zone lives: 0x5000-0x5fff.
* See how nicely they intersect! The unused screen portion is actually a subset
  of the always-unprotected zone.
* Moreover, while some routines might write there, in grayscale, NOTHING is
  supposed to write to LCD_MEM, since this area is usually clobbered by the
  grayscale routine anyway. (Well, if only SMQ respected that. I actually to
  patch it to reduce its screen inversion loop from 3840 bytes to 3000 bytes. It
  actually shouldn't invert LCD_MEM at all, that's what the grayscale planes are
  for...)
* So I have modified the grayscale routine to only update 3000 bytes instead of
  3840, and used the last 840 bytes of LCD_MEM to store the grayscale routine
  itself. :-)
* The hack is included in the TitaniK version of graphlib. I also changed
  userlib::lockcalc to use a similar hack.

Of course, programs using their own custom interrupt handlers still need to be
modified to implement this trick. Depending on the function of the interrupt
handler, there are 2 ways to fix this:
* If it is non-essential, we can just remove it. That's what I did with SMQ's
  AI6 redirect to a DUMMY_HANDLER.
* If it is essential, then it has to be executed from LCD_MEM as well. That's
  what I did with SMQ's AI1.


History:
0.10  Kevin Kofler  2004-02-14
* First release. Forked from PreOs 0.67. All files modified.
0.11  Kevin Kofler  2004-04-07
* Changed version number identifier from $FF00 to $0011 (PreOs.asm).
* Updated graphlib and userlib with a hack to make interrupt handlers work.
0.12  Kevin Kofler  2004-04-11
* Updated version number identifier (PreOs.asm).
* Using ROM_CALL instead of hack to get tios::Heap (PreOs.asm). Using another
  hack to put it into an address which fits in a word (!"§$%&/()=? SMQ ...).
* Removed the error frame saving/restoring hack (Preos.asm, exec.asm). Using
  ER_success instead.

Last minute release note: Programs that throw errors (and don't catch them themselves) are also known unsupported. (This includes ENABLE_ERROR_RETURN.)

You can get TitaniK here, the corresponding libraries can be found here (do not try to use the libraries from DoorsOS or the PreOs stdlib pack, they will most likely not work).

Note that I have not touched TitaniK in the last few weeks. I wanted to polish up some stuff, but I decided to rush it instead.


Mario92 for:
* TI-89 all AMS versions (the original only worked on 1.00)
* TI-89 Titanium with TitaniK
is available at this link.

IMPORTANT: For the TitaniK version, you need the latest library pack that I just uploaded to run it. (I changed graphlib and added hexlib.)

UPDATE: Oops, I forgot to update the checksum on the TitaniK version. This is fixed now. (Thanks to the TICT for ttchecksum! ;) )


Since the public beta release of the HW3Patch, the hacks in TitaniK are no longer necessary to run kernel-based programs. I have now done a direct port of PreOs 0.67 which uses the HW3Patch. (I've used some code from TitaniK 0.12 too, of course.) And since it "sunk" TitaniK, I've called it Iceberg. :)

This release should be fully forwards and backwards-compatible with PreOs 0.67, with the following caveats:
* Iceberg only runs on the TI-89 Titanium.
* As in TitaniK, CALCULATOR is 0 for the TI-89 Titanium just as for the TI-89, and just as documented in TIGCC. This should avoid any compatibility problems.
* As in TitaniK, HW_VERSION is 3 for the TI-89 Titanium as documented in TIGCC.
* Iceberg is fully backwards-compatible with TitaniK, PreOs isn't. You should use only my versions of the libraries.
* Many programs use the ghost space hack to write to the interrupt vectors or (rare in kernel-based programs) to bypass the execution protection. Those programs have to be patched with GhostBuster (public beta release imminent), but once patched, Iceberg should run them just fine (otherwise, it is probably a bug in either GhostBuster or Iceberg).

Downloads:
* Iceberg 0.80 beta sources and binaries (Note that this is a beta version, and that it has yet to be tested on an actual TI-89 Titanium.)
* Patch against PreOs 0.67 for those who want to see my changes (PpHd?)
* TitaniK/Iceberg libraries
The only library that has changed is graphlib. There is now an Iceberg version of graphlib (graphlib-iceberg.89z) that requires HW3Patch and Iceberg, but that is compatible with both legacy kernel programs (unlike TitaniK graphlib which requires the programs not to trash the unused portion of LCD_MEM) and TitaniK programs (unlike PreOs graphlib which trashes the unused portion of LCD_MEM). The TitaniK version is included too (graphlib-titanik.89z). While I was at it, I also included a VTI/debugging version (graphlib-vti.89z).


PS: Si quelqu'un a le courage de traduire toutes ces tirades, n'hésitez pas (membres du staff: postez la traduction en dessous, pas à la place, s'il vous plaît).
-Edité le Lundi 21 juin 2004 à 20:04 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°1   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 21 juin 2004 à 23:30 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Soit dit en passant que les portages des programmes pour kernel pour TitaniK, même s'ils ne sont plus strictement nécessaires, sont toujours appréciés. En effet, Iceberg exécute sans problèmes les programmes TitaniK, donc en visant TitaniK, vous permettrez à vos programmes de tourner sous 2 kernels plutôt qu'un.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°2   Marquer comme non lu.
Lionel Debroux Ecrit le: Mardi 22 juin 2004 à 15:20 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Allez, on finit (même si je pense que les frenchies devraient apprendre à se contenter de la VOA):


Depuis la sortie de la beta publique de HW3Patch, les hacks de TitaniK ne sont plus nécessaires pour pouvoir faire tourner des programmes kernel-based. J'ai maintenant fait un port direct de PreOS 0.67 qui utilise HW3Patch. (Bien sûr, j'ai également utilisé du code de TitaniK 0.12). Et puisqu'il a "coulé" TitaniK, je l'ai appelé Iceberg :)

Cette version devrait avoir une pleine compatibilité antérieure et postérieure avec PreOS 0.67, avec les défauts suivants:
* Iceberg tourne seulement sur la TI-89 Titanium.
* Comme dans TitaniK, CALCULATOR est 0 pour la TI-89 Titanium comme pour la TI-89, et comme documenté dans TIGCC. Ca devrait éviter les problèmes de compatibilité.
* Comme dans TitaniK, HW_VERSION est 3 pour la TI-89 Titanium comme documenté dans TIGCC.
* Iceberg a une pleine compatibilité antérieure avec TitaniK, pas PreOs. Vous devriez utiliser uniquement mes versions des librairies.
* Beaucoup de programmes utilisent le hack du ghost space pour écrire dans les vecteurs d'interruption, ou (rare dans les programmes kernel-based) pour s'affranchir de la protection d'exécution. Ces programmes doivent être patchés avec GhostBuster (la beta publique est sortie), mais une fois patchés, ils devraient tourner parfaitement sur Iceberg (sinon, c'est probablement un bug dans GhostBuster ou Iceberg).

Downloads:
* http://members.chello.at/gerhard.kofler/kevin/ti89prog/iceberg.zip : Programmes et sources d'Iceberg 0.80 beta (notez que c'est une version beta, et qu'il faut encore la tester sur une vraie TI-89 Titanium).
* http://members.chello.at/gerhard.kofler/kevin/ti89prog/iceberg-diff.zip : Patch par rapport à PreOS 0.67 pour ceux qui veulent voir mes modifications (PpHd?)
* http://members.chello.at/gerhard.kofler/kevin/ti89prog/titanik-libs.zip : Les librairies TitaniK/Iceberg
La seule librairie qui a changé est graphlib. Il y a maintenant une version de graphlib pour Iceberg (graphlib-iceberg.89z) qui nécessite HW3Patch et Iceberg, mais qui est compatible avec à la fois les programmes kernel-based existants (contrairement à la graphlib de TitaniK qui nécessite que les programmes ne détruisent pas la portion non utilisée de LCD_MEM) et les programmes TitaniK (contrairement à la graphlib de PreOS qui détruit la portion non utilisée de LCD_MEM). La version TitaniK est également inclue (graphlib-titanik.89z). Tant que j'y étais, j'ai également inclus une version VTI/debug (graphlib-vti.89z).


[Je ne connais pas les balises de link]
Lionel Debroux - membre de TICT.
    
./Post n°3   Marquer comme non lu.
serioussam Ecrit le: Mardi 22 juin 2004 à 15:32 Déconnecté(e)    Voir le profil de serioussam Envoyer un email à serioussam Visiter le site WEB de serioussam Envoyer un message privé à serioussam  

Plus de balises pour les liens. Clique sur l'icone entre le point et le symbole Outlook Express.
la shasse é ouvèrte poure lay maychants
    
./Post n°4   Marquer comme non lu.
bobti89 Ecrit le: Mardi 22 juin 2004 à 15:43 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Ou plus rapide avec la balise url...
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°5   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 24 juin 2004 à 20:04 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Une nouvelle version de Iceberg est disponible:
Iceberg 0.91  Kevin Kofler  2004-06-24
* Updated version numbers (PreOs.asm).
* Fixed retval hack in exec.asm for AMS 3 (the hack in TIGCC works by accident,
  the one in PreOs/Iceberg had to be fixed).
* Added uninstaller (forked from PreOs 0.67 uninstaller).

(Le problème de retval a été trouvé par Patrick Pélissier.)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°6   Marquer comme non lu.
Kevin Kofler Ecrit le: Dimanche 27 juin 2004 à 04:31 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Iceberg 0.92  Kevin Kofler  2004-06-27
* Updated version numbers (PreOs.asm).
* Reverted patch to support event hook convention 2.00 ('EvHk' signature) applied
  by mistake, it is not compatible with the TI-89 Titanium (only event hook
  convention 3.00 is, and it only uses the original 'evHk' signature) and not
  supported by PreOs 0.67 either (saves 24 bytes).

-Edité le Dimanche 27 juin 2004 à 15:34 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Dimanche 4 juillet 2004 à 02:29 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Iceberg 0.93  Kevin Kofler  2004-07-04
* Updated version numbers (PreOs.asm).
* Now saving and restoring the screen rather than redrawing it, so ExePacked
  kernel-based programs can now be run using Iceberg and ttstart-titanium.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 14 juillet 2004 à 00:42 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Nouvelle version de Iceberg:
Iceberg 0.94  Kevin Kofler  2004-07-14
* Updated version numbers (PreOs.asm).
* Fixed the detection of the 2 AMS routines used by the nostub crash protection.


D'ailleurs, SMA ne marche pas avec Iceberg à cause d'un hack dans SMA qui:
* ne marche correctement que sous AMS 1
* écrit à une mauvaise adresse sous AMS 2
* écrit à une adresse invalide et cause une erreur Protected Memory Violation avec Iceberg
Le problème à déjà été reporté à Patrick Pélissier.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°9   Marquer comme non lu.
Kevin Kofler Ecrit le: Vendredi 16 juillet 2004 à 04:39 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Patrick Pélissier (PpHd) m'a donné la permission de distribuer une version patchée de SMA corrigeant les problèmes de compatibilité avec la Titanium et/ou Iceberg:
This version of SMA has been patched to work with Iceberg by Kevin Kofler, and is being distributed
with the permission of Patrick Pélissier pending an official update.

Bugs fixed:
* Disabled the AMS 1 alpha-lock hack which caused a Protected Memory Violation with Iceberg.
* Unconditionally adding 0x40000 to the address doesn't work on the Titanium, so I have zeroed
  out the offset.

IMPORTANT:
* This patched version is NOT COMPATIBLE with h220xTSR. Please use the original version of SMA if
  you have a HW2 calculator with h220xTSR. (Note that the TI-89 Titanium is HW3, not HW2.)
* SMA is NOT COMPATIBLE with TitaniK, you MUST use Iceberg to run it on the TI-89 Titanium.

Bug reports for this version should be posted in the appropriate message board threads, so Patrick
doesn't have to sift through mails reporting my screwups. :-)

Thanks to Patrick Pélissier for allowing me to release this interim version.

        Kevin Kofler

Lien de téléchargement: SMA 0.41 PATCHÉ pour Iceberg

PpHd travaillera sur une mise à jour officielle de SMA une fois PreOs 0.70 sera prêt. En attendant, vous pouvez utiliser cette version.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°10   Marquer comme non lu.
Kevin Kofler Ecrit le: Lundi 26 juillet 2004 à 11:25 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Nouvelle version de Iceberg:
Iceberg 0.95  Kevin Kofler  2004-07-26
* Updated version numbers (PreOs.asm).
* Added ugly workaround to get programs using the old definitions of
  tios::font_small and tios::font_large, which are no longer valid on the TI-89
  Titanium, to display correctly. (Programs doing custom arithmetic to get those
  offsets, such as Solar Striker, still need to be fixed by hand though.)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°11   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 11 août 2004 à 21:53 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Aucun problème reporté dans les 2 dernières semaines, donc voici la version 1.00:
Iceberg 1.00  Kevin Kofler  2004-08-11
* Updated version numbers (PreOs.asm).
* Don't leak 4 bytes of stack in _nostub anticrash (Ints.asm).
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°12   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 11 août 2004 à 22:20 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Iceberg est maintenant listé à sa nouvelle adresse canonique: http://members.chello.at/gerhard.kofler/kevin/francais/ti89prog/.

Le bêta-test de Iceberg est maintenant terminé. Je laisse ce topic ouvert pour permettre de discuter de TitaniK. Celà dit, il est improbable que je sorte une nouvelle version de TitaniK étant donné que celui-ci a été supplanté par Iceberg.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
  :: Index » Forum Ti68K » Betas et WIPs » TitaniK et Iceberg (12 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 39.54ms avec 18 requetes