| delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f |
| From: | Eph <t DOT ephraim AT gmail DOT com> |
| Newsgroups: | comp.os.msdos.djgpp |
| Subject: | Re: calling a RM function which is placed below 1 MB |
| Date: | Thu, 24 Jul 2008 01:30:36 -0700 (PDT) |
| Organization: | http://groups.google.com |
| Lines: | 75 |
| Message-ID: | <f78b8a9f-b3ff-4ab6-b95b-151c822873f7@b1g2000hsg.googlegroups.com> |
| References: | <ca0df607-1be3-4358-b84f-f0ccddde3197 AT d77g2000hsb DOT googlegroups DOT com> |
| <g67uat$di0$1 AT aioe DOT org> | |
| NNTP-Posting-Host: | 80.70.169.36 |
| Mime-Version: | 1.0 |
| X-Trace: | posting.google.com 1216888237 10550 127.0.0.1 (24 Jul 2008 08:30:37 GMT) |
| X-Complaints-To: | groups-abuse AT google DOT com |
| NNTP-Posting-Date: | Thu, 24 Jul 2008 08:30:37 +0000 (UTC) |
| Complaints-To: | groups-abuse AT google DOT com |
| Injection-Info: | b1g2000hsg.googlegroups.com; posting-host=80.70.169.36; |
| posting-account=jZZPxgoAAAAqQ_zmNV7SH4j6l4lfRyOd | |
| User-Agent: | G2/1.0 |
| X-HTTP-UserAgent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.1) |
| Gecko/2008070208 Firefox/3.0.1,gzip(gfe),gzip(gfe) | |
| X-HTTP-Via: | 1.1 abgpro01 (NetCache NetApp/6.0.6) |
| To: | djgpp AT delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| X-MIME-Autoconverted: | from quoted-printable to 8bit by delorie.com id m6O8j2jo024178 |
| Reply-To: | djgpp AT delorie DOT com |
Thx for your hint. I thought:
memset(®s, 0, sizeof(__dpmi_regs));
Zeros it all so this should not matter isn't it?
Ciao Ephraim
On 23 Jul., 20:45, "Rod Pemberton" <do_not_h DOT DOT DOT AT nohavenot DOT cmm> wrote:
> "Eph" <t DOT ephr DOT DOT DOT AT gmail DOT com> wrote in message
>
> news:ca0df607-1be3-4358-b84f-f0ccddde3197 AT d77g2000hsb DOT googlegroups DOT com...
>
>
>
> > I've problems to get a call to
> > __dpmi_simulate_real_mode_procedure_retf_stack working correctly.
> > My problem is, that I need to call a 16Bit real Mode function placed
> > in Memory below 1MB, which expects three parameters to be placed on
> > the RM Stack.(see comments in the code).
>
> > Below the code, how I tried to use the function:
>
> > ---------------
> > __dpmi_regs regs;
> > struct {
> > unsigned long u1;
> > unsigned long u2;
> > unsigned long u3;
> > } stack;
>
> > memset(&stack, 0, sizeof(stack));
>
> > stack.u1 = parm1; // expected at bp[14]
> > stack.u2 = parm2; // expected at bp[10]
> > stack.u3 = parm3; // expected at bp[06]
>
> > memset(®s, 0, sizeof(__dpmi_regs));
>
> > regs.x.cs = seg; // segment of the function entry
> > regs.x.ip = ofs; // offset of the function entry
>
> DPMI 0.9 says ss:sp must be zero for the DPMI host to provide a real mode
> stack, or ss:sp must point to a valid real mode stack. DJGPP doc's
> (libc.info) say ss:sp and flags must be set to valid values or zero.
>
> regs.x.ss=0;
> regs.x.sp=0;
>
> The DJGPP doc's don't state which "flags" must be set (DPMI or __dpmi_regs):
>
> regs.x.flags=0; /* __dpmi_regs flags */
> regs.h.bh=0; /* DPMI flags */
>
> But, it's likely the doc's were referring to the DPMI flags... (BH bit 0 =
> 1 resets A20 and PIC) You'll also need to set any other registers that the
> function uses since the call copies _all_ registers.
>
> > __dpmi_simulate_real_mode_procedure_retf_stack(®s, sizeof(stack) /
> > 2, &stack);
> > ---------------
>
> > What am I doing wrong?
>
> Not sure.
>
> > Can anyone please point it out!
>
> Try the above. Let us know.
>
> Rod Pemberton
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |