30

Ben c'est le kernel qui fait ce boulot d'habitude. Regarde comment il fait...
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. »

31

(sinon, t'as fait un plutot joli cable top, dommage que ça marche pas sur 92+!)

32

Sous Fargo, un TSR ne peut pas appeler de librairie direct.
La seule chose que ton TSR puisse faire est un appel à kernel::exec

33

Oki c'est ce que j'ai essayé de faire, mais j'ai toujours un probleme:
j'ai alloué un handle je lai locké j'ai copié le code.
Le code ne contient que le Kernel::exec et avant une variable contenant le handle a exécuter.
Je n'ai pas utilisé EV_Handler mais directement la table des vecteurs: a l'adresse $68 (Celle de lautoint2) j'ai mis l'adresse du handle contenant mon code.
Mais au désespoir.... Ca ne marche toujours pas...

34

autoint 2 ne marche pas.
autoint 1 serait un meilleur choix (par contre il faut impérativement que tu appelles l'ancienne int).

35

36

en théorie, elle ferait quoi , l'autoint 2?

37

Elle s'est censé s'activer à chaque appuie sur une touche (ou relacher), mais elle marche pas.
Cf source de PedroM.

38

39

40

Ok donc il faut completement oublier l'auto int 2... Ba je vais essayé avec les autres solutions proposés merci

41

Sauf que [erreur, désolé].
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é

42

Bon voila j'ai fait un programme dont voila la source:
	include	"TIOS.H"
	include	"kernel.h"
	xdef	_main
	xdef	_comment

	
_main:	

;******		On alloue de l'espace pour le nouveau code		******
	move.l	#(endevent-newevent),-(a7)		; Place sur la pile la taille du code
	jsr	tios::HeapAlloc
	lea	4(a7),a7
	
;******		On lock le handle					******
	bset.b 	#7,-2(a0) 	

;******	On sauvegarde l'adresse exécutée a la suite de l'auto int 2	******	
	tios::DEREF	d0,a0				; Récupère l'adresse du handle
	move.l	a0,adressecode				; Copie dans la variable

	move.l	$64,a0
	move.l	a0,saveold

	pea	name(pc)
	move.w	#$C,-(a7)
	jsr	tios::FindSymEntry
	lea	6(a7),a7
	
	move.w	10(a0),handle

;******		On copie le code dans le handle ainsi alloué		******
 	move.l 	#(endevent-newevent),-(a7)
 	pea.l 	newevent(PC)
 	move.l	adressecode,-(a7)
 	jsr 	tios::memcpy
	lea	12(a7),a7
	
;******		On redirige l'auto interruption 1			******
	move.l	adressecode,a0
	lea	6(a0),a0
	bclr.b	#2,$600001
	move.l	a0,$64
	bset.b	#2,$600001

	rts			
 EVEN
 
newevent:
	saveold:	dc.l	0
	handle:		dc.w	0
	movem.l	d0-d7/a0-a6,-(a7)
	move.w	handle,-(a7)
	jsr	kernel::exec
	lea	2(a7),a7
	movem.l	(a7)+,d0-d7/a0-a6
	jmp	$1fbf2                         
endevent:

 EVEN
	rts


adressecode:		dc.l	0
handlecode:		dc.w	0
name:			dc.b	"prog",0
_comment:		dc.b	"Install le TSR",0
	END


Il subsiste 2 problemes :
Sans le jsr kernel::exec ca marche mais des que je le rajoute ca bug. Pour info le fichier prog est un fichier avec le strict minimum.
Le second probleme est lorsque j'effectue le saut jmp $1fbf2, je n'arrive pas a utiliser la valeur contenue dans la variable saveold qui contient pourtant $1fbf2
pourquoi je ne peut pas faire jmp saveold?

43

Parce que là tu sautes sur le label saveold, pas sur l'adresse contenue dans ce label. Et tu ne peux pas écrire saveold directement parce que tu vas recopier ce code, donc tu ne peux pas utiliser des références non PC-relatives.
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é

44

[nosmile]

;******		On lock le handle					****** 
	bset.b 	#7,-2(a0) 	 
 
;******	On sauvegarde l'adresse exécutée a la suite de l'auto int 2	******	 
	tios::DEREF	d0,a0				; Récupère l'adresse du handle 
	move.l	a0,adressecode				; Copie dans la variable 
 

==> Bug. Correction
;******	On sauvegarde l'adresse exécutée a la suite de l'auto int 2	******	 
	tios::DEREF	d0,a0				; Récupère l'adresse du handle 
	move.l	a0,adressecode				; Copie dans la variable 
;******		On lock le handle					****** 
	bset.b 	#7,-2(a0) 	  


Et ton problème:
newevent: 
	saveold:	dc.l	0 
	handle:		dc.w	0 
	movem.l	d0-d7/a0-a6,-(a7) 
	move.w	handle(pc),-(a7) 
	jsr	kernel::exec 
	addq.l        #2,a7 
	movem.l	(a7)+,d0-d7/a0-a6 
        move.l saveold(pc),-(a7)
        rts
endevent: 


[/nosmile]

45

Merci j'ai fais le correctif et ajouté un test pour que l'appel du programme ne se fasse que dans le cas de l'appuye de la touche ESC.
L'appel du programme se fait bien mais une erreur survient ensuite, j'ai l'impression que l'ancienne routinne n'est pas appelé ensuite...
D'ou peut venir le probleme?

46

Ah j'ai peut etre trouvé une piste: fargo redirige l'auto int 1 et quand je redirige sur l'adresse original ba ca bug pas aussitot (seulement si la touche est appuyée 2fois de suite..)

47

48

Au fait, je me suis emmêlé les pinceaux, les 12, c'est des nops, la boucle avec un moveq #10 est largement suffisante, c'est même beaucoup plus long que nécessaire.
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é

49

Tu peux pas tester sur émulateur ?

50

Oki bon ba ca y'es j'ai reussi en fait je me suis apercu que bizarement Fargo replacai sur la pile SR ... j'ai donc fait mes tests (sur les flags d'indicateurs) et si il y avait eu un changement depuis le dernier passage j'exécute mon programme qui allume et éteind les bonnes leds...
Si quelqu'un est interessé je peux donné les sources.
Mais comme l'interet n'est pas très grand je pense que ca va pas passioné trop de personnes... wink

51

calculator (./50) :
Fargo replacai sur la pile SR ..


Que veux-tu dire ?

52

Euh fargo redirige l'auto int 1 et voici la 1ere ligne du code:
move #$2700,SR
ensuite il ya un test pour savoir si on est ou pas dans le shell après si on y es pas on dépose sur la pile une adresse (le reste du code a executé) SR ainsi que l'adresse contenue en ROM $200064 (Adresse de l'auto int 1)

EDIT: C'est d'ailleur peut etre plus astucieux d'exécuter le code original avant d'exécuter le code du tsr non?