1

tout dabord, est ce que la table des handle se trouve bien ,sur toutes les ti à ,l'adresse 0x5D42?

ensuite, quelqun sait il ce que fait concretement la fonction malloc ?

et quelqun peut il m'expliquer l'utilité du mode superviseur ?

merci pour vos reponses .

euh...

2

>tout dabord, est ce que la table des handle se trouve bien ,sur toutes les ti à ,l'adresse 0x5D42?

Bonne question, je ne m'y fierais pas perso, mais pourquoi as-tu besoin de l'adresse de cette table ?

>ensuite, quelqun sait il ce que fait concretement la fonction malloc ?
malloc c'est du C pas de l'asm hein? -> cf la doc de tigcc.
Malloc alloue un bloc de mémoire de la taille que tu veux 'en fait un peu plus gros, mais bon...) dans la mémoire haute, le locke, et t'en retourne le pointeur.

>et quelqun peut il m'expliquer l'utilité du mode superviseur ?
Certaines fonctions du microprocesseurs ne sont accessibles qu'en mode superviseur. Pour un programme normal tu n'as pas à t"en occuper, sauf si tu veux faire par exemple un débogueur.
Le mode superviseur est notamment utilisé par les interruptions.
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

3

> malloc c'est du C pas de l'asm hein? -> cf la doc de tigcc.
doc de tigcc :
malloc Function (ROM Call 0xA2)

c'est un romcall donc de l'asm tongue

le mode superviseur est utile quand on ecrit un OS par exemple
avatar

4

Ce que je voulais dire c'est que malloc est une fonction C, et son vrai nom en tant que romcall est HeapAllocPtr, et c'est logiquement le nom qu'on devrait utiliser en programmant en asm (enfin je trouve, après chacun fait ce qu'il veut hein)
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

5

mais en même temps c'est plus court, et ca c'est un argument de poids tongue
avatar

6

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 happy
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 happy). 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é).
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

7

cross
euh...

8

merci infiniment crystal, tu viens d'allumer la lumiere ds mon esprit !

toutefois, je ne trouve pas jbne dans le 68kguide, c'est un alias de bne ?
et #0x2078 c'est quoi? c'est une instruction asm binaire ? une adresse ?

et est ce que quelqun sait ce que fait HeapGetHandle ?



euh...

9

il t'a mis de l'asm gnu (sick)

gnu as <-> a68k
jbne <-> bne
#0x2078 <-> #$2078
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

10

JBcc c une pseudo instruction de as qui se transforme en Bcc ou Jcc
Et 2078 ça correspond à movea.l (abs).W,%a0
Quand à HeapGetHandle c dans la doc de TIGCC http://tigcc.ticalc.org/doc/alloc.html#HeapGetHandle
EDIT: Erreur pour 2078
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

11

$2078 -> movea.l Abs.W,a0

Edit : Erreur pour 2078 roll
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

12


HeapTable:
movea.l (0xC8).w,%a0
movea.l 600(%a0),%a0
L0:
cmpi.w #0x2078,(%a0)+
jbne L0
movea.l (%a0),%a0
rts

Ne marche sur aucun AMS!

13

et pour cause cheeky

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

14

Hmm d'ailleurs j'ai fait une petite erreur dans le code, ça serait plutôt
HeapTable:
  movea.l (0xC8).w,%a0
  movea.l 600(%a0),%a0
L0:
  cmpi.w #0x2078,(%a0)+
  jbne L0
  movea.w (%a0),%a0
  movea.l (%a0),%a0
  rts
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

15

c déjà mieux ^^

mais ça foire probablement sur ams3...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

16

Tu peux enlever le mot "probablement"

17

Vous pourriez peut-être expliquer pourquoi ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

18

Je crois que l'explication est là topics/44353-titarom-la-titanium-sur-vti#11
EDIT: Et la version compatible AMS 3 (en A68k pour faire plaisir à Ximoon)
HeapTable:
  movea.l ($C8).w,a0
  movea.l 600(a0),a0
L0:
  cmpi.b #$20,(a0)
  addq.w #2,a0
  bne.b L0
  cmpi.b #$78,-1(a0)
  beq.b L1
  cmpi.b #$79,-1(a0)
  beq.b L2
  lea (0).w,a0
  rts
