www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1993/01/30/23:57:54

From: rafael DOT ramirez AT channel1 DOT com (Rafael Ramirez)
Date: 30 Jan 93 (21:35)
To: djgpp AT sun DOT soe DOT clarkson DOT edu
Subject: how to access 0x00800000

Sorry to bother, but I'm behind schedule on a project and I need to find
out ASAP this:

-We have 386's with a "funny memory map" and I'm testing DJGCC to
see how it does for a new version of an application we have done
here (currently uses Watcom).  There are four Megabytes of RAM at 0-640
and 1MB ...3.5MB. Of course, some video and other adapters' RAM between
640-and 1MB.  But I also have a full megabyte of memory from another
adapter at 00800000-008FFFFF.  No problem accessing the "real mode"
memory (first MB).  No problem accessing the other 3.5MB, as managed by
GO32. No problem accessing the Video Adapter RAM as managed by GO32. But
it seems that I can not access (at least directly) the "*physical*
address range" 00800000-008FFFFF. I've tried the address 01800000
(01000000+00800000), but it doesn't seem to work either (should it?)

I can choose where the 1Meg of RAM from this adapter is mapped into the
physical address space, in 1 MB boundaries from 0x000000 (not a good
idea since there is already the "real mode" 1st MB) up to 0xf00000.

Now, how do I access this MB of "physical" RAM and what's the best way
to do it? I need ultra-fast access, so nothing like poke() or memcpy()
would do. I need to do something like:
          MemPtr = (long *) 00800000L; MemPtr+MatrixXY=x*y*z; MemPtr++;

Please, help!  I need answers a bit concrete, since I'm not that
familiar with the GO32 code (but I can rebuild it and modify it if
necessary).  But I wan't be able to follow an answer of the type
"just create a new LSS and specify the mapping range ..."  Thanks.

And while we are at it, three quickies:

        -how does GO32 determine which physical addresses are "real"
         (mapped to RAM) and which ones are not (faults to VM)?

        -how do you use a local label when using in-line assembly?
         I've tried to write something like L1: as the manual suggests
         and as it seems logic, but it doesn't work!  I.e. something
         like
         __asm{
           cmp  %eax,%ebx;
           jz   L1;
         L1:
           cli;
              }

        -And last I'd like to know if there is a way for somebody w/o
         ftp access to get a hold of the .DOCs for GASS

 * SLMR 2.1a * Rafael DOT Ramirez AT channel1 DOT com from SPAIN! (A.K.A. RRC)
--
Channel 1 (R)   Cambridge, MA


- Raw text -


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