mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 07:48:40 +02:00
2139 lines
54 KiB
XML
2139 lines
54 KiB
XML
<?xml version="1.0" encoding="ISO8859-1"?>
|
|
<fpdoc-descriptions>
|
|
<!--
|
|
|
|
$Id$
|
|
This file is part of the FPC documentation.
|
|
Copyright (C) 1997, by Michael Van Canneyt
|
|
|
|
The FPC documentation is free text; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public License as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version.
|
|
|
|
The FPC Documentation is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
License along with the FPC documentation; see the file COPYING.LIB. If not,
|
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
-->
|
|
<package name="rtl">
|
|
<module name="go32">
|
|
<short>GO32 - acces to the 32-bit DOS extender</short>
|
|
<!-- \FPCexampledir{go32ex} -->
|
|
<descr>
|
|
<p>
|
|
This document describes the GO32 unit for the Free Pascal
|
|
compiler under dos. It was donated by Thomas Schatzl
|
|
(tom_at_work@geocities.com), for which my thanks.
|
|
This unit was first written for dos by Florian Klaempfl.
|
|
</p>
|
|
<p>
|
|
Only the GO32V2 DPMI
|
|
mode is discussed by me here due to the fact that new applications shouldn't
|
|
be created with the older GO32V1 model. The go32v2 version is much more advanced and
|
|
better. Additionally a lot of functions only work in DPMI mode anyway.
|
|
I hope the following explanations and introductions aren't too confusing at
|
|
all. If you notice an error or bug send it to the FPC mailing list or
|
|
directly to me.
|
|
So let's get started and happy and error free coding I wish you....
|
|
Thomas Schatzl, 25. August 1998
|
|
</p>
|
|
</descr>
|
|
|
|
<topic name="DPMI">
|
|
<short>What is DPMI</short>
|
|
<descr>
|
|
The dos Protected Mode Interface helps you with various aspects of protected
|
|
mode programming. These are roughly divided into descriptor handling, access
|
|
to dos memory, management of interrupts and exceptions, calls to real mode
|
|
functions and other stuff. Additionally it automatically provides swapping
|
|
to disk for memory intensive applications.
|
|
A DPMI host (either a Windows dos box or CWSDPMI.EXE) provides these
|
|
functions for your programs.
|
|
</descr>
|
|
</topic>
|
|
|
|
<topic name="SelectorsDescriptors">
|
|
<short>Selectors and descriptors</short>
|
|
<descr>
|
|
Descriptors are a bit like real mode segments; they describe (as the name
|
|
implies) a memory area in protected mode. A descriptor contains information
|
|
about segment length, its base address and the attributes of it (i.e. type,
|
|
access rights, ...).
|
|
These descriptors are stored internally in a so-called descriptor table,
|
|
which is basically an array of such descriptors.
|
|
Selectors are roughly an index into this table.
|
|
Because these 'segments' can be up to 4 GB in size, 32 bits aren't
|
|
sufficient anymore to describe a single memory location like in real mode.
|
|
48 bits are now needed to do this, a 32 bit address and a 16 bit sized
|
|
selector. The GO32 unit provides the tseginfo record to store such a
|
|
pointer.
|
|
But due to the fact that most of the time data is stored and accessed in the
|
|
%ds selector, FPC assumes that all pointers point to a memory location of
|
|
this selector. So a single pointer is still only 32 bits in size. This value
|
|
represents the offset from the data segment base address to this memory
|
|
location.
|
|
</descr>
|
|
</topic>
|
|
|
|
<topic name="FPCspecs">
|
|
<short>FPC specialities</short>
|
|
<descr>
|
|
<p>
|
|
The %ds and %es selector MUST always contain the same value or some system
|
|
routines may crash when called. The %fs selector is preloaded with the
|
|
DOSMEMSELECTOR variable at startup, and it MUST be restored after use,
|
|
because again FPC relys on this for some functions. Luckily we asm
|
|
programmers can still use the %gs selector for our own purposes, but for how
|
|
long ?
|
|
</p>
|
|
</descr>
|
|
<seealso>
|
|
<link id="get_cs"/>
|
|
<link id="get_ds"/>
|
|
<link id="get_ss"/>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="free_ldt_descriptor"/>
|
|
<link id="segment_to_descriptor"/>
|
|
<link id="get_next_selector_increment_value"/>
|
|
<link id="get_segment_base_address"/>
|
|
<link id="set_segment_base_address"/>
|
|
<link id="set_segment_limit"/>
|
|
<link id="create_code_segment_alias_descriptor"/>
|
|
</seealso>
|
|
</topic>
|
|
|
|
<topic name="DosMemory">
|
|
<short>dos memory access</short>
|
|
<descr>
|
|
Dos memory is accessed by the predefined <var>dosmemselector</var> selector;
|
|
the GO32 unit additionally provides some functions to help you with standard tasks,
|
|
like copying memory from heap to dos memory and the likes. Because of this
|
|
it is strongly recommened to use them, but you are still free to use the
|
|
provided standard memory accessing functions which use 48 bit pointers. The
|
|
third, but only thought for compatibility purposes, is using the
|
|
<var>mem[]</var>-arrays. These arrays map the whole 1 Mb dos space. They shouldn't be
|
|
used within new programs.
|
|
To convert a segment:offset real mode address to a protected mode linear
|
|
address you have to multiply the segment by 16 and add its offset. This
|
|
linear address can be used in combination with the DOSMEMSELECTOR variable.
|
|
</descr>
|
|
<seealso>
|
|
<link id="dosmemget"/>
|
|
<link id="dosmemput"/>
|
|
<link id="dosmemmove"/>
|
|
<link id="dosmemfillchar"/>
|
|
<link id="dosmemfillword"/>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillchar"/>
|
|
<link id="seg_fillword"/>
|
|
</seealso>
|
|
</topic>
|
|
|
|
<topic name="IOPorts">
|
|
<short>I/O port access</short>
|
|
<descr>
|
|
The I/O port access is done via the various <link id="inportb"/>,
|
|
<link id="outportb"/>
|
|
functions which are available. Additionally Free Pascal supports the Turbo Pascal
|
|
PORT[]-arrays but it is by no means recommened to use them, because they're
|
|
only for compatibility purposes.
|
|
</descr>
|
|
<seealso>
|
|
<link id="outportb"/>
|
|
<link id="inportb"/>
|
|
</seealso>
|
|
</topic>
|
|
|
|
<topic name="ProcessorAccess">
|
|
<short>Processor access</short>
|
|
<descr>
|
|
These are some functions to access various segment registers (%cs, %ds, %ss)
|
|
which makes your work a bit easier.
|
|
</descr>
|
|
<seealso>
|
|
<link id="get_cs"/>
|
|
<link id="get_ds"/>
|
|
<link id="get_ss"/>
|
|
</seealso>
|
|
</topic>
|
|
|
|
<topic name="InterruptHandling">
|
|
<short>Interrupt redirection</short>
|
|
<descr>
|
|
Interrupts are program interruption requests, which in one or another way
|
|
get to the processor; there's a distinction between software and hardware
|
|
interrupts. The former are explicitely called by an 'int' instruction and
|
|
are a bit comparable to normal functions. Hardware interrupts come from
|
|
external devices like the keyboard or mouse. Functions that handle hardware
|
|
interrupts are called handlers.
|
|
</descr>
|
|
</topic>
|
|
|
|
<topic name="DPMIInterrupts">
|
|
<short>Handling interrupts with DPMI</short>
|
|
<descr>
|
|
The interrupt functions are real-mode procedures; they normally can't be
|
|
called in protected mode without the risk of an protection fault. So the
|
|
DPMI host creates an interrupt descriptor table for the application.
|
|
Initially all software interrupts (except for int 31h, 2Fh and 21h function
|
|
4Ch) or external hardware interrupts are simply directed to a handler that
|
|
reflects the interrupt in real-mode, i.e. the DPMI host's default handlers
|
|
switch the CPU to real-mode, issue the interrupt and switch back to
|
|
protected mode. The contents of general registers and flags are passed to
|
|
the real mode handler and the modified registers and flags are returned to
|
|
the protected mode handler. Segment registers and stack pointer are not
|
|
passed between modes.
|
|
</descr>
|
|
</topic>
|
|
|
|
<topic name="DPMIvsProtectedInterrupts">
|
|
<short>Protected mode interrupts vs. Real mode interrupts</short>
|
|
<descr>
|
|
As mentioned before, there's a distinction between real mode interrupts and
|
|
protected mode interrupts; the latter are protected mode programs, while the
|
|
former must be real mode programs. To call a protected mode interrupt
|
|
handler, an assembly 'int' call must be issued, while the other is called
|
|
via the realintr() or intr() function. Consequently, a real mode interrupt
|
|
then must either reside in dos memory (<1MB) or the application must
|
|
allocate a real mode callback address via the get_rm_callback() function.
|
|
</descr>
|
|
</topic>
|
|
|
|
<topic name="CreatingInterruptHandlers">
|
|
<short>Creating your own interrupt handlers</short>
|
|
<descr>
|
|
Interrupt redirection with FPC pascal is done via the set_pm_interrupt() for
|
|
protected mode interrupts or via the set_rm_interrupt() for real mode
|
|
interrupts.
|
|
</descr>
|
|
</topic>
|
|
|
|
<topic name="DisablingInterrupts">
|
|
<short>Disabling interrupts</short>
|
|
<descr>
|
|
The GO32 unit provides the two procedures disable() and enable() to disable
|
|
and enable all interrupts.
|
|
</descr>
|
|
</topic>
|
|
|
|
<topic name="HardwareInterrupts">
|
|
<short>Hardware interrupts</short>
|
|
<descr>
|
|
Hardware interrupts are generated by hardware devices when something unusual
|
|
happens; this could be a keypress or a mouse move or any other action. This
|
|
is done to minimize CPU time, else the CPU would have to check all installed
|
|
hardware for data in a big loop (this method is called 'polling') and this
|
|
would take much time.
|
|
A standard IBM-PC has two interrupt controllers, that are responsible for
|
|
these hardware interrupts: both allow up to 8 different interrupt sources
|
|
(IRQs, interrupt requests). The second controller is connected to the first
|
|
through IRQ 2 for compatibility reasons, e.g. if controller 1 gets an IRQ 2,
|
|
he hands the IRQ over to controller 2. Because of this up to 15 different
|
|
hardware interrupt sources can be handled.
|
|
IRQ 0 through IRQ 7 are mapped to interrupts 8h to Fh and the second
|
|
controller (IRQ 8 to 15) is mapped to interrupt 70h to 77h.
|
|
All of the code and data touched by these handlers MUST be locked (via the
|
|
various locking functions) to avoid page faults at interrupt time. Because
|
|
hardware interrupts are called (as in real mode) with interrupts disabled,
|
|
the handler has to enable them before it returns to normal program
|
|
execution. Additionally a hardware interrupt must send an EOI (end of
|
|
interrupt) command to the responsible controller; this is acomplished by
|
|
sending the value 20h to port 20h (for the first controller) or A0h (for the
|
|
second controller).
|
|
The following example shows how to redirect the keyboard interrupt.
|
|
</descr>
|
|
<example file="go32ex/keyclick"/>
|
|
</topic>
|
|
|
|
<topic name="SoftwareInterrupts">
|
|
<short>Software interrupts</short>
|
|
<descr>
|
|
<p>
|
|
Ordinarily, a handler installed with
|
|
<link id="set_pm_interrupt"/> only services software
|
|
interrupts that are executed in protected mode; real mode software
|
|
interrupts can be redirected by <link id="set_rm_interrupt"/>.
|
|
</p>
|
|
</descr>
|
|
<seealso>
|
|
<link id="set_rm_interrupt"/>
|
|
<link id="get_rm_interrupt"/>
|
|
<link id="set_pm_interrupt"/>
|
|
<link id="get_pm_interrupt"/>
|
|
<link id="lock_data"/>
|
|
<link id="lock_code"/>
|
|
<link id="enable"/>
|
|
<link id="disable"/>
|
|
<link id="outportb"/>
|
|
</seealso>
|
|
</topic>
|
|
|
|
<topic name="ExecutingInterrupts">
|
|
<short>Executing software interrupts</short>
|
|
<descr>
|
|
Simply execute a realintr() call with the desired interrupt number and the
|
|
supplied register data structure.
|
|
But some of these interrupts require you to supply them a pointer to a
|
|
buffer where they can store data to or obtain data from in memory. These
|
|
interrupts are real mode functions and so they only can access the first Mb
|
|
of linear address space, not FPC's data segment.
|
|
For this reason FPC supplies a pre-initialized dos memory location within
|
|
the GO32 unit. This buffer is internally used for dos functions too and so
|
|
it's contents may change when calling other procedures. It's size can be
|
|
obtained with <link id="tb_size"/> and it's linear address via
|
|
<link id="transfer_buffer"/>.
|
|
Another way is to allocate a completely new dos memory area via the
|
|
<link id="global_dos_alloc"/> function for your use and
|
|
supply its real mode address.
|
|
</descr>
|
|
<seealso>
|
|
<link id="tb_size"/>
|
|
<link id="transfer_buffer"/>
|
|
<link id="global_dos_alloc"/>
|
|
<link id="global_dos_free"/>
|
|
<link id="realintr"/>
|
|
</seealso>
|
|
<example file="go32ex/softint"/>
|
|
<example file="go32ex/rmpmint"/>
|
|
</topic>
|
|
|
|
<topic name="RealModeCallBacks">
|
|
<short>Real mode callbacks</short>
|
|
<descr>
|
|
<p>
|
|
The callback mechanism can be thought of as the converse of calling a real
|
|
mode procedure (i.e. interrupt), which allows your program to pass
|
|
information to a real mode program, or obtain services from it in a manner
|
|
that's transparent to the real mode program.
|
|
In order to make a real mode callback available, you must first get the real
|
|
mode callback address of your procedure and the selector and offset of a
|
|
register data structure. This real mode callback address (this is a
|
|
segment:offset address) can be passed to a real mode program via a software
|
|
interrupt, a dos memory block or any other convenient mechanism.
|
|
When the real mode program calls the callback (via a far call), the DPMI
|
|
host saves the registers contents in the supplied register data structure,
|
|
switches into protected mode, and enters the callback routine with the
|
|
following settings:
|
|
</p>
|
|
<ul>
|
|
<li> interrupts disabled</li>
|
|
<li> <var>%CS:%EIP</var> = 48 bit pointer specified in the original call to
|
|
<link id="get_rm_callback"/></li>
|
|
<li> <var>%DS:%ESI</var> = 48 bit pointer to to real mode <var>SS:SP</var></li>
|
|
<li> <var>%ES:%EDI</var> = 48 bit pointer of real mode register data
|
|
structure. </li>
|
|
<li> <var>%SS:%ESP</var> = locked protected mode stack</li>
|
|
<li> All other registers undefined</li>
|
|
</ul>
|
|
<p>
|
|
The callback procedure can then extract its parameters from the real mode
|
|
register data structure and/or copy parameters from the real mode stack to
|
|
the protected mode stack. Recall that the segment register fields of the
|
|
real mode register data structure contain segment or paragraph addresses
|
|
that are not valid in protected mode. Far pointers passed in the real mode
|
|
register data structure must be translated to virtual addresses before they
|
|
can be used with a protected mode program.
|
|
The callback procedure exits by executing an IRET with the address of the
|
|
real mode register data structure in <var>%ES:%EDI</var>, passing information back to
|
|
the real mode caller by modifying the contents of the real mode register
|
|
data structure and/or manipulating the contents of the real mode stack. The
|
|
callback procedure is responsible for setting the proper address for
|
|
resumption of real mode execution into the real mode register data
|
|
structure; typically, this is accomplished by extracting the return address
|
|
from the real mode stack and placing it into the <var>%CS:%EIP</var> fields of the real
|
|
mode register data structure. After the IRET, the DPMI host switches the CPU
|
|
back into real mode, loads ALL registers with the contents of the real mode
|
|
register data structure, and finally returns control to the real mode
|
|
program.
|
|
All variables and code touched by the callback procedure MUST be locked to
|
|
prevent page faults.
|
|
</p>
|
|
</descr>
|
|
<seealso>
|
|
<link id="get_rm_callback"/>
|
|
<link id="free_rm_callback"/>
|
|
<link id="lock_code"/>
|
|
<link id="lock_data"/>
|
|
</seealso>
|
|
</topic>
|
|
|
|
<element name="rm_unknown">
|
|
<short><link id="get_run_mode"/> return value: Unknown runmode</short>
|
|
</element>
|
|
<element name="rm_raw">
|
|
<short><link id="get_run_mode"/> return value: raw (without HIMEM)</short>
|
|
</element>
|
|
<element name="rm_xms">
|
|
<short><link id="get_run_mode"/> return value: XMS (with HIMEM, without EMM386)</short>
|
|
</element>
|
|
<element name="rm_vcpi">
|
|
<short><link id="get_run_mode"/> return value: VCPI (with HIMEM and EMM386)</short>
|
|
</element>
|
|
<element name="rm_dpmi">
|
|
<short><link id="get_run_mode"/> return value: DPMI (e.g. dos box or 386Max)</short>
|
|
</element>
|
|
|
|
<element name="carryflag">
|
|
<short>Check for carry flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="parityflag">
|
|
<short>Check for parity flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="auxcarryflag">
|
|
<short>Check for auxiliary carry flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="zeroflag">
|
|
<short>Check for zero flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="signflag">
|
|
<short>Check for sign flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="trapflag">
|
|
<short>Check for trap flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="interruptflag">
|
|
<short>Check for interrupt flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="directionflag">
|
|
<short>Check for direction flag in <link id="trealregs"/></short>
|
|
</element>
|
|
<element name="overflowflag">
|
|
<short>Check for overflow flag in <link id="trealregs"/></short>
|
|
</element>
|
|
|
|
<element name="tmeminfo">
|
|
<short>Memory information record</short>
|
|
<descr>
|
|
<p>
|
|
<var>tmeminfo</var> Holds information about the memory allocation, etc.
|
|
</p>
|
|
<p>
|
|
<em>NOTE:</em> The value of a field is -1 (0ffffffffh) if the value is unknown, it's
|
|
only guaranteed, that <var>available_memory</var> contains a valid value.
|
|
The size of the pages can be determined by the get_page_size() function.
|
|
</p>
|
|
</descr>
|
|
</element>
|
|
<element name="TMemInfo.available_memory">
|
|
<short>Largest available free block in bytes. </short>
|
|
</element>
|
|
<element name="TMemInfo.available_pages">
|
|
<short>Maximum unlocked page allocation in pages </short>
|
|
</element>
|
|
<element name="TMemInfo.available_lockable_pages">
|
|
<short>Maximum locked page allocation in pages. </short>
|
|
</element>
|
|
<element name="TMemInfo.linear_space">
|
|
<short>Linear address space size in pages. </short>
|
|
</element>
|
|
<element name="TMemInfo.unlocked_pages">
|
|
<short>Total number of unlocked pages. </short>
|
|
</element>
|
|
<element name="TMemInfo.available_physical_pages">
|
|
<short>Total number of free pages.</short>
|
|
</element>
|
|
<element name="TMemInfo.total_physical_pages">
|
|
<short>Total number of physical pages. </short>
|
|
</element>
|
|
<element name="TMemInfo.free_linear_space">
|
|
<short>Free linear address space in pages.</short>
|
|
</element>
|
|
<element name="TMemInfo.max_pages_in_paging_file">
|
|
<short> Size of paging file/partition in pages</short>
|
|
</element>
|
|
|
|
<element name="trealregs">
|
|
<short>Record describing all processor registers</short>
|
|
<descr>
|
|
The <var>trealregs</var> type contains the data structure to pass register values to a
|
|
interrupt handler or real mode callback.
|
|
</descr>
|
|
</element>
|
|
|
|
<element name="registers">
|
|
<short>Alias for <link id="trealregs"/></short>
|
|
</element>
|
|
|
|
<element name="tseginfo">
|
|
<short>Record to store 48-bits pointer</short>
|
|
<descr>
|
|
<p>
|
|
This record is used to store a full 48-bit pointer. This may be either a
|
|
protected mode selector:offset address or in real mode a segment:offset
|
|
address, depending on application.
|
|
</p>
|
|
<p>
|
|
See also: Selectors and descriptors, dos memory access, Interrupt
|
|
redirection
|
|
</p>
|
|
</descr>
|
|
</element>
|
|
|
|
<element name="tseginfo.offset">
|
|
<short>Offset in segment</short>
|
|
</element>
|
|
<element name="tseginfo.Segment">
|
|
<short>Segment</short>
|
|
</element>
|
|
|
|
<element name="dosmemselector">
|
|
<short>Selector to DOS memory</short>
|
|
<descr>
|
|
Selector to the dos memory. The whole dos memory is automatically mapped to
|
|
this single descriptor at startup. This selector is the recommened way to
|
|
access dos memory.
|
|
</descr>
|
|
</element>
|
|
|
|
<element name="int31error">
|
|
<short>DPMI interrupt call result</short>
|
|
<descr>
|
|
This variable holds the result of a DPMI interrupt call. Any nonzero value
|
|
must be treated as a critical failure.
|
|
</descr>
|
|
</element>
|
|
|
|
<element name="allocate_ldt_descriptors">
|
|
<short>Allocate a number of descriptors</short>
|
|
<descr>
|
|
<p>
|
|
Allocates a number of new descriptors.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>count:\ </dt><dd> specifies the number of requested unique descriptors.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: The base selector.
|
|
</p>
|
|
<remark>
|
|
Notes: The descriptors allocated must be initialized by the application with
|
|
other function calls. This function returns descriptors with a limit and
|
|
size value set to zero. If more than one descriptor was requested, the
|
|
function returns a base selector referencing the first of a contiguous array
|
|
of descriptors. The selector values for subsequent descriptors in the array
|
|
can be calculated by adding the value returned by the
|
|
<link id="get_next_selector_increment_value"/>
|
|
function.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="free_ldt_descriptor"/>
|
|
<link id="get_next_selector_increment_value"/>
|
|
<link id="segment_to_descriptor"/>
|
|
<link id="create_code_segment_alias_descriptor"/>
|
|
<link id="set_segment_limit"/>
|
|
<link id="set_segment_base_address"/>
|
|
</seealso>
|
|
<example file="go32ex/seldes"/>
|
|
</element>
|
|
|
|
<element name="allocate_memory_block">
|
|
<short>Allocate a block of linear memory</short>
|
|
<descr>
|
|
<p>
|
|
Allocates a block of linear memory.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>size:</dt><dd> Size of requested linear memory block in bytes.</dd>
|
|
</dl>
|
|
<p>
|
|
Returned values: blockhandle - the memory handle to this memory block. Linear
|
|
address of the requested memory.
|
|
</p>
|
|
<remark>
|
|
<em>warning</em> According to my DPMI docs this function is not implemented
|
|
correctly. Normally you should also get a blockhandle to this block after
|
|
successful operation. This handle can then be used to free the memory block
|
|
afterwards or use this handle for other purposes. Since the function isn't
|
|
implemented correctly, and doesn't return a blockhandle, the block can't be
|
|
deallocated and is hence unusuable !
|
|
This function doesn't allocate any descriptors for this block, it's the
|
|
applications resposibility to allocate and initialize for accessing this
|
|
memory.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="free_memory_block"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="copyfromdos">
|
|
<short>Copy data from DOS to to heap</short>
|
|
<descr>
|
|
<p>
|
|
Copies data from the pre-allocated dos memory transfer buffer to the heap.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>addr</dt><dd>data to copy to.</dd>
|
|
<dt>len</dt><dd>number of bytes to copy to heap.</dd>
|
|
</dl>
|
|
<p>
|
|
Notes:
|
|
Can only be used in conjunction with the dos memory transfer buffer.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="tb_size"/>
|
|
<link id="transfer_buffer"/>
|
|
<link id="copytodos"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
|
|
<element name="copytodos">
|
|
<short>Copy data from heap to DOS memory</short>
|
|
<descr>
|
|
<p>
|
|
Copies data from heap to the pre-allocated dos memory buffer.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>addr</dt><dd> data to copy from.</dd>
|
|
<dt>len</dt><dd> number of bytes to copy to dos memory buffer.</dd>
|
|
</dl>
|
|
<p>
|
|
Notes: This function fails if you try to copy more bytes than the transfer
|
|
buffer is in size. It can only be used in conjunction with the transfer
|
|
buffer.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="tb_size"/>
|
|
<link id="transfer_buffer"/>
|
|
<link id="copyfromdos"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="create_code_segment_alias_descriptor">
|
|
<short>Create new descriptor from existing descriptor</short>
|
|
<descr>
|
|
<p>
|
|
Creates a new descriptor that has the same base and limit as the specified
|
|
descriptor.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd> Descriptor.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: The data selector (alias).
|
|
</p>
|
|
<p>
|
|
Notes: In effect, the function returns a copy of the descriptor. The
|
|
descriptor alias returned by this function will not track changes to the
|
|
original descriptor. In other words, if an alias is created with this
|
|
function, and the base or limit of the original segment is then changed, the
|
|
two descriptors will no longer map the same memory.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="set_segment_limit"/>
|
|
<link id="set_segment_base_address"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="disable">
|
|
<short>Disable hardware interrupts</short>
|
|
<descr>
|
|
<p>
|
|
Disables all hardware interrupts by execution a CLI instruction.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="enable"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="dosmemfillchar">
|
|
<short>Fill a region of DOS memory with a specific byte-sized value</short>
|
|
<descr>
|
|
<p>
|
|
Sets a region of dos memory to a specific byte value.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd> real mode segment.</dd>
|
|
<dt>ofs</dt><dd> real mode offset.</dd>
|
|
<dt>count</dt><dd> number of bytes to set.</dd>
|
|
<dt>c</dt><dd> value to set memory to.</dd>
|
|
</dl>
|
|
<p>
|
|
Notes: No range check is performed.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="dosmemput"/>
|
|
<link id="dosmemget"/>
|
|
<link id="dosmemmove"/>
|
|
<link id="dosmemfillword"/>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillchar"/>
|
|
<link id="seg_fillword"/>
|
|
</seealso>
|
|
<example file="go32ex/textmess"/>
|
|
</element>
|
|
|
|
<element name="dosmemfillword">
|
|
<short>Fill a region of DOS memory with a specific word-sized value</short>
|
|
<descr>
|
|
<p>
|
|
Sets a region of dos memory to a specific word value.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd> real mode segment.</dd>
|
|
<dt>ofs</dt><dd> real mode offset. </dd>
|
|
<dt>count</dt><dd> number of words to set.</dd>
|
|
<dt>w</dt><dd> value to set memory to.</dd>
|
|
</dl>
|
|
<p>
|
|
Notes: No range check is performed.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="dosmemput"/>
|
|
<link id="dosmemget"/>
|
|
<link id="dosmemmove"/>
|
|
<link id="dosmemfillchar"/>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillchar"/>
|
|
<link id="seg_fillword"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="dosmemget">
|
|
<short>Copy data from DOS memory to the heap.</short>
|
|
<descr>
|
|
<p>
|
|
Copies data from the dos memory onto the heap.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd> source real mode segment.</dd>
|
|
<dt>ofs</dt><dd> source real mode offset.</dd>
|
|
<dt>data</dt><dd> destination. </dd>
|
|
<dt>count</dt><dd> number of bytes to copy.</dd>
|
|
</dl>
|
|
<p>
|
|
Notes: No range checking is performed.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="global_dos_alloc"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="dosmemput"/>
|
|
<link id="dosmemmove"/>
|
|
<link id="dosmemfillchar"/>
|
|
<link id="dosmemfillword"/>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillchar"/>
|
|
<link id="seg_fillword"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="dosmemmove">
|
|
<short>Move data between 2 DOS real mode memory locations</short>
|
|
<descr>
|
|
<p>
|
|
Copies count bytes of data between two dos real mode memory locations.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>sseg</dt><dd> source real mode segment.</dd>
|
|
<dt>sofs</dt><dd> source real mode offset.</dd>
|
|
<dt>dseg</dt><dd> destination real mode segment. </dd>
|
|
<dt>dofs</dt><dd> destination real mode offset.</dd>
|
|
<dt>count</dt><dd> number of bytes to copy.</dd>
|
|
</dl>
|
|
<p>
|
|
Notes: No range check is performed in any way.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="dosmemput"/>,
|
|
<link id="dosmemget"/>
|
|
<link id="dosmemfillchar"/>,
|
|
<link id="dosmemfillword"/>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillchar"/>
|
|
<link id="seg_fillword"/>
|
|
</seealso>
|
|
</element>
|
|
For an example, see <link id="seg_fillchar"/>.
|
|
|
|
<element name="dosmemput">
|
|
<short>Copy data from the heap to DOS real mode memory</short>
|
|
<descr>
|
|
<p>
|
|
Copies heap data to dos real mode memory.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd>destination real mode segment.</dd>
|
|
<dt>ofs</dt><dd>destination real mode offset. </dd>
|
|
<dt>data</dt><dd>source.</dd>
|
|
<dt>count</dt><dd> number of bytes to copy.</dd>
|
|
</dl>
|
|
<p>
|
|
Notes: No range checking is performed.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="global_dos_alloc"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="dosmemget"/>,
|
|
<link id="dosmemmove"/>
|
|
<link id="dosmemfillchar"/>
|
|
<link id="dosmemfillword"/>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillchar"/>
|
|
<link id="seg_fillword"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="enable">
|
|
<short>Enable hardware interrupts</short>
|
|
<descr>
|
|
Enables all hardware interrupts by executing a STI instruction.
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="disable"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="free_ldt_descriptor">
|
|
<short>Free a descriptor</short>
|
|
<descr>
|
|
<p>
|
|
Frees a previously allocated descriptor.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>des</dt><dd> The descriptor to be freed.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: <var>True</var> if successful, <var>False</var> otherwise.
|
|
Notes: After this call this selector is invalid and must not be used for any
|
|
memory operations anymore. Each descriptor allocated with
|
|
<link id="allocate_ldt_descriptors"/> must be freed
|
|
individually with this function,
|
|
even if it was previously allocated as a part of a contiguous array of
|
|
descriptors.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="allocate_ldt_descriptors"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="get_next_selector_increment_value"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="free_memory_block">
|
|
<short>Free allocated memory block</short>
|
|
<descr>
|
|
<p>
|
|
Frees a previously allocated memory block.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>blockhandle</dt><dd> the handle to the memory area to free.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: <var>True</var> if successful, <var>false</var> otherwise.
|
|
Notes: Frees memory that was previously allocated with
|
|
<link id="allocate_memory_block"/> .
|
|
This function doesn't free any descriptors mapped to this block,
|
|
it's the application's responsibility.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_memory_block"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="free_rm_callback">
|
|
<short>Release real mode callback.</short>
|
|
<descr>
|
|
<p>
|
|
Releases a real mode callback address that was previously allocated with the
|
|
<link id="get_rm_callback"/> function.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>intaddr</dt><dd> real mode address buffer returned by <link id="get_rm_callback"/> .
|
|
</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> if not
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="get_rm_callback"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="set_rm_interrupt"/>
|
|
<link id="get_rm_callback"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_cs">
|
|
<short>Get CS selector</short>
|
|
<descr>
|
|
<p>
|
|
Returns the cs selector.
|
|
</p>
|
|
<p>
|
|
Return value: The content of the cs segment register.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="set_pm_interrupt"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_ds"/>
|
|
<link id="get_ss"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_descriptor_access_right">
|
|
<short>Get descriptor's access rights</short>
|
|
<descr>
|
|
<p>
|
|
Gets the access rights of a descriptor.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>d</dt><dd> selector to descriptor.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: Access rights bit field.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="set_descriptor_access_right"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_ds">
|
|
<short>Get DS Selector</short>
|
|
<descr>
|
|
<p>
|
|
Returns the ds selector.
|
|
</p>
|
|
<p>
|
|
Return values: The content of the ds segment register.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_cs"/>
|
|
<link id="get_ss"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_linear_addr">
|
|
<short>Convert physical to linear address</short>
|
|
<descr>
|
|
<p>
|
|
Converts a physical address into a linear address.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>phys_addr</dt><dd>physical address of device.</dd>
|
|
<dt>size</dt><dd>Size of region to map in bytes.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: Linear address that can be used to access the physical memory.
|
|
Notes: It's the applications resposibility to allocate and set up a
|
|
descriptor for access to the memory. This function shouldn't be used to map
|
|
real mode addresses.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="set_segment_limit"/>
|
|
<link id="set_segment_base_address"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_meminfo">
|
|
<short>Return information on the available memory</short>
|
|
<descr>
|
|
<p>
|
|
Returns information about the amount of available physical memory, linear
|
|
address space, and disk space for page swapping.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>meminfo</dt><dd> buffer to fill memory information into.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: Due to an implementation bug this function always returns
|
|
<var>False</var>, but it always succeeds.
|
|
</p>
|
|
<remark>
|
|
Notes: Only the first field of the returned structure is guaranteed to
|
|
contain a valid value. Any fields that are not supported by the DPMI host
|
|
will be set by the host to <var>-1 (0FFFFFFFFH)</var> to indicate that the information
|
|
is not available. The size of the pages used by the DPMI host can be
|
|
obtained with the <link id="get_page_size"/> function.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_page_size"/>
|
|
</seealso>
|
|
<example file="go32ex/meminfo"/>
|
|
</element>
|
|
|
|
<element name="get_next_selector_increment_value">
|
|
<short>Return selector increment value</short>
|
|
<descr>
|
|
<p>
|
|
Returns the selector increment value when allocating multiple subsequent
|
|
descriptors via <link id="allocate_ldt_descriptors"/>.
|
|
</p>
|
|
<p>
|
|
Return value: Selector increment value.
|
|
</p>
|
|
<remark>
|
|
Notes: Because <link id="allocate_ldt_descriptors"/> only returns the selector for the
|
|
first descriptor and so the value returned by this function can be used to
|
|
calculate the selectors for subsequent descriptors in the array.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="free_ldt_descriptor"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_page_size">
|
|
<short>Return the page size</short>
|
|
<descr>
|
|
<p>
|
|
Returns the size of a single memory page.
|
|
</p>
|
|
<p>
|
|
Return value: Size of a single page in bytes.
|
|
</p>
|
|
<remark>
|
|
The returned size is typically 4096 bytes.
|
|
</remark>
|
|
<p>
|
|
For an example, see <link id="get_meminfo"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_meminfo"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_pm_interrupt">
|
|
<short>Return protected mode interrupt handler</short>
|
|
<descr>
|
|
<p>
|
|
Returns the address of a current protected mode interrupt handler.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>vector</dt><dd> interrupt handler number you want the address to.</dd>
|
|
<dt>intaddr</dt><dd> buffer to store address.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> if not.
|
|
</p>
|
|
<remark>
|
|
The returned address is a protected mode selector:offset address.
|
|
</remark>
|
|
<p>
|
|
For an example, see <link id="set_pm_interrupt"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="set_pm_interrupt"/>
|
|
<link id="set_rm_interrupt"/>
|
|
<link id="get_rm_interrupt"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_rm_callback">
|
|
<short>Return real mode callback</short>
|
|
<descr>
|
|
<p>
|
|
Returns a unique real mode <var>segment:offset</var> address, known as a "real mode
|
|
callback," that will transfer control from real mode to a protected mode
|
|
procedure.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>pm_func</dt><dd> pointer to the protected mode callback function.</dd>
|
|
<dt>reg</dt><dd> supplied registers structure.</dd>
|
|
<dt>rmcb</dt><dd> buffer to real mode address of callback function.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, otherwise <var>False</var>.
|
|
</p>
|
|
<remark>
|
|
Callback addresses obtained with this function can be passed by a
|
|
protected mode program for example to an interrupt handler, device driver,
|
|
or TSR, so that the real mode program can call procedures within the
|
|
protected mode program or notify the protected mode program of an event. The
|
|
contents of the supplied regs structure is not valid after function call,
|
|
but only at the time of the actual callback.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="free_rm_callback"/>
|
|
</seealso>
|
|
<example file="go32ex/callback"/>
|
|
</element>
|
|
|
|
<element name="get_rm_interrupt">
|
|
<short>Get real mode interrupt vector</short>
|
|
<descr>
|
|
<p>
|
|
Returns the contents of the current machine's real mode interrupt vector for
|
|
the specified interrupt.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>vector</dt><dd> interrupt vector number. </dd>
|
|
<dt>intaddr</dt><dd> buffer to store real mode <var>segment:offset</var> address.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
<remark>
|
|
The returned address is a real mode segment address, which isn't
|
|
valid in protected mode.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="set_rm_interrupt"/>
|
|
<link id="set_pm_interrupt"/>
|
|
<link id="get_pm_interrupt"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_run_mode">
|
|
<short>Return current run mode</short>
|
|
<descr>
|
|
<p>
|
|
Returns the current mode your application runs with.
|
|
</p>
|
|
<p>
|
|
Return values: One of the constants used by this function.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
constants returned by <link id="get_run_mode"/>
|
|
</seealso>
|
|
<example file="go32ex/getrunmd"/>
|
|
</element>
|
|
|
|
<element name="get_segment_base_address">
|
|
<short>Return base address from descriptor table</short>
|
|
<descr>
|
|
<p>
|
|
Returns the 32-bit linear base address from the descriptor table for the
|
|
specified segment.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>d</dt><dd> selector of the descriptor you want the base address of.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: Linear base address of specified descriptor.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="allocate_ldt_descriptors"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="set_segment_base_address"/>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="set_segment_limit"/>
|
|
<link id="get_segment_limit"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_segment_limit">
|
|
<short>Return segment limite from descriptor</short>
|
|
<descr>
|
|
<p>
|
|
Returns a descriptors segment limit.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>d</dt><dd> selector.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: Limit of the descriptor in bytes.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Returns zero if descriptor is invalid.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="set_segment_limit"/>
|
|
<link id="set_segment_base_address"/>
|
|
<link id="get_segment_base_address"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="get_ss">
|
|
<short>Return SS selector</short>
|
|
<descr>
|
|
<p>
|
|
Returns the ss selector.
|
|
</p>
|
|
<p>
|
|
Return values: The content of the ss segment register.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_ds"/>
|
|
<link id="get_cs"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="global_dos_alloc">
|
|
<short>Allocate DOS real mode memory</short>
|
|
<descr>
|
|
<p>
|
|
Allocates a block of dos real mode memory.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>bytes</dt><dd>size of requested real mode memory.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: The low word of the returned value contains the selector to
|
|
the allocated dos memory block, the high word the corresponding real mode
|
|
segment value. The offset value is always zero.
|
|
This function allocates memory from dos memory pool, i.e. memory below the 1
|
|
MB boundary that is controlled by dos. Such memory blocks are typically used
|
|
to exchange data with real mode programs, TSRs, or device drivers. The
|
|
function returns both the real mode segment base address of the block and
|
|
one descriptor that can be used by protected mode applications to access the
|
|
block. This function should only used for temporary buffers to get real mode
|
|
information (e.g. interrupts that need a data structure in ES:(E)DI),
|
|
because every single block needs an unique selector. The returned selector
|
|
should only be freed by a <link id="global_dos_free"/> call.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="global_dos_free"/>
|
|
</seealso>
|
|
<example file="go32ex/buffer"/>
|
|
</element>
|
|
|
|
<element name="global_dos_free">
|
|
<short>Free DOS memory block</short>
|
|
<descr>
|
|
<p>
|
|
Frees a previously allocated dos memory block.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>selector</dt><dd> selector to the dos memory block.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
<remark>
|
|
The descriptor allocated for the memory block is automatically freed
|
|
and hence invalid for further use. This function should only be used for
|
|
memory allocated by <link id="global_dos_alloc"/>.
|
|
</remark>
|
|
<p>
|
|
For an example, see <link id="global_dos_alloc"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="global_dos_alloc"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="inportb">
|
|
<short>Read byte from I/O port</short>
|
|
<descr>
|
|
<p>
|
|
Reads 1 byte from the selected I/O port.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>port</dt><dd> the I/O port number which is read.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: Current I/O port value.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="outportb"/>
|
|
<link id="inportw"/>
|
|
<link id="inportl"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="inportl">
|
|
<short>Read longint from I/O port</short>
|
|
<descr>
|
|
<p>
|
|
Reads 1 longint from the selected I/O port.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>port</dt><dd> the I/O port number which is read.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: Current I/O port value.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="outportb"/>
|
|
<link id="inportb"/>
|
|
<link id="inportw"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="inportw">
|
|
<short>Read word from I/O port</short>
|
|
<descr>
|
|
<p>
|
|
Reads 1 word from the selected I/O port.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>port</dt><dd> the I/O port number which is read.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: Current I/O port value.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="outportw"/>
|
|
<link id="inportb"/>
|
|
<link id="inportl"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="lock_code">
|
|
<short>Lock code memory range</short>
|
|
<descr>
|
|
<p>
|
|
Locks a memory range which is in the code segment selector.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>functionaddr</dt><dd> address of the function to be locked.</dd>
|
|
<dt>size</dt><dd> size in bytes to be locked.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="get_rm_callback"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="lock_linear_region"/>
|
|
<link id="lock_data"/>
|
|
<link id="unlock_linear_region"/>
|
|
<link id="unlock_data"/>
|
|
<link id="unlock_code"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="lock_data">
|
|
<short>Lock data memory range</short>
|
|
<descr>
|
|
<p>
|
|
Locks a memory range which resides in the data segment selector.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>data</dt><dd> address of data to be locked.</dd>
|
|
<dt>size</dt><dd> length of data to be locked.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="get_rm_callback"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="lock_linear_region"/>
|
|
<link id="lock_code"/>
|
|
<link id="unlock_linear_region"/>
|
|
<link id="unlock_data"/>
|
|
<link id="unlock_code"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="lock_linear_region">
|
|
<short>Lock linear memory region</short>
|
|
<descr>
|
|
<p>
|
|
Locks a memory region to prevent swapping of it.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>linearaddr</dt><dd> the linear address of the memory are to be locked.</dd>
|
|
<dt>size</dt><dd> size in bytes to be locked.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: <var>True</var> if successful, False otherwise.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="lock_data"/>
|
|
<link id="lock_code"/>
|
|
<link id="unlock_linear_region"/>
|
|
<link id="unlock_data"/>
|
|
<link id="unlock_code"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="outportb">
|
|
<short>Write byte to I/O port</short>
|
|
<descr>
|
|
<p>
|
|
Sends 1 byte of data to the specified I/O port.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>port</dt><dd> the I/O port number to send data to.</dd>
|
|
<dt>data</dt><dd> value sent to I/O port.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: None.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="inportb"/>
|
|
<link id="outportl"/>
|
|
<link id="outportw"/>
|
|
</seealso>
|
|
<example file="go32ex/outport"/>
|
|
</element>
|
|
|
|
<element name="outportl">
|
|
<short>Write longint to I/O port</short>
|
|
<descr>
|
|
<p>
|
|
Sends 1 longint of data to the specified I/O port.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>port</dt><dd> the I/O port number to send data to.</dd>
|
|
<dt>data</dt><dd> value sent to I/O port.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: None.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="outportb"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="inportl"/>
|
|
<link id="outportw"/>
|
|
<link id="outportb"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="outportw">
|
|
<short>Write word to I/O port</short>
|
|
<descr>
|
|
<p>
|
|
Sends 1 word of data to the specified I/O port.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>port</dt><dd> the I/O port number to send data to.</dd>
|
|
<dt>data</dt><dd> value sent to I/O port.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: None.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="outportb"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="inportw"/>
|
|
<link id="outportl"/>
|
|
<link id="outportb"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="realintr">
|
|
<short>Simulate interrupt</short>
|
|
<descr>
|
|
<p>
|
|
Simulates an interrupt in real mode.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>intnr</dt><dd> interrupt number to issue in real mode.</dd>
|
|
<dt>regs</dt><dd> registers data structure.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: The supplied registers data structure contains the values
|
|
that were returned by the real mode interrupt. <var>True</var> if successful, <var>False</var> if
|
|
not.
|
|
</p>
|
|
<remark>
|
|
The function transfers control to the address specified by the real
|
|
mode interrupt vector of intnr. The real mode handler must return by
|
|
executing an IRET.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
</seealso>
|
|
<example file="go32ex/flags"/>
|
|
</element>
|
|
|
|
<element name="seg_fillchar">
|
|
<short>Fill segment with byte value</short>
|
|
<descr>
|
|
<p>
|
|
Sets a memory area to a specific value.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd> selector to memory area.</dd>
|
|
<dt>ofs</dt><dd> offset to memory.</dd>
|
|
<dt>count</dt><dd> number of bytes to set.</dd>
|
|
<dt>c</dt><dd> byte data which is set.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: None.
|
|
</p>
|
|
<p>
|
|
Notes: No range check is done in any way.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillword"/>
|
|
<link id="dosmemfillchar"/>
|
|
<link id="dosmemfillword"/>
|
|
<link id="dosmemget"/>
|
|
<link id="dosmemput"/>
|
|
<link id="dosmemmove"/>
|
|
</seealso>
|
|
<example file="go32ex/vgasel"/>
|
|
</element>
|
|
|
|
<element name="seg_fillword">
|
|
<short>Fill segment with word value</short>
|
|
<descr>
|
|
<p>
|
|
Sets a memory area to a specific value.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd> selector to memory area.</dd>
|
|
<dt>ofs</dt><dd> offset to memory.</dd>
|
|
<dt>count</dt><dd> number of words to set.</dd>
|
|
<dt>w</dt><dd> word data which is set.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: None.
|
|
</p>
|
|
<p>
|
|
Notes: No range check is done in any way.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="allocate_ldt_descriptors"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="seg_move"/>
|
|
<link id="seg_fillchar"/>
|
|
<link id="dosmemfillchar"/>
|
|
<link id="dosmemfillword"/>
|
|
<link id="dosmemget"/>
|
|
<link id="dosmemput"/>
|
|
<link id="dosmemmove"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="segment_to_descriptor">
|
|
<short>Map segment address to descriptor</short>
|
|
<descr>
|
|
<p>
|
|
Maps a real mode segment (paragraph) address onto an descriptor that can be
|
|
used by a protected mode program to access the same memory.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>seg</dt><dd>the real mode segment you want the descriptor to.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: Descriptor to real mode segment address.
|
|
</p>
|
|
<remark>
|
|
The returned descriptors limit will be set to 64 kB. Multiple calls
|
|
to this function with the same segment address will return the same
|
|
selector. Descriptors created by this function can never be modified or
|
|
freed. Programs which need to examine various real mode addresses using the
|
|
same selector should use the function
|
|
<link id="allocate_ldt_descriptors"/> and change
|
|
the base address as necessary.
|
|
</remark>
|
|
<p>
|
|
For an example, see <link id="seg_fillchar"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="free_ldt_descriptor"/>
|
|
<link id="set_segment_base_address"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="seg_move">
|
|
<short>Move data between 2 locations</short>
|
|
<descr>
|
|
<p>
|
|
Copies data between two memory locations.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>sseg</dt><dd> source selector. </dd>
|
|
<dt>source</dt><dd> source offset. </dd>
|
|
<dt>dseg</dt><dd> destination selector.</dd>
|
|
<dt>dest</dt><dd> destination offset.</dd>
|
|
<dt>count</dt><dd> size in bytes to copy.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: None.
|
|
</p>
|
|
<remark>
|
|
Overlapping is only checked if the source selector is equal to the
|
|
destination selector. No range check is done.
|
|
</remark>
|
|
<p>
|
|
For an example, see <link id="allocate_ldt_descriptors"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="seg_fillchar"/>
|
|
<link id="seg_fillword"/>
|
|
<link id="dosmemfillchar"/>
|
|
<link id="dosmemfillword"/>
|
|
<link id="dosmemget"/>
|
|
<link id="dosmemput"/>
|
|
<link id="dosmemmove"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="set_descriptor_access_rights">
|
|
<short>Set descriptor access rights</short>
|
|
<descr>
|
|
<p>
|
|
Sets the access rights of a descriptor.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>d</dt><dd> selector.</dd>
|
|
<dt>w</dt><dd> new descriptor access rights.</dd>
|
|
</dl>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_descriptor_access_rights"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="set_pm_interrupt">
|
|
<short>Set protected mode interrupt handler</short>
|
|
<descr>
|
|
<p>
|
|
Sets the address of the protected mode handler for an interrupt.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>vector</dt><dd> number of protected mode interrupt to set.</dd>
|
|
<dt>intaddr</dt><dd> selector:offset address to the interrupt vector.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
<remark>
|
|
The address supplied must be a valid <var>selector:offset</var>
|
|
protected mode address.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_pm_interrupt"/>
|
|
<link id="set_rm_interrupt"/>
|
|
<link id="get_rm_interrupt"/>
|
|
</seealso>
|
|
<example file="go32ex/intpm"/>
|
|
</element>
|
|
|
|
<element name="set_rm_interrupt">
|
|
<short>Set real mode interrupt handler</short>
|
|
<descr>
|
|
<p>
|
|
Sets a real mode interrupt handler.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>vector</dt><dd> the interrupt vector number to set.</dd>
|
|
<dt>intaddr</dt><dd> address of new interrupt vector.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, otherwise <var>False</var>.
|
|
</p>
|
|
<remark>
|
|
The address supplied MUST be a real mode segment address, not a
|
|
<var>selector:offset</var> address. So the interrupt handler must either reside in dos
|
|
memory (below 1 Mb boundary) or the application must allocate a real mode
|
|
callback address with <link id="get_rm_callback"/>.
|
|
</remark>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="get_rm_interrupt"/>
|
|
<link id="set_pm_interrupt"/>
|
|
<link id="get_pm_interrupt"/>
|
|
<link id="get_rm_callback"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="set_segment_base_address">
|
|
<short>Set descriptor's base address</short>
|
|
<descr>
|
|
<p>
|
|
Sets the 32-bit linear base address of a descriptor.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>d</dt><dd> selector.</dd>
|
|
<dt>s</dt><dd> new base address of the descriptor.</dd>
|
|
</dl>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="get_segment_base_address"/>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="set_segment_limit"/>
|
|
<link id="get_segment_base_address"/>
|
|
<link id="get_segment_limit"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="set_segment_limit">
|
|
<short>Set descriptor limit</short>
|
|
<descr>
|
|
<p>
|
|
Sets the limit of a descriptor.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>d</dt><dd> selector.</dd>
|
|
<dt>s</dt><dd> new limit of the descriptor.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: Returns <var>True</var> if successful, else <var>False</var>.
|
|
</p>
|
|
<remark>
|
|
The new limit specified must be the byte length of the segment - 1.
|
|
Segment limits bigger than or equal to 1MB must be page aligned, they must
|
|
have the lower 12 bits set.
|
|
</remark>
|
|
<p>
|
|
For an example, see <link id="allocate_ldt_descriptors"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="allocate_ldt_descriptors"/>
|
|
<link id="set_segment_base_address"/>
|
|
<link id="get_segment_limit"/>
|
|
<link id="set_segment_limit"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="tb_size">
|
|
<short>Return DOS transfer memory buffer size</short>
|
|
<descr>
|
|
<p>
|
|
Returns the size of the pre-allocated dos memory buffer.
|
|
</p>
|
|
<p>
|
|
Return values: The size of the pre-allocated dos memory buffer.
|
|
This block always seems to be 16k in size, but don't rely on this.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="transfer_buffer"/>
|
|
<link id="copyfromdos"/>
|
|
<link id="copytodos"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
|
|
<element name="transfer_buffer">
|
|
<short>Return offset of DOS transfer buffer</short>
|
|
<descr>
|
|
<var>transfer_buffer</var> returns the offset of the transfer buffer.
|
|
</descr>
|
|
<errors>
|
|
None.
|
|
</errors>
|
|
<seealso>
|
|
<link id="tb_size"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
|
|
<element name="unlock_code">
|
|
<short>Unlock code segment</short>
|
|
<descr>
|
|
<p>
|
|
Unlocks a memory range which resides in the code segment selector.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>functionaddr</dt><dd> address of function to be unlocked. </dd>
|
|
<dt>size</dt><dd> size bytes to be unlocked.</dd>
|
|
</dl>
|
|
<p>
|
|
Return value: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="get_rm_callback"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="unlock_linear_region"/>
|
|
<link id="unlock_data"/>
|
|
<link id="lock_linear_region"/>
|
|
<link id="lock_data"/>
|
|
<link id="lock_code"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="unlock_data">
|
|
<short>Unlock data segment</short>
|
|
<descr>
|
|
<p>
|
|
Unlocks a memory range which resides in the data segment selector.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>data</dt><dd> address of memory to be unlocked. </dd>
|
|
<dt>size</dt><dd> size bytes to be unlocked.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
<p>
|
|
For an example, see <link id="get_rm_callback"/>.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="unlock_linear_region"/>
|
|
<link id="unlock_code"/>
|
|
<link id="lock_linear_region"/>
|
|
<link id="lock_data"/>
|
|
<link id="lock_code"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
<element name="unlock_linear_region">
|
|
<short>Unlock linear memory region</short>
|
|
<descr>
|
|
<p>
|
|
Unlocks a previously locked linear region range to allow it to be swapped
|
|
out again if needed.
|
|
</p>
|
|
<p>
|
|
Parameters:
|
|
</p>
|
|
<dl>
|
|
<dt>linearaddr</dt><dd> linear address of the memory to be unlocked. </dd>
|
|
<dt>size</dt><dd> size bytes to be unlocked.</dd>
|
|
</dl>
|
|
<p>
|
|
Return values: <var>True</var> if successful, <var>False</var> otherwise.
|
|
</p>
|
|
</descr>
|
|
<errors>
|
|
Check the <link id="int31error"/> variable.
|
|
</errors>
|
|
<seealso>
|
|
<link id="unlock_data"/>
|
|
<link id="unlock_code"/>
|
|
<link id="lock_linear_region"/>
|
|
<link id="lock_data"/>
|
|
<link id="lock_code"/>
|
|
</seealso>
|
|
</element>
|
|
|
|
</module>
|
|
</package>
|
|
</fpdoc-descriptions> |