BIOS32: Difference between revisions

[unchecked revision][unchecked revision]
Content deleted Content added
Added details about finding available services
m Fix lint errors
 
(4 intermediate revisions by 3 users not shown)
Line 2:
 
== Introduction ==
BIOS32 is a method for calling BIOS services from either 16-Bit Real Mode, 16-Bit Protected Mode or 32-Bit Protected Mode. This method can be used to find BIOS32 services and execute BIOS32 methods, but it does not allow you to call "legacy" BIOS calls, directly, like INT 0x10 and INT 0x13 methods. It is mainly used for PNP and PCI services, but there may be other services available, as well. These services are not well documented, and are not necessarily supported on all systems. The BIOS32 API provides a method to query the system for support for a specific service, but it does not provide any method for getting a complete list of supported services.
 
== Interface ==
Line 11:
=== Structure ===
{| {{wikitable}}
|+<b>'''Service Directory Header</b>'''
|-
|<b>'''Offset''' || '''Size''' || '''Name''' || '''Description</b>'''
|-
|0 || 4 bytes || Signature || ASCII signature "_32_" (0x5F32335F)
Line 29:
 
=== Service Availability ===
In order to verify that a service is available, you must FAR JUMP toCALL the 32-bit address located at offset 4 in the structure above, with the EBX register set to zero, and the EAX register set to the Component ID for the service that you are looking for. If the service is available, the AL register will contain a zero, EBX will contain the base address for the service, ECX will contain the length of the service in bytes, and EDX will contain the offset (from EBX) for the entry point for the service.
 
If the service is not supported, the AL register will contain either 0x80 or 0x81. (The documentation is ambiguous on this specific value, so it may be better to check for a non-zero value)
 
== Well Known Services ==
The services listed below have been found on real hardware, but may not be supported by some (or even most) systems.
 
{| {{wikitable}}
|+'''Service List'''
|-
|'''Component ID'''|| '''Name'''
|-
|"$PnP" || Plug-n-Play BIOS
|-
|"$PCI" || PCI BIOS
|-
|"$PIR" || PCI IRQ Routing Table
|-
|"$PMM" || POST Memory Manager
|-
|"$BC$" || PXE Base Code (BC) Rom ID
|-
|"$ACF" || Plug-n-Play Auto Config
|-
|"$BLK" || Unknown
|-
|"$WDS" || Unknown
|-
|"$SNY" || Unknown
|-
|"$SDS" || Unknown
|-
|"$SDM" || Unknown
|-
|"$IRT" || Unknown
|-
|"$CFD" || Unknown
|-
|"$BBS" || Unknown
|-
|"$ASF" || Unknown
|-
|"$$CT" || Unknown
|-
|"MPTN" || Unknown
|-
|"PCI " || Unknown
|-
|}
 
== See Also ==
Line 39 ⟶ 85:
[http://www-pc.uni-regensburg.de/hardware/TECHDOK/BIOS_32BIT_SERVICE.PDF Phoenix BIOS 32-bit service proposal]
 
[https://groups.google.com/forum/#!msg/alt.os.development/pgREOB7YEws/J3UZ1sbvQnsJ Google Groups post about known services]
[[Category:BIOS]]
[[Category:X86]]