WikiPendium

(beta)

TSR

WikiPendium :: RecentChanges :: RecentlyCommented :: UserSettings :: You are ec2-3-133-141-6.us-east-2.compute.amazonaws.com

TSR Programs

(Terminate and Stay Resident)

Terminate and Stay Resident programs are standard programs that use the special Ptermres() system function when returning to the calling process. This way, they have some part of their code and data that camps in memory and can never be freed again.

TSR programs are very usefull on Atari to hook system calls, implement device drivers or do background jobs (hooking an interrupt vectors such as the VBL?). All TSR programs must put a cookie of their own in the CookieJar to let everyone know they are present. This makes their task easyer when in the need of controlling if they haven't already been launched (indeed, there is no point in hooking an interupt vectors twice, and that applies to most TSR programs).

Example source file


	TEXT

	move.l	4(sp),a0	; Read basepage pointer
	move.l	#256,d0		; Length of basepage
	add.l	12(a0),d0	; Add TEXT length
	add.l	20(a0),d0	; Add DATA length
	add.l	28(a0),d0	; Add BSS length
	move.l	d0,resident_length

	lea	stack,sp	; Set our stack pointer

init_tsr:
	; Do whatever initialization stuff needed, then go to init_tsr_ok (if all is ok) or init_tsr_error (if any error)

	; Call Ptermres() to protect our program memory
init_tsr_ok:
	clr.w	-(sp)
	move.l	resident_length,-(sp)
	move.w	#49,-(sp)
	trap	#1

	; Should never go there
neverending_loop:
	bra.s	neverending_loop

	; Any error, quit program as usual
init_tsr_error:
	clr.w	-(sp)	; Pterm()
	trap	#1

	BSS	
resident_length:	ds.l	1

	ds.l	1024
stack:	ds.l	1

	END



See Also

the CookieJar section, and the CookieReference?

Commentaires [Cacher commentaires/formulaire]