[fpc-pascal]interrupt 13h

XHajT03 at mbox.vol.cz XHajT03 at mbox.vol.cz
Tue Mar 5 18:40:23 CET 2002


From:           	BigMatt19 at aol.com
Date sent:      	Mon, 04 Mar 2002 14:08:05 EST
Subject:        	Re: [fpc-pascal]interrupt 13h
To:             	<fpc-pascal at deadlock.et.tudelft.nl>
Send reply to:  	fpc-pascal at deadlock.et.tudelft.nl

> Best as I can explain it... since fpc is a 32bit compilier when you
> are using assembler type stuff (eg. registers) you need to use 32bit
> registers.  ax, bx, cx, etc are all 16 bit registers.  It is pretty
.
.

 This isn't quite correct, IMHO. You don't necessarily have to use 32-
bit registers if you're trying to call 16-bit BIOS services (which is 
this case), and nothing else (namely, if you don't try to use 16-bit 
assembly as well). There's another problem though - some BIOS and DOS 
functions (including this one) expect to get address of a memory 
buffer for exchanging larger amounts of data. However, you must make 
sure this memory buffer is accessible to them (i.e. under the 1 MB 
boundary - 16-bit real mode functions can't access more memory), and 
you give them a correct address for the buffer (i.e. the one valid in 
real mode - the same memory area is addressed in an absolutely 
different way in 32-bit protected mode environment). Basically, you 
have to use special DPMI functions (GlobalDosAlloc and GlobalDosFree) 
for allocating memory within the first MB. You can either use unit 
Go32 delivered as part of our RTL, or unit DPMI by Thomas Schatzl 
(this one is packed together with a pretty comprehensive manual for 
DPMI functions; there should be a link to this unit in the 
contributions sections on our WWW pages).

Hope this helps

Tomas





More information about the fpc-pascal mailing list