www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/06/29/14:58:06

Xref: news2.mv.net comp.os.msdos.djgpp:5527
From: robert DOT fremin AT mailbox DOT swipnet DOT se (Robert Fremin)
Newsgroups: comp.os.msdos.djgpp
Subject: Why is my program pausing at regular interalls?
Date: Sat, 29 Jun 1996 12:26:01 GMT
Organization: -
Lines: 68
Message-ID: <31d51ccf.1258881@nntpserver.swip.net>
NNTP-Posting-Host: dialup101-1-13.swipnet.se
NNTP-Posting-User: 41e1c758e329b31c4d905147051ba029
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I have located the above mystery to my DOS-int call:


movb  $0x0b, %ah
int   $0x21
// to get keyboard status


I'm using this call as part of a GetKey(char ascii) function.
In BC++ realmode, the same code runs without any problems, but
in DJGPP it halts for some tenths of seconds every 2048 call,
and doesn't break the program at the exact moment you press a key.
Hmm, here is the whole test-program so you'll understand what
I'm talking about...

// kb_test.c
unsigned char _ascii;

char GetKey(char ascii)		// true if key has been pressed
{
	_ascii = ascii;
	asm volatile ("
		movb  $0x0b, %ah
		int   $0x21
		cmpb  $0x00, %al
		je    false1

		movb  $0x08, %ah
		int   $0x21
		cmpb  __ascii, %al
		jne   false1

		movl  $0x01, %eax
		jmp   end1
	false1:
		movl  $0x00, %eax
	end1:
	");
}

void main()
{
	unsigned long counter = 0;

	do
	{
		printf("%08d", counter++);	// show the running counter
	}
	while (!GetKey(' '));			// wait for space to be pressed
						// the exit should be instant
}

// end of kb_test.c

BTW, is my solution of return-code the best (without using the complex extended
inline assembly)? I had to put the labels inside the "" of asm, so I couldn't do
like this;

		jne   false1
	");
		return 1;
	false1:
		return 0;


--- Robert Fremin -----------------------------------
--- http://bip.concept.se/user/sprite/hemsida.htm ---
-----------------------------------------------------

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019