L1:
  movea.w (a0),a0
  movea.l (a0),a0
  rts
L2:
  movea.l (a0),a0
  movea.l (a0),a0
  rts
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

19

lea 0.w,a0 -> sub.l a0,a0 ...
et -1(a0) -> -(a0) / -1(a0) -> (a0)+ et move.l(a0),a0;rts -> bra \return

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

20

donc si j'ai bien compris pour faire mon heapderef je fais ca :

 void* heapderef(unsigned short handle asm("%d0"))
{
	
	asm(" 
  andi.l #65535,%d0 
  lsl.l    #2,%d0

  move.l (0xC8).w,%a0 
  move.l 600(%a0),%a0 
  boucle: 
  cmpi.w #0x2078,(%a0)+ 
  bne boucle
  move.w (%a0),%a0
  move.l 0(%a0,%d0.l),%a0

");
}     

void _main(void)
{
HANDLE h=HeapAlloc(10);
clrscr();printf("%lu\n%lu",(unsigned long)heapderef(h),(unsigned long)HeapDeref(h));
ngetchx();
HeapFree(h);

}

pk ca marche pas ???????



en fait j'essaie de savoir ce que fait heapgethandle en interne et j'arrive pas a comprendre meme en le desassemblant.
euh...

21

euh nan mais le code ASM là-haut est censé renvoyer l'adresse de la table du heap (qui est une constante pour chaque AMS), pas te faire un HeapDeref embarrassed

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

22

ca non plus ca marche pas :
 andi.l #65535,%d0 
  lsl.l    #2,%d0
 
  move.l #0,%a0
  move.l (0xC8).w,%a0 
  move.l 600(%a0),%a0 
 
 boucle: 
  cmpi.w #0x2078,(%a0)+ 
  bne boucle
 
  move.w (%a0),%a0
  move.l %a0,%d1
  andi.l #65535,%d1 
  move.l %d1,%a0
  
 move.l 0(%a0,%d0.l),%a0
euh...

23

oups ah oui j'avais mal lu, euh fais gaffe, en principe tout peut arriver avant et après un asm(), donc tu devrais pas passer directement par les registres (même si c possible que ça marche en l'état, ça pourrait très bien foirer dans une autre version de gcc...)

et il te manque un move.l (a0),a0, regarde les autres versions du même code....

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

24

Tout d'abord pour définir une fonction asm dans un ficier C, fais:
type_retourn ma_fonction(paramètres);
asm("ma_fonction:
  | Code ...
  rts")

Ensuite, pour faire un HeapDeref il faut multiplier le handle par 4...
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

25

j'avais mal calculé mes move ... vraiment dsl

et en fait je la teste la, elle va finir ds une archive
euh...

26

merci ca marche maintenant !

par contre, dans HeapGetHandle j'comprend rien...
j'ai l'impression que ça passe par copen et companie mais c'est tres flou...
euh...

27

Hmm bah HeapGetHandle a l'air relativement complexe, mais en sachant ce qu'il fait et en regardant le début du code, je dirais qu'il récupère le nombre de handles de la table, puis qu'il itère jusqu'à trouver une entrée vide, ou qu'il ait atteint la fin. Après, le code semble plus obscur, mais c'est pas ce qu'il y a de plus intéressant à étudier grin
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

28

bidoo
: tout dabord, est ce que la table des handle se trouve bien ,sur toutes les ti à ,l'adresse 0x5D42?

NON!

Et votre code n'est pas beaucoup mieux. Sur AMS 2.00 et supérieurs, il y a un ROM_CALL pour ça (le numéro 0x441 si je me rappelle bien). N'utilisez votre hack que pour AMS 1 (et dans ce cas, un offset fixe de 8 à l'intérieur de HeapDeref suffit, pas la peine de rechercher)!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

29

Et d'ailleurs, c'est très sale de trafiquer la table des handles directement, les ROM_CALLs Heap* sont là pour ça!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

30

bon je m'attaque maintenant a ngetchx(),
quelqun a t'il deja reussi a comprendre ngetchx, j'arrive vraiment pas a capter son fonctionnement...

euh...