🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.msdos.programmer
Article #40

TSR not working

#40
From: vincent
Date: Wed, 04 Nov 1992 18:09
97 lines
2216 bytes
Ok TSR freaks, why this litle one doesn't work

---------------------  snip snip -------------------------- makefile

CFLAGS = /Fc /Zi /f /Od /Gs /AS /W4 /nologo

main.exe : main.obj
	cl /Zi /Fm main.obj

.c.obj:
	cl /c $(CFLAGS) $(@B).c

---------------------  snip snip --------------------------- main.c

#include	<stdlib.h>
#include	<dos.h>
#include	<bios.h>

#define	CODESEG			_based(_segname("_CODE"))
#define MK_FP(seg,ofs)		((void _far *) ((((long)seg)<<16) + (long)ofs))
#define PARAGRAPHS(x)		((FP_OFF(x) + 15) >> 4)

typedef			void	(interrupt _far *INTVECT) ();

struct {
	INTVECT	old_timer;

	unsigned char _far * CODESEG tsrstack;

	int	oldSP,
		oldSS,
		oldDS,
		ds_save,
		seg_stack,
		off_stack,
		retadd,
		tick_me;
} CODESEG data;

void ctimer (void)
{
	data. tick_me++;
}

void _interrupt _far new_timer (void)
{
	_asm {
		mov	cs:data. oldSS, ss
		mov	cs:data. oldSP, sp
		mov	cs:data. oldDS, ds
				 		 ; Load new stack
		mov	ss, cs:data. seg_stack
		mov	sp, cs:data. off_stack
		mov	ds, cs:data. ds_save

		mov	bp, sp

		call	ctimer

		mov	ss, cs:data. oldSS
		mov	sp, cs:data. oldSP
		mov	ds, cs:data. oldDS

		mov	bp, sp
	}
	_chain_intr (data. old_timer);
}

void main ()
{
	unsigned int memtop, dumy = 0;

	data. tick_me = 0;

	_dos_freemem (*(short _far *) MK_FP (_psp, 0x2c));

	data. tsrstack = malloc (1024);
	data. tsrstack += 1024;

	data. seg_stack = FP_SEG (data. tsrstack);
	data. off_stack = FP_OFF (data. tsrstack);

	_asm mov cs:data. ds_save, ds

	memtop = data. ds_save + PARAGRAPHS (data. tsrstack) - _psp;

	_dos_setblock (memtop, _psp, &dumy);

	data. old_timer = _dos_getvect (0x08);
	_dos_setvect (0x08, new_timer);

	_dos_keep (0, memtop);
}

---------------------------------------------------------------------

vincent@datmuc.dat.de
Technical Details
Message-ID: <1335@datmuc.UUCP>
Path: arc1-ca.pugleaf.net!sparky!uunet!charon.amdahl.com!pacbell.com!sgiblab!zaphod.mps.ohio-state.edu!wupost!gumby!yale!yale.edu!jvnc.net!gmd.de!Germany.EU.net!ira.uka.de!datmuc!vincent

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!charon.amdahl.com!pacbell.com!sgiblab!zaphod.mps.ohio-state.edu!wupost!gumby!yale!yale.edu!jvnc.net!gmd.de!Germany.EU.net!ira.uka.de!datmuc!vincent
From: vincent@datmuc.UUCP (vincent)
Newsgroups: alt.msdos.programmer
Subject: TSR not working
Message-ID: <1335@datmuc.UUCP>
Date: 4 Nov 92 18:09:20 GMT
Lines: 99