Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.os.msdos.programmer > #387
| From | James Harris <james.harris.1@googlemail.com> |
|---|---|
| Newsgroups | alt.os.development, comp.os.msdos.programmer |
| Subject | Re: How to call Int 15h, ax=e881h? |
| Date | 2011-11-01 12:57 -0700 |
| Organization | http://groups.google.com |
| Message-ID | <7a1ef205-0198-49f2-b7e7-c0d712ec7977@g7g2000vbv.googlegroups.com> (permalink) |
| References | <j8n1ll$t95$1@speranza.aioe.org> |
Cross-posted to 2 groups.
On Oct 31, 8:50 pm, "Rod Pemberton" <do_not_h...@noavailemail.cmm> wrote: > Does anyone here know how to correctly call Int 15h, ax=e881h? Great question, Rod. I don't know the answer and haven't tested it but I'll try to make some comments below. Isn't e881 documented to provide exactly the same info as e801? If so it appears to be an effort by Phoenix to make the same info available in Protected mode. Of course, in Protected mode int 0x15 is generally unrelated so seems wrong. Could the reference to an interrupt be the misleading part and the rest be correct? On the other hand maybe Phoenix anticipated Mike's pdbios32. :-) > On two machines, if I call it from 16-bit real mode, it fails, i.e., > unsupported. On one machine, if I call it from 16-bit real mode, the > machine locks up. My assumption is that this machine supports this > function. > > RBIL has a note that says e881h is 32-bit. The machine that locks up has a > Phoenix BIOS. The PhoenixBIOS 4.0r6 User's Manual and the PhoenixBIOS > 4.0v1 Programmer's Guide both say that e881h is for 32-bit protected mode. I have a couple of Phoenix machines I could also test with in real mode if you want to post a code snippet. Of course, it looks like e881 should never be called in real mode. It is simply not valid in that mode and one should use e801 instead. > How does one call the BIOS while in 32-bit protected mode? > > Neither manual tells the protected mode setup required to call e881. For > 32-bit, the manuals only describe how to call BIOS32 Service Directory. I think you've answered your own question. For comparison, based on PCI System Architecture - 4th ed - the steps below should determine if there are any 32-bit protected mode BIOS functions available. Apart from the PCI bit at the end does this match the Service Directory finder you mention? 1. Scan 0x000e_0000 to 0x000f_fff0 looking for "_32_" at the start of a 16-byte block. 2. Checksum all 16 bytes of any block found. Byte total should be zero. If protected mode BIOS is available this should locate a record with these fields char[4] "_32_"; uint32 directory_program; uint8 revision_level; uint8 structure_size; /* in units of 16 bytes - always 1 */ uint8 checksum; uint8[5] padding; I guess a near call to the directory program is required. Given these inputs: eax = desired service identifier ebx = 0 it should report whether certain 32-bit services are available. I don't know what eax should be for Phoenix' e881 or the family it is part of. Apparently for the PCI BIOS eax should be set to "$PCI". > Do I need paging or flat mode or need to use BIOS' call to setup PM? Is the > BIOS code for e881h 32-bit protected-mode? Do I need to setup 16-bit code > segment selectors for the call to BIOS and do an intersegment jump? Do I > call the 16-bit Int 15h vector from 32-bit protected mode? Do I use BIOS32 > somehow? Is int 15h, multi-mode code, i.e., 16-bit RM, 16-bit PM, and > 32-bit PM? How does calling Int 15h in 32-bit PM affect iret? Do I need an > override on the call or simulate call's return values? This paragraph reminds me of the introduction to 'Soap' from the late 70s or early 80s. :-) > I've searched for any answer to this via Google, Yahoo, and Usenet archives, > but I've not found an answer ... Also, I can't find any use of e881h in > code that is publicly available. My guess would be to call the Int 15h RM > vector directly from PM, but I have some doubts about Int 15h being > multi-mode code ... Both e881 and e801 are very limited and to have no way to report holes in the address space. If they are all that's available what should we do? Is it too naive to assume that all PCs made back then had simple memory layouts with no holes and no devices in the memory space these would report? If you have a chance to go through real mode then e820 has to be the best option, and it's been around for a long time, falling back to e801 and ah=0x88 only in extremis. If being booted I would expect any decent bootloader would pass-in the memory map. So, is this an academic question? It's an interesting one nonetheless. James
Back to comp.os.msdos.programmer | Previous | Next — Previous in thread | Next in thread | Find similar
How to call Int 15h, ax=e881h? "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-10-31 16:50 -0400
Re: How to call Int 15h, ax=e881h? Jim Leonard <mobygamer@gmail.com> - 2011-10-31 15:32 -0700
Re: How to call Int 15h, ax=e881h? Rugxulo <rugxulo@gmail.com> - 2011-10-31 16:37 -0700
Re: How to call Int 15h, ax=e881h? "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-11-01 05:10 -0400
Re: How to call Int 15h, ax=e881h? Ross Ridge <rridge@csclub.uwaterloo.ca> - 2011-10-31 20:18 -0400
Re: How to call Int 15h, ax=e881h? "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-11-01 05:09 -0400
Re: How to call Int 15h, ax=e881h? Ross Ridge <rridge@csclub.uwaterloo.ca> - 2011-11-01 12:23 -0400
Re: How to call Int 15h, ax=e881h? James Harris <james.harris.1@googlemail.com> - 2011-11-01 12:57 -0700
Re: How to call Int 15h, ax=e881h? "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-11-02 02:49 -0400
Re: How to call Int 15h, ax=e881h? Ross Ridge <rridge@csclub.uwaterloo.ca> - 2011-11-02 10:33 -0400
Re: How to call Int 15h, ax=e881h? James Harris <james.harris.1@googlemail.com> - 2011-11-04 14:47 -0700
Re: How to call Int 15h, ax=e881h? Ross Ridge <rridge@csclub.uwaterloo.ca> - 2011-11-04 17:59 -0400
Re: How to call Int 15h, ax=e881h? James Harris <james.harris.1@googlemail.com> - 2011-11-04 15:09 -0700
Re: How to call Int 15h, ax=e881h? "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-11-04 20:12 -0400
Re: How to call Int 15h, ax=e881h? Ross Ridge <rridge@csclub.uwaterloo.ca> - 2011-11-04 23:27 -0400
Re: How to call Int 15h, ax=e881h? "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-11-06 02:46 -0500
Re: How to call Int 15h, ax=e881h? "Rod Pemberton" <do_not_have@noavailemail.cmm> - 2011-11-04 21:04 -0400
Re: How to call Int 15h, ax=e881h? "Marven Lee" <marven10@gmail.com> - 2011-11-05 01:12 +0000
Re: How to call Int 15h, ax=e881h? Nomen Nescio <nobody@dizum.com> - 2011-11-05 19:04 +0100
Re: How to call Int 15h, ax=e881h? James Harris <james.harris.1@googlemail.com> - 2011-11-04 14:58 -0700
csiph-web