Voici comment la pile est trouvée dans les versions publiques suffisamment récentes de tthdex (un warning dû à un manque de typecast):
>handle_table = *(unsigned long**)(unsigned long)(*((HANDLE*)HeapDeref+4+AMS_2xx));
Ici, handle_table est un unsigned long*; tu peux mettre aussi unsigned char**...
Si tu veux la version assembleur (ce qui est probable, vu que tu postes dans ce forum):
movea.l 0x96*4(%%a5),%%a0
addq.l #8,%%a0
cmpi.w #0x3E8,-2(%%a5)
blt.s 0f
addq.l #2,%%a0
0:
movea.w (%%a0),%%a4
movea.l (%%a4),%%a4
a4 contient "Heap"
Note: regarder si on peut faire mieux avec ROM_CALL 441 (pour AMS 2.xx), est sur ma todo list.
Uther Le 11/01/2003 à 17:29 je vois vraiment pas l'interet de porter un prog kernel en nostub!
N'écris pas $96, mais plutôt le nom du ROM_CALL correspondant, sinon pour te relire, c'est assez chiant, on doit aller chercher à quel rom_call ça correspond (HeapDeref, dans notre cas)...
Sinon, comment ça se fait que ton code soit assemblable, puisqu'il me semble qu'addq n'accepte que des valeurs comprises entre 0 et 7 (inclus).
Sinon, je ne suis pas capable de t'aider, je n'arrive pas à comprends pas ce que fait ton code (dsl).
Par exemple, je ne comprends pas à quoi sert cette ligne : cmpi.w #$3E8,-2(a5)
Voilà et pour utiliser HeapDeref, il faut mettre l'argument (un handle) sur la pile et tu récupères l'adresse dans a0 (Mais ça ne devait pas être ça ta question, parce que ton code n'a pas trop l'air de correspondre à ça, sauf p-ê la première ligne).
La deuxième ligne c'est plutôt move.w d0,-(a7) puisqu'un handle tient sur 2 octets.
Sinon, je pense que c'est ça.
Ah oui, c'est clair que addq #0,Dn n'a pas de sens, donc c'est mieux de permettre d'aller jusqu'à 8...
PpHd Le 12/01/2003 à 18:32 Demande a l'auteur pour l'autorisation d'avoir une version statique de pk92lib.
> met le au format dll (mdr)
Imbécile !
>probléme il me faut Heap, or Xdanger ma donner un code pour Heap,
j'ai donc tout simplement remplacer.
mais je pense que je vais faire appel a HeapDeref directement sa sera plus simple.
Plus lent, surtout.
Si tu immobilises un registre (comme je fais dans tthdex, avec a4), c'est plus simple:
Dans ce cas-là, Deref d0,a0 est remplacé par:
lsl.w #2,d0
move.l 0(a4,d0.w),a0