1 - En principe la table des handles n'a pas d'adresse définie à l'avance.
Si tu veux obtenir cette adresse essaye quelque chose du genre:
HeapTable:
movea.l (0xC8).w,%a0
movea.l 600(%a0),%a0
L0:
cmpi.w #0x2078,(%a0)+
jbne L0
movea.l (%a0),%a0
movea.l (%a0),%a0
rts
Je n'ai pas tester mais ça devrait fonctionner sur la plupart des AMS (sauf peut être le 3, mais ça doit pouvoir s'adapter si besoin est)
2 - Sur TI, malloc est un alias de HeapAllocPtr. Etant donné qu'elle alloue un pointeur, elle appelle HeapAllocHigh qui va si nécéssaire réorganiser la mémoire en appellant HeapCompress, et allouer et vérouiller le bloc de mémoire à la fin de la mémoire, puis HeapAllocPtr apelle HeapDeref qui te retourne l'adresse du handle alloué. Pour pouvoir désallouer le handle à l'aide de HeapFreePtr, HeapAllocPtr alloue un handle de deux octets de plus, puis stocke le handle au début, ensuite, la fonction modifie la table des handle en incrémentant l'adresse du handle de 2, et te passe cette adresse en retour
3 - Le mode superviseur te permet d'utiliser les instructions MOVE SR, MOVE USP, RTE et STOP. C'est le mode qui est utilisé dans les interruptions. Il est utile pour plusieurs raisons, tout d'abord empêcher l'accès à certains paramètres du matériel en mode utilisateur (Sur TI on peut facilement accéder au mode superviseur par le TRAP 12 ou même en créant nous même une interruption prévue à cet effet, mais on peut imaginer un système qui requièrerait d'être en mode superviseur pour modifier la table des vecteurs par exemple

). Si tu désire faire du multitâches par exemple, les interruptions peuvent t'être utile et ne doivent pas être désactivées par un programme, ce qui casserait le multitâche. Additionnellement, le mode superviseur possède un pointeur de stack différent du mode utilisateur, ce qui permet dans une interruption de ne pas interférer avec le pointeur utilisateur, qui ne pointe pas forcément vers le stack, puisque a7 peut être utilisé pour ce qu'on veut (plus ou moins en réalité).