X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com Date: Tue, 15 Mar 2011 02:30:24 -0400 Message-Id: From: Eli Zaretskii To: djgpp AT delorie DOT com In-reply-to: (message from Jim Michaels on Mon, 14 Mar 2011 15:52:59 -0700 (PDT)) Subject: Re: csdpmi7 not working on virtualbox, how use dosmemget with seg ofs from int21h? References: <39cdc18e-eccb-4213-b896-db3be020702e AT w9g2000prg DOT googlegroups DOT com> <3e035797-6b8e-4106-bd29-98e87a9cc121 AT a21g2000prj DOT googlegroups DOT com> Reply-To: djgpp AT delorie DOT com > From: Jim Michaels > Newsgroups: comp.os.msdos.djgpp > Date: Mon, 14 Mar 2011 15:52:59 -0700 (PDT) > > I don't take to hand-waving. I need concrete examples. code it. "Hand-waving"? "code it"? Do I work for you that you think you can talk to me that way? Do you realize that I needed to take some non-trivial amount of time out of my busy day to write up that stuff, complete with verified URLs and references to functions and variables you would have otherwise needed to dig out yourself? Can you appreciate this effort given out to you for free? Or is the above some new way of saying thank you? > so I ask again, the address is actually from DOS in ES:DI, how do I > translate this address into an address dosmemget can use? I KNOW that > this address is NOT __tb. so try again. You have the answer at your fingertips, in the library reference (libc.info). Quote: dosmemget ========= Syntax ------ #include void dosmemget(int offset, int length, void *buffer); Description ----------- This function transfers data from MS-DOS's conventional memory space to the program's virtual address space. The OFFSET is a physical address, which can be computed from a real-mode segment/offset pair as follows: offset = segment * 16 + offset; The LENGTH is the number of bytes to transfer, and BUFFER is a pointer to somewhere in your virtual address space (such as memory obtained from `malloc') where the data will go. End of quote. Any questions? If not, then "try again". > that FAQ is only half useless to me right now - parts of it I think I > may need like maybe the peek and dosmemget. You are wrong, everything I wrote is relevant and useful. > I don't know, maybe DJ forgot to put that piece in DJGPP or just > didn't think to document it - hey - I make mistakes too. DJ didn't forget anything of the kind, DJGPP v2.03 is being in use for 10 years, and all the machinery to implement what you want is there and working well. Believe me. You can look at the library sources to see similar functions that call DOS interrupts. They are all working. > maybe the answer is simple. Yes, it is: RTFM. > one part of the answer I was thinking was to convert it to a long > after the int21h call: > unsigned long adr = r.x.es; > adr <<= 4; > adr += r.x.di; See the above excerpt from the library docs. > but what to do with it after that I don't rightly know. The references to the FAQ I posted will tell you _precisely_ that.