delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/07/21/05:34:25

From: Gordon Brown <brown AT signal DOT dra DOT hmg DOT gb>
Newsgroups: comp.os.msdos.djgpp
Subject: DPMI Physical Address Mapping
Date: Thu, 17 Jul 1997 11:58:26 +0100
Organization: DERA
Message-ID: <33CDFAD2.74B@signal.dra.hmg.gb>
NNTP-Posting-Host: 146.80.9.20
Mime-Version: 1.0
Lines: 26
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I am trying to access physical memory location 0x3d00000
so I am using __dpmi_physical_address_mapping.  But this 
did not work so I wrote some in-line assembler and this does.
So what's the difference between 

/* Map in the board's physical address */
my_map->size = 0x01000000;
my_map->address = 0x3d000000;

if((linear = __dpmi_physical_address_mapping(my_map)) == -1)
	printf("Failed to map physical address\n");

and this ?

regs.x.ax = DPMI_PHYSICAL_ADDRESS_MAPPING;
regs.x.bx = (0x3d000000 >> 16) & 0xffff;
regs.x.cx = 0x3d000000 & 0xffff;
regs.x.si = (0x01000000 >> 16) & 0xffff;
regs.x.di = 0x01000000 & 0xffff;

int86( 0x31, &regs, &regs );
if (regs.x.cflag)
	printf( "Failed to map in registers. Error %x.\n",
		 regs.x.ax );

	linear = regs.x.cx | (regs.x.bx << 16);

- Raw text -


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