1
0
Fork 0

Merging upstream version 7.1.10-dfsg.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
Daniel Baumann 2025-06-24 21:15:14 +02:00
parent fce0adf0a0
commit 6b15cd43cb
Signed by: daniel.baumann
GPG key ID: BCC918A2ABD66424
108 changed files with 6337 additions and 5507 deletions

55
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,55 @@
# Contributing to this repository
We welcome your contributions! There are multiple ways to contribute.
## Opening issues
For bugs or enhancement requests, please file a GitHub issue unless it's
security related. When filing a bug remember that the better written the bug is,
the more likely it is to be fixed. If you think you've found a security
vulnerability, do not raise a GitHub issue and follow the instructions in our
[security policy](./SECURITY.md).
## Contributing code
We welcome your code contributions. Before submitting code via a pull request,
you will need to have signed the [Oracle Contributor Agreement][OCA] (OCA) and
your commits need to include the following line using the name and e-mail
address you used to sign the OCA:
```text
Signed-off-by: Your Name <you@example.org>
```
This can be automatically added to pull requests by committing with `--sign-off`
or `-s`, e.g.
```text
git commit --signoff
```
Only pull requests from committers that can be verified as having signed the OCA
can be accepted.
## Pull request process
1. Ensure there is an issue created to track and discuss the fix or enhancement
you intend to submit.
1. Fork this repository.
1. Create a branch in your fork to implement the changes. We recommend using
the issue number as part of your branch name, e.g. `1234-fixes`.
1. Ensure that any documentation is updated with the changes that are required
by your change.
1. Ensure that any samples are updated if the base image has been changed.
1. Submit the pull request. *Do not leave the pull request blank*. Explain exactly
what your changes are meant to do and provide simple steps on how to validate.
your changes. Ensure that you reference the issue you created as well.
1. We will assign the pull request to 2-3 people for review before it is merged.
## Code of conduct
Follow the [Golden Rule](https://en.wikipedia.org/wiki/Golden_Rule). If you'd
like more specific guidelines, see the [Contributor Covenant Code of Conduct][COC].
[OCA]: https://oca.opensource.oracle.com
[COC]: https://www.contributor-covenant.org/version/1/4/code-of-conduct/

View file

@ -880,8 +880,6 @@ if1of ($(KBUILD_TARGET), darwin linux solaris)
# Enable Java<->JAX-WS bridge
VBOX_WITH_JWS ?= 1
endif
# Use XPIDL instead of XSLT stylesheet
VBOX_WITH_JAVA_SUPPORT_IN_XPIDL ?=
# Build against multiple Python versions present in the system (only up to 3.2,
# unless VBOX_WITH_ONLY_PYTHON_LIMITED_API is overridden).
VBOX_WITH_MULTIVERSION_PYTHON ?= 1
@ -2649,7 +2647,7 @@ else
endif
# Makeself for the linux installers.
VBOX_MAKESELF ?= $(KBUILD_DEVTOOLS)/common/makeself/v2.4.5-r2/makeself.sh
VBOX_MAKESELF ?= $(KBUILD_DEVTOOLS)/common/makeself/v2.5.0-r2/makeself.sh
# Microsoft HTML Help Workshop.
VBOX_PATH_HTML_HELP_WORKSHOP ?= $(KBUILD_DEVTOOLS)/win.x86/HTML_Help_Workshop/v1.3/
@ -2772,15 +2770,6 @@ ifneq ($(KBUILD_TARGET),win)
$(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
$(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
$(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd
ifneq ($(KBUILD_TARGET),os2)
# libIDL-config (for xpcom18a4)
ifeq ($(origin VBOX_LIBIDL_CONFIG),undefined)
ifeq ($(KBUILD_HOST),solaris)
VBOX_LIBIDL_CONFIG_FALLBACK = $(lastword $(wildcard $(KBUILD_DEVTOOLS)/solaris.amd64/libIDL/*/bin/libIDL-config-2))
endif
export VBOX_LIBIDL_CONFIG := $(firstword $(which libIDL-config-2 libIDL-config) $(VBOX_LIBIDL_CONFIG_FALLBACK) libIDL-config-2-not-found)
endif
endif
endif
# The X11 LIBPATH. (The amd64 hack is for RHEL4.)
@ -4232,7 +4221,9 @@ ifdef VBOX_SIGNING_MODE
$(KBUILD_DEVTOOLS)/common/ccs/notfound/Client.jar )
VBOX_CCS_USER ?= virtualbox_grp
VBOX_CCS_GLOBAL_UID ?= non-of-your-business
VBOX_CCS_SERVER ?= UK
VBOX_CCS_SERVER.solaris ?= SCA
VBOX_CCS_SERVER.win ?= PHX
VBOX_CCS_SERVER.darwin ?= SCA
##
# Corp Code Signing command line.
# @param $1 Signing method: solaris_elf, solaris_pkg, driver (microsoft), ...
@ -4241,7 +4232,7 @@ ifdef VBOX_SIGNING_MODE
# @param $4 Additional options.
VBOX_CCS_SIGN_CMD = $(VBOX_RETRY) $(VBOX_JAVA) -Xmx256m -jar "$(VBOX_CCS_CLIENT_JAR)" \
sign -user "$(VBOX_CCS_USER)" -global_uid "$(VBOX_CCS_GLOBAL_UID)" \
-job_timeout 90 -server_timeout 75 -server "$(VBOX_CCS_SERVER)" \
-job_timeout 90 -server_timeout 75 -server "$(VBOX_CCS_SERVER.$(KBUILD_TARGET))" \
-sign_method "$1" -file_to_sign "$2" -signed_location "$(if $3,$3,$(call VBOX_DIRX,$2))" $4
ifeq ($(KBUILD_HOST),win)
@ -4661,7 +4652,7 @@ ifdef VBOX_SIGNING_MODE
# @param 3 The directory to put the notarized file in. Defaults to $(dir $1).
VBOX_CCS_NOTARIZE_CMD = $(VBOX_RETRY) $(VBOX_JAVA) -jar "$(VBOX_CCS_CLIENT_JAR)" \
mac_notarize -user "$(VBOX_CCS_USER)" -global_uid "$(VBOX_CCS_GLOBAL_UID)" \
-job_timeout 90 -server_timeout 75 -server "$(VBOX_CCS_SERVER)" \
-job_timeout 90 -server_timeout 75 -server "$(VBOX_CCS_SERVER.$(KBUILD_TARGET))" \
-file_to_notarize "$1" -bundle_id "$2" -download_location "$(if $3,$3,$(call VBOX_DIRX,$1))"
## Sign an application bundle, framework or kernel extension.
@ -5162,7 +5153,7 @@ endif
# openssl
SDK_VBoxOpenSslStatic := OpenSSL - Only for VBoxRT and/or statically linked programs.
SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-3.3.2-headers/include
SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-3.4.1-headers/include
SDK_VBoxOpenSslStatic_INCS ?= $(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)
SDK_VBoxOpenSslStatic_ORDERDEPS ?= $(crypto-headers_1_TARGET)
if !defined(VBOX_ONLY_SDK) \
@ -5176,7 +5167,7 @@ SDK_VBoxOpenSslStatic_LIBS ?= \
$(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
SDK_VBoxOpenSslStatic-x86 := OpenSSL/x86 - Only for VBoxRT and/or statically linked programs.
SDK_VBoxOpenSslStatic-x86_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-3.3.2-headers/include
SDK_VBoxOpenSslStatic-x86_VBOX_DEFAULT_INCS := $(PATH_OUT)/obj/crypto-3.4.1-headers/include
SDK_VBoxOpenSslStatic-x86_INCS ?= $(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)
SDK_VBoxOpenSslStatic-x86_ORDERDEPS ?= $(crypto-headers_1_TARGET)
if ("$(SDK_VBoxOpenSslStatic_INCS)" == "$(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)")
@ -5280,7 +5271,7 @@ endif
ifdef VBOX_WITH_LIBLZMA
SDK_VBoxLibLzma := liblzma for dll linking.
SDK_VBoxLibLzma_DEFAULT_INCS := $(PATH_ROOT)/src/libs/liblzma-5.4.1/api
SDK_VBoxLibLzma_DEFAULT_INCS := $(PATH_ROOT)/src/libs/liblzma-5.8.1/api
SDK_VBoxLibLzma_INCS ?= $(SDK_VBoxLibLzma_DEFAULT_INCS)
SDK_VBoxLibLzma_LIBS ?= $(PATH_STAGE_LIB)/VBox-liblzma$(VBOX_SUFF_LIB)
@ -9287,7 +9278,7 @@ endif
SVN ?= svn$(HOSTSUFF_EXE)
VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
ifndef VBOX_SVN_REV
VBOX_SVN_REV_CONFIG_FALLBACK := $(patsubst %:,, $Rev: 168374 $ )
VBOX_SVN_REV_CONFIG_FALLBACK := $(patsubst %:,, $Rev: 168816 $ )
VBOX_SVN_REV_FALLBACK := $(if-expr $(VBOX_SVN_REV_CONFIG_FALLBACK) > $(VBOX_SVN_REV_VERSION_FALLBACK),$(VBOX_SVN_REV_CONFIG_FALLBACK),$(VBOX_SVN_REV_VERSION_FALLBACK))
VBOX_SVN_DEP := $(firstword $(wildcard $(PATH_ROOT)/.svn/wc.db $(abspath $(PATH_ROOT)/../.svn/wc.db) $(abspath $(PATH_ROOT)/../../.svn/wc.db) $(PATH_ROOT)/.svn/entries))
ifeq ($(which $(SVN)),)

674
LICENSE.txt Normal file
View file

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

91
README.md Normal file
View file

@ -0,0 +1,91 @@
# Oracle VirtualBox
VirtualBox is a general-purpose full virtualization software for x86_64
hardware (with version 7.1 additionally for macOS/Arm), targeted at laptop,
desktop, server and embedded use.
It features a very user friendly graphical user interface and is available for
many popular operating systems (Linux, Windows, macOS and Solaris). Flexible
networking setup and interactive performance are the strong points.
Anyone with the need to run multiple operating systems simultaneously with some
basic knowledge about PCs and operating system installation can use it to
reduce effort with a large number of tasks including software testing.
## Getting started
VirtualBox is a complex product with multiple dependencies, some of them
specific to the operating system on which you want to run it.
The basics for building VirtualBox are described on the [build
instructions](https://www.virtualbox.org/wiki/Build_instructions) page.
## Documentation
The [VirtualBox User
Guide](https://docs.oracle.com/en/virtualization/virtualbox/index.html)
contains all information relevant for users, including the product features and
their configuration.
For developers it is recommended to start with the [technical
documentation](https://www.virtualbox.org/wiki/Technical_documentation) which
contains links to a broad collection of pages related to development, covering
many aspects of the project and its features.
## Examples
Tutorials on how to install and use Oracle VirtualBox are available at
[Learn to Install Oracle VirtualBox and Run Virtual Machines](https://blogs.oracle.com/linux/post/learn-to-install-oracle-virtualbox-and-run-virtual-machines)
and [Use Oracle VirtualBox on Oracle Linux](https://docs.oracle.com/en/learn/ol-vbox/index.html).
## Help
Oracle customers with a support contract covering Oracle VirtualBox should
reach out to [Oracle Support](https://www.oracle.com/support/).
Everyone can use the [VirtualBox Forums](https://forums.virtualbox.org/)
for questions about the product or discussing its functionality. Open an [issue](https://github.com/VirtualBox/virtualbox/issues)
for bug reports or request for enhancements. Report a security vulnerability
according to the [Reporting Vulnerabilities Guide](https://www.oracle.com/corporate/security-practices/assurance/vulnerability/reporting.html).
## Contributing
This project welcomes contributions from the community. Before submitting a
pull request, please [review our contribution guide](./CONTRIBUTING.md)
## Security
Please consult the [security guide](./SECURITY.md) for our responsible security vulnerability disclosure process.
## License
The correct copyright notice format for both documentation and software is
Copyright (C) [year-]year Oracle and/or its affiliates.
This file is part of VirtualBox base platform packages, as
available from https://www.virtualbox.org.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, in version 3 of the
License.
This program 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
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <https://www.gnu.org/licenses>.
You must include the year the content was first released (on any platform) and
the most recent year in which it was revised:
Copyright (C) 2025 Oracle and/or its affiliates.
Released under the GNU General Public License v3.0 as shown at
[COPYING](./COPYING) which contains clarifications regarding allowed licenses
for other code using parts of the project which are covered by multiple
licenses.

39
SECURITY.md Normal file
View file

@ -0,0 +1,39 @@
# Reporting security vulnerabilities
Oracle values the independent security research community and believes that
responsible disclosure of security vulnerabilities helps us ensure the security
and privacy of all our users.
Please do NOT raise a GitHub Issue to report a security vulnerability. If you
believe you have found a security vulnerability, please submit a report to
[secalert_us@oracle.com][1] preferably with a proof of concept. Please review
some additional information on [how to report security vulnerabilities to Oracle][2].
We encourage people who contact Oracle Security to use email encryption using
[our encryption key][3].
We ask that you do not use other channels or contact the project maintainers
directly.
Non-vulnerability related security issues including ideas for new or improved
security features are welcome on GitHub Issues.
## Security updates, alerts and bulletins
Security updates will be released on a regular cadence. Many of our projects
will typically release security fixes in conjunction with the
Oracle Critical Patch Update program. Additional
information, including past advisories, is available on our [security alerts][4]
page.
## Security-related information
We will provide security related information such as a threat model, considerations
for secure use, or any known security issues in our documentation. Please note
that labs and sample code are intended to demonstrate a concept and may not be
sufficiently hardened for production use.
[1]: mailto:secalert_us@oracle.com
[2]: https://www.oracle.com/corporate/security-practices/assurance/vulnerability/reporting.html
[3]: https://www.oracle.com/security-alerts/encryptionkey.html
[4]: https://www.oracle.com/security-alerts/

1
THIRD_PARTY_LICENSES.txt Normal file
View file

@ -0,0 +1 @@
See doc/manual/en_US/dita/topics/licensing/vbox-base for all 3rd party licenses.

View file

@ -34,7 +34,7 @@ VBOX_VERSION_MINOR = 1
# This is the current build number. It should be increased every time we publish a
# new build. The define is available in every source file. Only even build numbers
# will be published, odd numbers are set during development.
VBOX_VERSION_BUILD = 8
VBOX_VERSION_BUILD = 10
# This can be overridden in LocalConfig.kmk or elsewhere.
# For the convention, see checks near the end of Config.kmk.
VBOX_BUILD_PUBLISHER =
@ -45,4 +45,4 @@ VBOX_VERSION_PRERELEASE =
VBOX_RELEASE_EXACT_MATCH =
# Fallback revision when there is no other source. See Config.kmk.
VBOX_SVN_REV_VERSION_FALLBACK := $(patsubst %:,, $Rev: 168469 $ )
VBOX_SVN_REV_VERSION_FALLBACK := $(patsubst %:,, $Rev: 169112 $ )

33
configure vendored
View file

@ -90,7 +90,6 @@ WITH_XPCOM=1
WITH_PYTHON=1
WITH_JAVA=1
WITH_VMMRAW=1
WITH_LIBIDL=1
WITH_QT6=1
WITH_SDL=1
WITH_SDL_TTF=1
@ -786,36 +785,6 @@ EOF
}
#
# Check for libIDL, needed by xpcom
#
check_libidl()
{
test_header libIDL
if which_wrapper libIDL-config-2 > /dev/null; then
libidl_ver=`libIDL-config-2 --version`
if [ $? -ne 0 ]; then
log_failure "libIDL-config-2 not working"
fail
else
log_success "found version $libidl_ver"
cnf_append "VBOX_LIBIDL_CONFIG" \
"PKG_CONFIG_PATH=`libIDL-config-2 --prefix`/$LIB/pkgconfig `which_wrapper libIDL-config-2`"
fi
elif check_avail "libIDL-config" libIDL-config; then
libidl_ver=`libIDL-config --version`
if [ $? -ne 0 ]; then
log_failure "libIDL-config not working"
fail
else
log_success "found version $libidl_ver"
cnf_append "VBOX_LIBIDL_CONFIG" "`which_wrapper libIDL-config`"
fi
fi
}
#
# Check for libdevmapper, needed by the VBoxVolInfo
#
@ -2632,7 +2601,6 @@ elif [ "$OS" = "haiku" ]; then
WITH_PULSE=0
WITH_DBUS=0
WITH_KMODS=0
WITH_LIBIDL=0
WITH_XPCOM=0
BUILD_LIBXSLT=1
BUILD_LIBXML2=1
@ -3024,7 +2992,6 @@ fi
if [ $ONLY_ADDITIONS -eq 0 ]; then
[ "$OS" != "darwin" ] && check_pthread
check_libxml2
[ $WITH_LIBIDL -eq 1 ] && check_libidl
check_z
check_lzf
check_ssl

View file

@ -71,6 +71,60 @@ Rules for adding a changelog entry to make them look more uniform:
<!-- HACK ALERT! Seems we must have a single top level element for xi:include to work.
So, we use chapter and xpointer="xpointer(/chapter/)" with xi:include. -->
<sect1>
<title>Version 7.1.10 (2025-06-03)</title>
<para>This is a maintenance release. The following items were fixed and/or
added:</para>
<itemizedlist>
<listitem>
<para>VBoxManage: Fixed a crash when running 'guestcontrol run' on Windows
hosts (bug #22175)</para>
</listitem>
<listitem>
<para>Audio: Fixed device switching on Windows hosts (bug #22267)</para>
</listitem>
<listitem>
<para>Windows host installer: Fixed multiple installation entries in the
'Add or remove programs' dialog and upgrade issues</para>
</listitem>
<listitem>
<para>Linux host: Fixed issue which caused VM Selector process crash
due to missing libdl.so and libpthread.so libraries (bug #22193)</para>
</listitem>
<listitem>
<para>Linux host: Removed libIDL as a build time dependency when
building VirtualBox from source code (bug #21169)</para>
</listitem>
<listitem>
<para>Linux guest and host: Added initial support for kernel 6.15 (bug #22420)</para>
</listitem>
<listitem>
<para>Linux guest: Added initial support for kernel 6.16-RC0</para>
</listitem>
<listitem>
<para>Linux guest and host: Fixed issue with building modules
for UEK8 kernel on Oracle Linux 9 distribution</para>
</listitem>
<listitem>
<para>RDP: Fixed issue when it was not possible to paste clipboard buffer
into a guest over RDP remote session</para>
</listitem>
</itemizedlist>
</sect1>
<sect1>
<title>Version 7.1.8 (2025-04-15)</title>

View file

@ -833,14 +833,21 @@ public:
if (!ensureCapacity(size() + 1))
return false;
for (size_t i = size(); i > 0; --i)
{
#ifdef VBOX_WITH_XPCOM
/* For XPCOM, size() is 0 and capacity() is 16 for the first time
* this function is being called on an empty array.
* See implementation of ensureCapacity(). */
for (size_t i = size(); i > 0; --i)
SafeArray::Copy(m.arr[i - 1], m.arr[i]);
#else
/* For Windows (COM), size() always matches the array's capacity.
*
* So we here need to make sure we don't read beyond the array
* if this function is being called on an empty array
* (size is 1 and there is no element on index 1 yet). */
for (size_t i = size() - 1; i > 0; --i)
SafeArray::Copy(m.raw[i - 1], m.raw[i]);
#endif
}
#ifdef VBOX_WITH_XPCOM
SafeArray::Copy(aElement, m.arr[0]);

View file

@ -2015,6 +2015,8 @@
# define RTScriptLexPeekCh RT_MANGLER(RTScriptLexPeekCh)
# define RTScriptLexPeekChEx RT_MANGLER(RTScriptLexPeekChEx)
# define RTScriptLexPeekNextTokenType RT_MANGLER(RTScriptLexPeekNextTokenType)
# define RTScriptLexProduceTokError RT_MANGLER(RTScriptLexProduceTokError)
# define RTScriptLexProduceTokIde RT_MANGLER(RTScriptLexProduceTokIde)
# define RTScriptLexQueryToken RT_MANGLER(RTScriptLexQueryToken)
# define RTScriptLexScanIdentifier RT_MANGLER(RTScriptLexScanIdentifier)
# define RTScriptLexScanNumber RT_MANGLER(RTScriptLexScanNumber)

View file

@ -97,6 +97,10 @@ typedef enum RTSCRIPTLEXTOKTYPE
RTSCRIPTLEXTOKTYPE_KEYWORD,
/** Some punctuator. */
RTSCRIPTLEXTOKTYPE_PUNCTUATOR,
/** A single line comment. */
RTSCRIPTLEXTOKTYPE_COMMENT_SINGLE_LINE,
/** A multi line comment. */
RTSCRIPTLEXTOKTYPE_COMMENT_MULTI_LINE,
/** Special error token, conveying an error message from the lexer. */
RTSCRIPTLEXTOKTYPE_ERROR,
/** End of stream token. */
@ -211,6 +215,14 @@ typedef struct RTSCRIPTLEXTOKEN
/** Pointer to the matched punctuator descriptor. */
PCRTSCRIPTLEXTOKMATCH pPunctuator;
} Punctuator;
/** Comment */
struct
{
/** Pointer to the start of the comment (including the symbols starting the comment). */
const char *pszComment;
/** Number of characters of the comment, including the null terminator. */
size_t cchComment;
} Comment;
/** Error. */
struct
{
@ -311,7 +323,12 @@ typedef const RTSCRIPTLEXCFG *PCRTSCRIPTLEXCFG;
#define RTSCRIPT_LEX_CFG_F_DEFAULT 0
/** Case insensitive lexing, keywords and so on must be used lowercase to match
* as the lexer will convert everything to lowercase internally. */
#define RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE RT_BIT(0)
#define RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_LOWER RT_BIT(0)
/** Case insensitive lexing, keywords and so on must be used uppercase to match
* as the lexer will convert everything to uppercase internally. */
#define RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_UPPER RT_BIT(1)
/** Comments are not skipped but passed back as tokens. */
#define RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS RT_BIT(2)
/** Default character conversions (converting to lower case when the case insensitive flag is set). */
@ -365,12 +382,17 @@ typedef FNRTSCRIPTLEXDTOR *PFNRTSCRIPTLEXDTOR;
* scanned string literals on success, optional.
* If not NULL the string cache must be freed by the caller when not used
* anymore.
* @param phStrCacheComments Where to store the pointer to the string cache containing all
* comments on success when RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS
* is given, optional.
* If not NULL the string cache must be freed by the caller when not used
* anymore.
* @param pCfg The lexer config to use for identifying the different tokens.
*/
RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEXRDR pfnReader,
PFNRTSCRIPTLEXDTOR pfnDtor, void *pvUser,
size_t cchBuf, PRTSTRCACHE phStrCacheId, PRTSTRCACHE phStrCacheStringLit,
PCRTSCRIPTLEXCFG pCfg);
PRTSTRCACHE phStrCacheComments, PCRTSCRIPTLEXCFG pCfg);
/**
@ -387,10 +409,16 @@ RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEX
* scanned string literals on success, optional.
* If not NULL the string cache must be freed by the caller when not used
* anymore.
* @param phStrCacheComments Where to store the pointer to the string cache containing all
* comments on success when RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS
* is given, optional.
* If not NULL the string cache must be freed by the caller when not used
* anymore.
* @param pCfg The lexer config to use for identifying the different tokens.
*/
RTDECL(int) RTScriptLexCreateFromString(PRTSCRIPTLEX phScriptLex, const char *pszSrc, PRTSTRCACHE phStrCacheId,
PRTSTRCACHE phStrCacheStringLit, PCRTSCRIPTLEXCFG pCfg);
PRTSTRCACHE phStrCacheStringLit, PRTSTRCACHE phStrCacheComments,
PCRTSCRIPTLEXCFG pCfg);
/**
@ -407,10 +435,16 @@ RTDECL(int) RTScriptLexCreateFromString(PRTSCRIPTLEX phScriptLex, const char *ps
* scanned string literals on success, optional.
* If not NULL the string cache must be freed by the caller when not used
* anymore.
* @param phStrCacheComments Where to store the pointer to the string cache containing all
* comments on success when RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS
* is given, optional.
* If not NULL the string cache must be freed by the caller when not used
* anymore.
* @param pCfg The lexer config to use for identifying the different tokens.
*/
RTDECL(int) RTScriptLexCreateFromFile(PRTSCRIPTLEX phScriptLex, const char *pszFilename, PRTSTRCACHE phStrCacheId,
PRTSTRCACHE phStrCacheStringLit, PCRTSCRIPTLEXCFG pCfg);
PRTSTRCACHE phStrCacheStringLit, PRTSTRCACHE phStrCacheComments,
PCRTSCRIPTLEXCFG pCfg);
/**
@ -601,6 +635,30 @@ RTDECL(int) RTScriptLexScanStringLiteralC(RTSCRIPTLEX hScriptLex, char ch, PRTSC
*/
RTDECL(int) RTScriptLexScanStringLiteralPascal(RTSCRIPTLEX hScriptLex, char ch, PRTSCRIPTLEXTOKEN pTok, void *pvUser);
/**
* Produces an error token with the given message, used for custom lexer rule implementations.
*
* @returns IPRT status code.
* @param hScriptLex The lexer handle.
* @param pTok The token to fill.
* @param rc The status code to use in the message.
* @param pszMsg The format string for the error message.
* @param ... Arguments to the format string.
*/
RTDECL(int) RTScriptLexProduceTokError(RTSCRIPTLEX hScriptLex, PRTSCRIPTLEXTOKEN pTok, int rc, const char *pszMsg, ...);
/**
* Produces an identifier token with the given identifier, used for custom lexer rule implementations.
*
* @returns IPRT status code.
* @param hScriptLex The lexer handle.
* @param pTok The token to fill.
* @param pszIde The identifier to add.
* @param cchIde Number of characters in the identifier.
*/
RTDECL(int) RTScriptLexProduceTokIde(RTSCRIPTLEX hScriptLex, PRTSCRIPTLEXTOKEN pTok, const char *pszIde, size_t cchIde);
/** @} */
/** @} */

View file

@ -42,7 +42,7 @@ Class=System
DriverPackageType=PlugAndPlay
;edit-DriverVer=08/26/2008,2.00.0000
;cat CatalogFile=VBoxGuest.cat
;PnpLockdown=1
PnpLockdown=1
[SourceDisksNames]
1 = %VBoxGuest_MediaDesc%,,,

View file

@ -43,6 +43,10 @@
# include <drm/drm_probe_helper.h>
#endif
#if RTLNX_VER_MIN(6,13,0) && defined(CONFIG_APERTURE_HELPERS)
# include <linux/aperture.h>
#endif
#if RTLNX_VER_RANGE(5,14,0, 6,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99)
# include <drm/drm_aperture.h>
#endif
@ -94,7 +98,9 @@ static int vbox_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
}
#endif
# if RTLNX_VER_RANGE(5,14,0, 6,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99)
# if RTLNX_VER_MIN(6,13,0) && defined(CONFIG_APERTURE_HELPERS)
ret = aperture_remove_conflicting_pci_devices(pdev, driver.name);
# elif RTLNX_VER_RANGE(5,14,0, 6,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99)
# if RTLNX_VER_MIN(5,15,0) || RTLNX_RHEL_RANGE(8,7, 8,99) || RTLNX_RHEL_MIN(9,1) || RTLNX_SUSE_MAJ_PREREQ(15,4)
ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, &driver);
# else
@ -391,6 +397,9 @@ static struct drm_driver driver = {
.desc = DRIVER_DESC,
#if RTLNX_VER_MAX(6,14,0)
.date = DRIVER_DATE,
#endif
#if RTLNX_VER_MIN(6,15,0)
.fbdev_probe = vboxfb_create,
#endif
.major = DRIVER_MAJOR,
.minor = DRIVER_MINOR,
@ -411,7 +420,9 @@ static struct drm_driver driver = {
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
#endif
.gem_prime_import = drm_gem_prime_import,
#if RTLNX_VER_MAX(6,15,0)
.gem_prime_import_sg_table = vbox_gem_prime_import_sg_table,
#endif
#if RTLNX_VER_MAX(6,6,0) && !RTLNX_RHEL_RANGE(9,4, 9,99) && !RTLNX_SUSE_MAJ_PREREQ(15, 6)
.gem_prime_mmap = vbox_gem_prime_mmap,
#endif

View file

@ -433,6 +433,8 @@ int vbox_framebuffer_init(struct drm_device *dev,
#endif
struct drm_gem_object *obj);
int vboxfb_create(struct drm_fb_helper *helper, struct drm_fb_helper_surface_size *sizes);
int vbox_fbdev_init(struct drm_device *dev);
void vbox_fbdev_fini(struct drm_device *dev);
void vbox_fbdev_set_base(struct vbox_private *vbox, unsigned long gpu_addr);

View file

@ -265,7 +265,7 @@ static struct fb_info *drm_fb_helper_alloc_fbi(struct drm_fb_helper *helper)
}
#endif
static int vboxfb_create(struct drm_fb_helper *helper,
int vboxfb_create(struct drm_fb_helper *helper,
struct drm_fb_helper_surface_size *sizes)
{
struct vbox_fbdev *fbdev =
@ -413,9 +413,11 @@ static int vboxfb_create(struct drm_fb_helper *helper,
return 0;
}
#if RTLNX_VER_MAX(6,15,0)
static struct drm_fb_helper_funcs vbox_fb_helper_funcs = {
.fb_probe = vboxfb_create,
};
#endif
#if RTLNX_VER_MAX(4,3,0) && !RTLNX_RHEL_MAJ_PREREQ(7,3)
static void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper)
@ -484,7 +486,9 @@ int vbox_fbdev_init(struct drm_device *dev)
vbox->fbdev = fbdev;
spin_lock_init(&fbdev->dirty_lock);
#if RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(8,9, 8,99) || RTLNX_RHEL_RANGE(9,3, 9,99)
#if RTLNX_VER_MIN(6,15,0)
drm_fb_helper_prepare(dev, &fbdev->helper, 32, NULL);
#elif RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(8,9, 8,99) || RTLNX_RHEL_RANGE(9,3, 9,99)
drm_fb_helper_prepare(dev, &fbdev->helper, 32, &vbox_fb_helper_funcs);
#elif RTLNX_VER_MIN(3,17,0) || RTLNX_RHEL_MIN(7,2)
drm_fb_helper_prepare(dev, &fbdev->helper, &vbox_fb_helper_funcs);

View file

@ -660,12 +660,13 @@ static int vbox_get_modes(struct drm_connector *connector)
return num_modes;
}
#if RTLNX_VER_MAX(3,14,0) && !RTLNX_RHEL_MAJ_PREREQ(7,1)
static int vbox_mode_valid(struct drm_connector *connector,
#if RTLNX_VER_MIN(6,15,0)
static enum drm_mode_status vbox_mode_valid(struct drm_connector *connector, const struct drm_display_mode *mode)
#elif RTLNX_VER_MIN(3,14,0) || RTLNX_RHEL_MAJ_PREREQ(7,1)
static enum drm_mode_status vbox_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode)
#else
static enum drm_mode_status vbox_mode_valid(struct drm_connector *connector,
static int vbox_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode)
#endif
struct drm_display_mode *mode)
{
return MODE_OK;
}

View file

@ -49,6 +49,7 @@ struct sg_table *vbox_gem_prime_get_sg_table(struct drm_gem_object *obj)
return ERR_PTR(-ENOSYS);
}
#if RTLNX_VER_MAX(6,15,0)
# if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2)
struct drm_gem_object *vbox_gem_prime_import_sg_table(
struct drm_device *dev, size_t size, struct sg_table *table)
@ -61,6 +62,7 @@ struct drm_gem_object *vbox_gem_prime_import_sg_table(
WARN_ONCE(1, "not implemented");
return ERR_PTR(-ENOSYS);
}
#endif
void *vbox_gem_prime_vmap(struct drm_gem_object *obj)
{

View file

@ -1,7 +1,7 @@
#! /bin/sh
# $Id: vboxadd.sh $
## @file
# Linux Additions kernel module init script ($Revision: 168394 $)
# Linux Additions kernel module init script ($Revision: 168899 $)
#
#
@ -536,9 +536,10 @@ setup_modules()
export KERN_VER
info "Building the modules for kernel $KERN_VER."
# Prepend PATH for building UEK7 on OL8 distribution.
# Prepend PATH for building UEK on OL8/9 distributions.
case "$KERN_VER" in
5.15.0-*.el8uek*) PATH="/opt/rh/gcc-toolset-11/root/usr/bin:$PATH";;
6.12.0-*.el9uek*)PATH="/opt/rh/gcc-toolset-14/root/usr/bin:$PATH";;
esac
# Detect if kernel was built with clang.
@ -1041,6 +1042,8 @@ check_status_kernel()
# Do not spoil $?.
true
fi
else
false
fi
# Module vboxvideo is optional and expected to be loaded only when VM is

View file

@ -1088,7 +1088,9 @@ static int vbsf_inode_create(struct inode *parent, struct dentry *dentry, int mo
* @param mode file mode
* @returns 0 on success, Linux error code otherwise
*/
#if RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(9,6, 9,99) || defined(DOXYGEN_RUNNING)
#if RTLNX_VER_MIN(6,15,0)
static struct dentry *vbsf_inode_mkdir(struct mnt_idmap *idmap, struct inode *parent, struct dentry *dentry, umode_t mode)
#elif RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(9,6, 9,99) || defined(DOXYGEN_RUNNING)
static int vbsf_inode_mkdir(struct mnt_idmap *idmap, struct inode *parent, struct dentry *dentry, umode_t mode)
#elif RTLNX_VER_MIN(5,12,0)
static int vbsf_inode_mkdir(struct user_namespace *ns, struct inode *parent, struct dentry *dentry, umode_t mode)
@ -1098,14 +1100,22 @@ static int vbsf_inode_mkdir(struct inode *parent, struct dentry *dentry, umode_t
static int vbsf_inode_mkdir(struct inode *parent, struct dentry *dentry, int mode)
#endif
{
int rc;
TRACE();
AssertMsg(!(mode & S_IFMT) || (mode & S_IFMT) == S_IFDIR, ("0%o\n", mode));
return vbsf_create_worker(parent, dentry, (mode & ~S_IFMT) | S_IFDIR,
rc = vbsf_create_worker(parent, dentry, (mode & ~S_IFMT) | S_IFDIR,
SHFL_CF_ACT_CREATE_IF_NEW
| SHFL_CF_ACT_FAIL_IF_EXISTS
| SHFL_CF_ACCESS_READWRITE
| SHFL_CF_DIRECTORY,
false /*fStashHandle*/, false /*fDoLookup*/, NULL /*phHandle*/, NULL /*fCreated*/);
#if RTLNX_VER_MIN(6,15,0)
return ERR_PTR(rc);
#else
return rc;
#endif
}

View file

@ -3695,6 +3695,7 @@ static int vbsf_readpage(struct file *file, struct page *page)
* Needed for mmap and writes when the file is mmapped in a shared+writeable
* fashion.
*/
#if RTLNX_VER_MAX(6,16,0)
# if RTLNX_VER_MIN(2,5,52)
static int vbsf_writepage(struct page *page, struct writeback_control *wbc)
# else
@ -3774,6 +3775,7 @@ static int vbsf_writepage(struct page *page)
unlock_page(page);
return err;
}
#endif /* < 6.16.0 */
#if RTLNX_VER_MIN(2,6,24)
@ -3905,7 +3907,9 @@ struct address_space_operations vbsf_reg_aops = {
#else
.readpage = vbsf_readpage,
#endif
#if RTLNX_VER_MAX(6,16,0)
.writepage = vbsf_writepage,
#endif
/** @todo Need .writepages if we want msync performance... */
#if RTLNX_VER_MIN(5,18,0) || RTLNX_RHEL_RANGE(9,2, 9,99)
.dirty_folio = filemap_dirty_folio,

View file

@ -3168,8 +3168,8 @@ static int drvAudioStreamPreBufComitting(PDRVAUDIO pThis, PDRVAUDIOSTREAM pStrea
uint32_t cbPreBufWritten = 0;
rc = pThis->pHostDrvAudio->pfnStreamPlay(pThis->pHostDrvAudio, pStreamEx->pBackend, &pStreamEx->Out.pbPreBuf[off],
cbToWrite, &cbPreBufWritten);
AssertRCBreak(rc);
if (!cbPreBufWritten)
if ( RT_FAILURE(rc)
|| !cbPreBufWritten)
break;
AssertStmt(cbPreBufWritten <= cbToWrite, cbPreBufWritten = cbToWrite);
off = (off + cbPreBufWritten) % cbAlloc;

View file

@ -154,6 +154,10 @@ typedef struct DRVHOSTAUDIOWASCACHEDEV
/** Support for AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY: -1=unknown, 0=no, 1=yes. */
int8_t fSupportsSrcDefaultQuality;
#endif
/** Flag indicating whether this device is considered as being 'stale'
* (non-working / outdated interface / whatever) and can be removed
* from the cache (if enabled). */
bool fStale;
/** List of cached configurations (DRVHOSTAUDIOWASCACHEDEVCFG). */
RTLISTANCHOR ConfigList;
/** The device ID length in RTUTF16 units. */
@ -276,10 +280,10 @@ typedef struct DRVHOSTAUDIOWAS
/** Semaphore for signalling that cache purge is done and that the destructor
* can do cleanups. */
RTSEMEVENTMULTI hEvtCachePurge;
/** Total number of device config entire for capturing.
/** Total number of device config entries for capturing.
* This includes in-use ones. */
uint32_t volatile cCacheEntriesIn;
/** Total number of device config entire for playback.
/** Total number of device config entries for playback.
* This includes in-use ones. */
uint32_t volatile cCacheEntriesOut;
@ -577,7 +581,7 @@ public:
* of a device role, so we try avoiding that by only caring about eMultimedia.
*
* See @bugref{10844} */
&& (enmRole == eMultimedia)
&& enmRole == eMultimedia
)
{
pIEnumerator = m_pDrvWas->pIEnumerator;
@ -1158,6 +1162,7 @@ static int drvHostAudioWasCacheLookupOrCreateConfig(PDRVHOSTAUDIOWAS pThis, PDRV
PCPDMAUDIOSTREAMCFG pCfgReq, bool fUseCache, bool fOnWorker,
PDRVHOSTAUDIOWASCACHEDEVCFG *ppDevCfg)
{
Assert(!pDevEntry->fStale);
PDRVHOSTAUDIOWASCACHEDEVCFG pDevCfg;
/*
@ -1234,6 +1239,40 @@ static int drvHostAudioWasCacheLookupOrCreateConfig(PDRVHOSTAUDIOWAS pThis, PDRV
}
/**
* Invalidates device cache entry configurations.
*
* @param pThis The WASAPI host audio driver instance data.
* @param pDevEntry The device entry to invalidate.
*/
static void drvHostAudioWasCacheInvalidateDevEntryConfig(PDRVHOSTAUDIOWAS pThis, PDRVHOSTAUDIOWASCACHEDEV pDevEntry)
{
RT_NOREF(pThis);
LogRelFunc(("Invalidating cache entry configurations: %p - '%ls'\n", pDevEntry, pDevEntry->wszDevId));
PDRVHOSTAUDIOWASCACHEDEVCFG pDevCfg, pDevCfgNext;
RTListForEachSafe(&pDevEntry->ConfigList, pDevCfg, pDevCfgNext, DRVHOSTAUDIOWASCACHEDEVCFG, ListEntry)
{
if (pDevCfg->pIAudioClient)
{
pDevCfg->pIAudioClient->Reset();
pDevCfg->pIAudioClient->Release();
pDevCfg->pIAudioClient = NULL;
}
if (pDevCfg->pIAudioRenderClient)
{
pDevCfg->pIAudioRenderClient->Release();
pDevCfg->pIAudioRenderClient = NULL;
}
pDevCfg->rcSetup = VERR_AUDIO_STREAM_INIT_IN_PROGRESS;
}
}
/**
* Looks up the given device + config combo in the cache, creating a new entry
* if missing.
@ -1256,13 +1295,12 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
{
*ppDevCfg = NULL;
LogRel2(("WasAPI: Looking up or creating cache entry (caching is set to %s, iface %p)\n",
pThis->fCacheEnabled ? "enabled" : "disabled", pIDevice));
LogRel(("WasAPI: Looking up or creating cache entry (caching is set to %s, iface %p, %s init)\n",
pThis->fCacheEnabled ? "enabled" : "disabled", pIDevice, fOnWorker ? "on worker" : "async"));
/*
* Get the device ID so we can perform the lookup.
*/
int rc = VERR_AUDIO_STREAM_COULD_NOT_CREATE;
LPWSTR pwszDevId = NULL;
HRESULT hrc = pIDevice->GetId(&pwszDevId);
if (SUCCEEDED(hrc))
@ -1295,13 +1333,12 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
{
LogRel2(("WasAPI: Checking for cached device '%ls' ...\n", pwszDevId));
#define DEVICE_STALE_OR_INVALID_BREAK(a_LogRel2What) \
{ \
#define DEVICE_STALE_OR_INVALID(a_LogRel2What) \
do { \
LogRel2(a_LogRel2What); \
LogRel(("WasAPI: Stale or invalid audio interface '%ls' detected!\n", pDevEntry->wszDevId)); \
rc = VERR_AUDIO_STREAM_NOT_READY; \
break; \
}
pDevEntry->fStale = true; \
} while (0)
/*
* The cache has two levels, so first the device entry.
*/
@ -1311,36 +1348,47 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
{
if ( pDevEntry->cwcDevId == cwcDevId
&& pDevEntry->enmDir == pCfgReq->enmDir
&& RTUtf16Cmp(pDevEntry->wszDevId, pwszDevId) == 0)
&& !pDevEntry->fStale
&& memcmp(pDevEntry->wszDevId, pwszDevId, cwcDevId * sizeof(RTUTF16)) == 0)
{
/*
* Cache hit.
* First we need to check if the cached device interface is in a working (active) shape.
*
* First we need to check if the device interface we want to look up
* actually matches the one we have in the cache entry. If it doesn't,
* mark it as stale and continue looking. (We'll probably end up adding a
* new device entry to the cache with the new interface below.)
*
* This is needed when switching audio interfaces and the device interface
* becomes invalid via AUDCLNT_E_DEVICE_INVALIDATED. See @bugref{10503}.
*/
AssertPtrBreakStmt(pDevEntry->pIDevice, rc = VERR_AUDIO_STREAM_NOT_READY); /* Paranoia. */
if (pDevEntry->pIDevice != pIDevice)
DEVICE_STALE_OR_INVALID(("WasAPI: Cache hit for device '%ls': Stale interface detected (new: %p, old: %p)\n",
pDevEntry->wszDevId, pIDevice, pDevEntry->pIDevice));
else
{
/*
* Second, we need to check if the cached device interface is in a
* working (active) shape.
*/
#if 0 /* However we've already checked this above, outside the loop and the pDevEntry->pIDevice == pIDevice! */
hrc = pDevEntry->pIDevice->GetState(&dwState);
if (SUCCEEDED(hrc))
{
if (dwState != DEVICE_STATE_ACTIVE)
DEVICE_STALE_OR_INVALID_BREAK(("WasAPI: Cache hit for device '%ls': Is in non-active state (state is %s)\n",
DEVICE_STALE_OR_INVALID(("WasAPI: Cache hit for device '%ls': Is in non-active state (state is %s)\n",
pDevEntry->wszDevId, drvHostAudioWasMMDeviceStateToString(dwState)));
}
else
DEVICE_STALE_OR_INVALID_BREAK(("WasAPI: Cache hit for device '%ls': Unable to retrieve state (hr=%#x)\n",
DEVICE_STALE_OR_INVALID(("WasAPI: Cache hit for device '%ls': Unable to retrieve state (hr=%#x)\n",
pDevEntry->wszDevId, hrc));
/*
* Next we now need to also check if the device interface we want to look up
* actually matches the one we have in the cache entry.
*
* If it doesn't, bail out and add a new device entry to the cache with the new interface below then.
*
* This is needed when switching audio interfaces and the device interface becomes invalid via
* AUDCLNT_E_DEVICE_INVALIDATED. See @bugref{10503}
*/
if (pDevEntry->pIDevice != pIDevice)
DEVICE_STALE_OR_INVALID_BREAK(("WasAPI: Cache hit for device '%ls': Stale interface detected (new: %p, old: %p)\n",
pDevEntry->wszDevId, pIDevice, pDevEntry->pIDevice));
#endif
}
LogRelFunc(("WasAPI: fOnWorker=%RTbool, fStaleDevice=%RTbool\n", fOnWorker, pDevEntry->fStale));
if (!pDevEntry->fStale)
{
LogRel2(("WasAPI: Cache hit for device '%ls' (iface %p)\n", pwszDevId, pIDevice));
CoTaskMemFree(pwszDevId);
@ -1350,32 +1398,17 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
true /* fUseCache */, fOnWorker, ppDevCfg);
}
}
}
RTCritSectLeave(&pThis->CritSectCache);
if (!pDevEntry)
LogRel2(("WasAPI: Cache miss for device '%ls' (iface %p)\n", pwszDevId, pIDevice));
#undef DEVICE_STALE_OR_INVALID_BREAK
#undef DEVICE_STALE_OR_INVALID
}
/*
* If we got a stale or somehow other invalid cache entry, remove it first.
*/
if ( pThis->fCacheEnabled
&& pDevEntry /* Cache hit? */
&& rc == VERR_AUDIO_STREAM_NOT_READY)
{
LogRel2(("WasAPI: Removing stale device '%ls' from cache (iface %p)\n", pDevEntry->wszDevId, pDevEntry->pIDevice));
RTCritSectEnter(&pThis->CritSectCache);
RTListNodeRemove(&pDevEntry->ListEntry);
RTCritSectLeave(&pThis->CritSectCache);
drvHostAudioWasCacheDestroyDevEntry(pThis, pDevEntry);
pDevEntry = NULL;
rc = VINF_SUCCESS;
}
/* Note: An active device marked as being stale will be removed from the cache
after the device switch has been completed. */
/*
* Device not in the cache (anymore), (re-)add it.
@ -1411,11 +1444,13 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
RTListForEach(&pThis->CacheHead, pDevEntry2, DRVHOSTAUDIOWASCACHEDEV, ListEntry)
{
if ( pDevEntry2->cwcDevId == cwcDevId
&& !pDevEntry->fStale
/* Note: We have to compare the device interface here as well, as a cached device entry might
* have a stale audio interface for the same device. In such a case a new device entry will be created below. */
have a stale audio interface for the same device. In such a case a new device entry will be created below.
Update: This predates the fStale flag and is just kept for safety. */
&& pDevEntry2->pIDevice == pIDevice
&& pDevEntry2->enmDir == pCfgReq->enmDir
&& RTUtf16Cmp(pDevEntry2->wszDevId, pDevEntry->wszDevId) == 0)
&& memcmp(pDevEntry2->wszDevId, pDevEntry->wszDevId, cwcDevId * sizeof(RTUTF16)) == 0)
{
pIDevice->Release();
RTMemFree(pDevEntry);
@ -1440,7 +1475,7 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
}
else
LogRelMax(64, ("WasAPI: GetId failed (lookup): %Rhrc\n", hrc));
return rc;
return VERR_AUDIO_STREAM_COULD_NOT_CREATE;
}
@ -2000,6 +2035,17 @@ static void drvHostAudioWasCompleteStreamDevSwitch(PDRVHOSTAUDIOWAS pThis, PDRVH
/* Put the old config back into the cache. */
drvHostAudioWasCachePutBack(pThis, pDevCfgOld);
AssertPtr(pDevCfgOld->pDevEntry);
if (pDevCfgOld->pDevEntry->fStale)
{
LogRelFunc(("Removing stale device from cache\n"));
RTListNodeRemove(&pDevCfgOld->pDevEntry->ListEntry);
drvHostAudioWasCacheInvalidateDevEntryConfig(pThis, pDevCfgOld->pDevEntry);
drvHostAudioWasCacheDestroyDevEntry(pThis, pDevCfgOld->pDevEntry);
pDevCfgOld = NULL; /* Got invalid due to drvHostAudioWasCacheDestroyDevEntry() above. */
}
LogFlowFunc(("returns with '%s' state: %s\n", pStreamWas->Cfg.szName, drvHostWasStreamStatusString(pStreamWas) ));
}
@ -2041,6 +2087,7 @@ static DECLCALLBACK(void) drvHostAudioWasHA_DoOnWorkerThread(PPDMIHOSTAUDIO pInt
switch (uUser)
{
case DRVHOSTAUDIOWAS_DO_PURGE_CACHE:
LogFlowFunc(("DRVHOSTAUDIOWAS_DO_PURGE_CACHE\n"));
Assert(pStream == NULL);
Assert(pvUser == NULL);
Assert(pThis->fCacheEnabled);
@ -2048,6 +2095,7 @@ static DECLCALLBACK(void) drvHostAudioWasHA_DoOnWorkerThread(PPDMIHOSTAUDIO pInt
break;
case DRVHOSTAUDIOWAS_DO_PRUNE_CACHE:
LogFlowFunc(("DRVHOSTAUDIOWAS_DO_PRUNE_CACHE\n"));
Assert(pStream == NULL);
Assert(pvUser == NULL);
Assert(pThis->fCacheEnabled);
@ -2055,6 +2103,7 @@ static DECLCALLBACK(void) drvHostAudioWasHA_DoOnWorkerThread(PPDMIHOSTAUDIO pInt
break;
case DRVHOSTAUDIOWAS_DO_STREAM_DEV_SWITCH:
LogFlowFunc(("DRVHOSTAUDIOWAS_DO_STREAM_DEV_SWITCH\n"));
AssertPtr(pStream);
AssertPtr(pvUser);
drvHostAudioWasDoStreamDevSwitch(pThis, (PDRVHOSTAUDIOWASSTREAM)pStream, (PDRVHOSTAUDIOWASCACHEDEVCFG)pvUser);

View file

@ -1513,7 +1513,7 @@ init_bios_area: ; 0xc0a27 LB 0x3e
mov word [es:bx+00087h], 0f960h ; 26 c7 87 87 00 60 f9 ; 0xc0a44 vgabios.c:234
mov byte [es:bx+00089h], 051h ; 26 c6 87 89 00 51 ; 0xc0a4b vgabios.c:238
mov byte [es:bx+065h], 009h ; 26 c6 47 65 09 ; 0xc0a51 vgabios.c:240
mov word [es:bx+000a8h], 0554dh ; 26 c7 87 a8 00 4d 55 ; 0xc0a56 vgabios.c:242
mov word [es:bx+000a8h], 0554eh ; 26 c7 87 a8 00 4e 55 ; 0xc0a56 vgabios.c:242
mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5d
pop bp ; 5d ; 0xc0a62 vgabios.c:243
pop bx ; 5b ; 0xc0a63
@ -2002,7 +2002,7 @@ vga_read_char_attr: ; 0xc0dd6 LB 0x130
mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc0e40 vgabios.c:557
xor bh, bh ; 30 ff ; 0xc0e43
sal bx, 003h ; c1 e3 03 ; 0xc0e45
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc0e48
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc0e48
jne short 00e7fh ; 75 30 ; 0xc0e4d
mov ax, di ; 89 f8 ; 0xc0e4f vgabios.c:559
mul word [bp-014h] ; f7 66 ec ; 0xc0e51
@ -2020,13 +2020,13 @@ vga_read_char_attr: ; 0xc0dd6 LB 0x130
add di, dx ; 01 d7 ; 0xc0e6b
add di, di ; 01 ff ; 0xc0e6d
add di, cx ; 01 cf ; 0xc0e6f
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc0e71 vgabios.c:55
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc0e71 vgabios.c:55
mov ax, word [es:di] ; 26 8b 05 ; 0xc0e75
push SS ; 16 ; 0xc0e78 vgabios.c:58
pop ES ; 07 ; 0xc0e79
mov word [es:si], ax ; 26 89 04 ; 0xc0e7a
jmp short 00dffh ; eb 80 ; 0xc0e7d vgabios.c:561
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc0e7f vgabios.c:562
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc0e7f vgabios.c:562
cmp bl, 005h ; 80 fb 05 ; 0xc0e83
je short 00ed6h ; 74 4e ; 0xc0e86
cmp bl, 002h ; 80 fb 02 ; 0xc0e88
@ -2129,18 +2129,18 @@ vga_get_font_info: ; 0xc0f16 LB 0x83
retn 00002h ; c2 02 00 ; 0xc0f6f
mov bx, 0010ch ; bb 0c 01 ; 0xc0f72 vgabios.c:67
jmp short 00f30h ; eb b9 ; 0xc0f75
mov dx, 05d69h ; ba 69 5d ; 0xc0f77 vgabios.c:601
mov dx, 05d6ah ; ba 6a 5d ; 0xc0f77 vgabios.c:601
mov ax, ds ; 8c d8 ; 0xc0f7a
jmp short 00f3bh ; eb bd ; 0xc0f7c vgabios.c:602
mov dx, 05569h ; ba 69 55 ; 0xc0f7e vgabios.c:604
mov dx, 0556ah ; ba 6a 55 ; 0xc0f7e vgabios.c:604
jmp short 00f7ah ; eb f7 ; 0xc0f81
mov dx, 05969h ; ba 69 59 ; 0xc0f83 vgabios.c:607
mov dx, 0596ah ; ba 6a 59 ; 0xc0f83 vgabios.c:607
jmp short 00f7ah ; eb f2 ; 0xc0f86
mov dx, 07b69h ; ba 69 7b ; 0xc0f88 vgabios.c:610
mov dx, 07b6ah ; ba 6a 7b ; 0xc0f88 vgabios.c:610
jmp short 00f7ah ; eb ed ; 0xc0f8b
mov dx, 06b69h ; ba 69 6b ; 0xc0f8d vgabios.c:613
mov dx, 06b6ah ; ba 6a 6b ; 0xc0f8d vgabios.c:613
jmp short 00f7ah ; eb e8 ; 0xc0f90
mov dx, 07c96h ; ba 96 7c ; 0xc0f92 vgabios.c:616
mov dx, 07c97h ; ba 97 7c ; 0xc0f92 vgabios.c:616
jmp short 00f7ah ; eb e3 ; 0xc0f95
jmp short 00f6ch ; eb d3 ; 0xc0f97 vgabios.c:622
; disGetNextSymbol 0xc0f99 LB 0x3599 -> off=0x0 cb=0000000000000166 uValue=00000000000c0f99 'vga_read_pixel'
@ -2166,10 +2166,10 @@ vga_read_pixel: ; 0xc0f99 LB 0x166
mov bl, al ; 88 c3 ; 0xc0fc1 vgabios.c:645
xor bh, bh ; 30 ff ; 0xc0fc3
sal bx, 003h ; c1 e3 03 ; 0xc0fc5
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc0fc8
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc0fc8
jne short 00fd2h ; 75 03 ; 0xc0fcd
jmp near 010f8h ; e9 26 01 ; 0xc0fcf vgabios.c:646
mov ch, byte [bx+047adh] ; 8a af ad 47 ; 0xc0fd2 vgabios.c:649
mov ch, byte [bx+047aeh] ; 8a af ae 47 ; 0xc0fd2 vgabios.c:649
cmp ch, 003h ; 80 fd 03 ; 0xc0fd6
jc short 00feah ; 72 0f ; 0xc0fd9
jbe short 00ff2h ; 76 15 ; 0xc0fdb
@ -2225,7 +2225,7 @@ vga_read_pixel: ; 0xc0f99 LB 0x166
inc byte [bp-006h] ; fe 46 fa ; 0xc1058 vgabios.c:661
jmp short 0102ch ; eb cf ; 0xc105b
jmp near 010f0h ; e9 90 00 ; 0xc105d
mov cl, byte [bx+047aeh] ; 8a 8f ae 47 ; 0xc1060 vgabios.c:664
mov cl, byte [bx+047afh] ; 8a 8f af 47 ; 0xc1060 vgabios.c:664
xor ch, ch ; 30 ed ; 0xc1064
mov bx, strict word 00004h ; bb 04 00 ; 0xc1066
sub bx, cx ; 29 cb ; 0xc1069
@ -2246,7 +2246,7 @@ vga_read_pixel: ; 0xc0f99 LB 0x166
mov bl, ah ; 88 e3 ; 0xc108c vgabios.c:668
xor bh, bh ; 30 ff ; 0xc108e
sal bx, 003h ; c1 e3 03 ; 0xc1090
cmp byte [bx+047aeh], 002h ; 80 bf ae 47 02 ; 0xc1093
cmp byte [bx+047afh], 002h ; 80 bf af 47 02 ; 0xc1093
jne short 010b5h ; 75 1b ; 0xc1098
mov cx, si ; 89 f1 ; 0xc109a vgabios.c:669
xor ch, ch ; 30 ed ; 0xc109c
@ -2610,7 +2610,7 @@ biosfn_set_active_page: ; 0xc1322 LB 0xd8
xor bh, bh ; 30 ff ; 0xc135b
mov si, bx ; 89 de ; 0xc135d
sal si, 003h ; c1 e6 03 ; 0xc135f
cmp byte [si+047ach], 000h ; 80 bc ac 47 00 ; 0xc1362
cmp byte [si+047adh], 000h ; 80 bc ad 47 00 ; 0xc1362
jne short 013a8h ; 75 3f ; 0xc1367
mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1369 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc136c
@ -2637,11 +2637,11 @@ biosfn_set_active_page: ; 0xc1322 LB 0xd8
lea ax, [di+001h] ; 8d 45 01 ; 0xc13a0
mul word [bp-00ch] ; f7 66 f4 ; 0xc13a3
jmp short 013b7h ; eb 0f ; 0xc13a6 vgabios.c:860
mov bl, byte [bx+0482bh] ; 8a 9f 2b 48 ; 0xc13a8 vgabios.c:862
mov bl, byte [bx+0482ch] ; 8a 9f 2c 48 ; 0xc13a8 vgabios.c:862
sal bx, 006h ; c1 e3 06 ; 0xc13ac
mov al, cl ; 88 c8 ; 0xc13af
xor ah, ah ; 30 e4 ; 0xc13b1
mul word [bx+04842h] ; f7 a7 42 48 ; 0xc13b3
mul word [bx+04843h] ; f7 a7 43 48 ; 0xc13b3
mov bx, ax ; 89 c3 ; 0xc13b7
mov si, strict word 00063h ; be 63 00 ; 0xc13b9 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc13bc
@ -2686,7 +2686,7 @@ find_vpti: ; 0xc13fa LB 0x45
xor bh, bh ; 30 ff ; 0xc1401
mov si, bx ; 89 de ; 0xc1403
sal si, 003h ; c1 e6 03 ; 0xc1405
cmp byte [si+047ach], 000h ; 80 bc ac 47 00 ; 0xc1408
cmp byte [si+047adh], 000h ; 80 bc ad 47 00 ; 0xc1408
jne short 01435h ; 75 26 ; 0xc140d
mov si, 00089h ; be 89 00 ; 0xc140f vgabios.c:47
mov ax, strict word 00040h ; b8 40 00 ; 0xc1412
@ -2694,16 +2694,16 @@ find_vpti: ; 0xc13fa LB 0x45
mov al, byte [es:si] ; 26 8a 04 ; 0xc1417
test AL, strict byte 010h ; a8 10 ; 0xc141a vgabios.c:923
je short 01424h ; 74 06 ; 0xc141c
mov al, byte [bx+07df2h] ; 8a 87 f2 7d ; 0xc141e vgabios.c:924
mov al, byte [bx+07df3h] ; 8a 87 f3 7d ; 0xc141e vgabios.c:924
jmp short 01432h ; eb 0e ; 0xc1422 vgabios.c:925
test AL, strict byte 080h ; a8 80 ; 0xc1424
je short 0142eh ; 74 06 ; 0xc1426
mov al, byte [bx+07de2h] ; 8a 87 e2 7d ; 0xc1428 vgabios.c:926
mov al, byte [bx+07de3h] ; 8a 87 e3 7d ; 0xc1428 vgabios.c:926
jmp short 01432h ; eb 04 ; 0xc142c vgabios.c:927
mov al, byte [bx+07deah] ; 8a 87 ea 7d ; 0xc142e vgabios.c:928
mov al, byte [bx+07debh] ; 8a 87 eb 7d ; 0xc142e vgabios.c:928
cbw ; 98 ; 0xc1432
jmp short 0143bh ; eb 06 ; 0xc1433 vgabios.c:929
mov al, byte [bx+0482bh] ; 8a 87 2b 48 ; 0xc1435 vgabios.c:930
mov al, byte [bx+0482ch] ; 8a 87 2c 48 ; 0xc1435 vgabios.c:930
xor ah, ah ; 30 e4 ; 0xc1439
pop bp ; 5d ; 0xc143b vgabios.c:933
pop si ; 5e ; 0xc143c
@ -2765,13 +2765,13 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
jne short 01501h ; 75 46 ; 0xc14b9
mov di, cx ; 89 cf ; 0xc14bb vgabios.c:999
sal di, 003h ; c1 e7 03 ; 0xc14bd
mov al, byte [di+047b1h] ; 8a 85 b1 47 ; 0xc14c0
mov al, byte [di+047b2h] ; 8a 85 b2 47 ; 0xc14c0
mov dx, 003c6h ; ba c6 03 ; 0xc14c4
out DX, AL ; ee ; 0xc14c7
xor al, al ; 30 c0 ; 0xc14c8 vgabios.c:1002
mov dx, 003c8h ; ba c8 03 ; 0xc14ca
out DX, AL ; ee ; 0xc14cd
mov cl, byte [di+047b2h] ; 8a 8d b2 47 ; 0xc14ce vgabios.c:1005
mov cl, byte [di+047b3h] ; 8a 8d b3 47 ; 0xc14ce vgabios.c:1005
cmp cl, 001h ; 80 f9 01 ; 0xc14d2
jc short 014e8h ; 72 11 ; 0xc14d5
jbe short 014f3h ; 76 1a ; 0xc14d7
@ -2783,24 +2783,24 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
jmp near 0190ah ; e9 22 04 ; 0xc14e5
test cl, cl ; 84 c9 ; 0xc14e8
jne short 01509h ; 75 1d ; 0xc14ea
mov word [bp-014h], 04fbfh ; c7 46 ec bf 4f ; 0xc14ec vgabios.c:1007
mov word [bp-014h], 04fc0h ; c7 46 ec c0 4f ; 0xc14ec vgabios.c:1007
jmp short 01509h ; eb 16 ; 0xc14f1 vgabios.c:1008
mov word [bp-014h], 0507fh ; c7 46 ec 7f 50 ; 0xc14f3 vgabios.c:1010
mov word [bp-014h], 05080h ; c7 46 ec 80 50 ; 0xc14f3 vgabios.c:1010
jmp short 01509h ; eb 0f ; 0xc14f8 vgabios.c:1011
mov word [bp-014h], 0513fh ; c7 46 ec 3f 51 ; 0xc14fa vgabios.c:1013
mov word [bp-014h], 05140h ; c7 46 ec 40 51 ; 0xc14fa vgabios.c:1013
jmp short 01509h ; eb 08 ; 0xc14ff vgabios.c:1014
jmp near 01578h ; e9 74 00 ; 0xc1501
mov word [bp-014h], 051ffh ; c7 46 ec ff 51 ; 0xc1504 vgabios.c:1016
mov word [bp-014h], 05200h ; c7 46 ec 00 52 ; 0xc1504 vgabios.c:1016
mov al, byte [bp-012h] ; 8a 46 ee ; 0xc1509 vgabios.c:1020
xor ah, ah ; 30 e4 ; 0xc150c
mov di, ax ; 89 c7 ; 0xc150e
sal di, 003h ; c1 e7 03 ; 0xc1510
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc1513
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc1513
jne short 01529h ; 75 0f ; 0xc1518
mov es, [bp-01eh] ; 8e 46 e2 ; 0xc151a vgabios.c:1022
cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc151d
jne short 01529h ; 75 05 ; 0xc1522
mov word [bp-014h], 0507fh ; c7 46 ec 7f 50 ; 0xc1524 vgabios.c:1023
mov word [bp-014h], 05080h ; c7 46 ec 80 50 ; 0xc1524 vgabios.c:1023
xor cx, cx ; 31 c9 ; 0xc1529 vgabios.c:1026
jmp short 0153ch ; eb 0f ; 0xc152b
xor al, al ; 30 c0 ; 0xc152d vgabios.c:1033
@ -2815,9 +2815,9 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
xor ah, ah ; 30 e4 ; 0xc153f
mov di, ax ; 89 c7 ; 0xc1541
sal di, 003h ; c1 e7 03 ; 0xc1543
mov al, byte [di+047b2h] ; 8a 85 b2 47 ; 0xc1546
mov al, byte [di+047b3h] ; 8a 85 b3 47 ; 0xc1546
mov di, ax ; 89 c7 ; 0xc154a
mov al, byte [di+0483bh] ; 8a 85 3b 48 ; 0xc154c
mov al, byte [di+0483ch] ; 8a 85 3c 48 ; 0xc154c
cmp cx, ax ; 39 c1 ; 0xc1550
jnbe short 0152dh ; 77 d9 ; 0xc1552
imul di, cx, strict byte 00003h ; 6b f9 03 ; 0xc1554
@ -2928,7 +2928,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
xor ah, ah ; 30 e4 ; 0xc1647
mov di, ax ; 89 c7 ; 0xc1649
sal di, 003h ; c1 e7 03 ; 0xc164b
cmp byte [di+047adh], 001h ; 80 bd ad 47 01 ; 0xc164e
cmp byte [di+047aeh], 001h ; 80 bd ae 47 01 ; 0xc164e
jne short 0165ah ; 75 05 ; 0xc1653
mov cx, 003b4h ; b9 b4 03 ; 0xc1655
jmp short 0165dh ; eb 03 ; 0xc1658
@ -2970,9 +2970,9 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
xor ah, ah ; 30 e4 ; 0xc16a8
mov di, ax ; 89 c7 ; 0xc16aa
sal di, 003h ; c1 e7 03 ; 0xc16ac
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc16af
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc16af
jne short 016c8h ; 75 12 ; 0xc16b4
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc16b6 vgabios.c:1102
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc16b6 vgabios.c:1102
mov cx, 04000h ; b9 00 40 ; 0xc16ba
mov ax, 00720h ; b8 20 07 ; 0xc16bd
xor di, di ; 31 ff ; 0xc16c0
@ -2981,7 +2981,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
jmp short 01704h ; eb 3c ; 0xc16c6 vgabios.c:1104
cmp byte [bp-010h], 00dh ; 80 7e f0 0d ; 0xc16c8 vgabios.c:1106
jnc short 016dfh ; 73 11 ; 0xc16cc
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc16ce vgabios.c:1108
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc16ce vgabios.c:1108
mov cx, 04000h ; b9 00 40 ; 0xc16d2
xor al, al ; 30 c0 ; 0xc16d5
xor di, di ; 31 ff ; 0xc16d7
@ -2998,7 +2998,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
mov word [bp-020h], ax ; 89 46 e0 ; 0xc16eb
mov AL, strict byte 00fh ; b0 0f ; 0xc16ee vgabios.c:1114
out DX, AL ; ee ; 0xc16f0
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc16f1 vgabios.c:1115
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc16f1 vgabios.c:1115
mov cx, 08000h ; b9 00 80 ; 0xc16f5
xor ax, ax ; 31 c0 ; 0xc16f8
xor di, di ; 31 ff ; 0xc16fa
@ -3049,7 +3049,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
cmp AL, strict byte 007h ; 3c 07 ; 0xc1779
jnbe short 017a2h ; 77 25 ; 0xc177b
mov di, ax ; 89 c7 ; 0xc177d vgabios.c:1136
mov al, byte [di+07ddah] ; 8a 85 da 7d ; 0xc177f
mov al, byte [di+07ddbh] ; 8a 85 db 7d ; 0xc177f
mov di, strict word 00065h ; bf 65 00 ; 0xc1783 vgabios.c:52
mov byte [es:di], al ; 26 88 05 ; 0xc1786
cmp byte [bp-010h], 006h ; 80 7e f0 06 ; 0xc1789 vgabios.c:1137
@ -3065,7 +3065,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
xor ah, ah ; 30 e4 ; 0xc17a5
mov di, ax ; 89 c7 ; 0xc17a7
sal di, 003h ; c1 e7 03 ; 0xc17a9
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc17ac
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc17ac
jne short 017bch ; 75 09 ; 0xc17b1
mov dx, strict word 00007h ; ba 07 00 ; 0xc17b3 vgabios.c:1143
mov ax, strict word 00006h ; b8 06 00 ; 0xc17b6
@ -3086,7 +3086,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
xor ah, ah ; 30 e4 ; 0xc17d9
mov di, ax ; 89 c7 ; 0xc17db
sal di, 003h ; c1 e7 03 ; 0xc17dd
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc17e0
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc17e0
jne short 01851h ; 75 6a ; 0xc17e5
mov es, [bp-018h] ; 8e 46 e8 ; 0xc17e7 vgabios.c:1157
mov di, word [es:bx+008h] ; 26 8b 7f 08 ; 0xc17ea
@ -3105,7 +3105,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
push strict byte 00000h ; 6a 00 ; 0xc1810
push strict byte 00000h ; 6a 00 ; 0xc1812
mov cx, 00100h ; b9 00 01 ; 0xc1814
mov bx, 05569h ; bb 69 55 ; 0xc1817
mov bx, 0556ah ; bb 6a 55 ; 0xc1817
mov dx, 0c000h ; ba 00 c0 ; 0xc181a
xor al, al ; 30 c0 ; 0xc181d
call 02e1ah ; e8 f8 15 ; 0xc181f
@ -3116,7 +3116,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
push strict byte 00000h ; 6a 00 ; 0xc1829
push strict byte 00000h ; 6a 00 ; 0xc182b
mov cx, 00100h ; b9 00 01 ; 0xc182d
mov bx, 05d69h ; bb 69 5d ; 0xc1830
mov bx, 05d6ah ; bb 6a 5d ; 0xc1830
mov dx, 0c000h ; ba 00 c0 ; 0xc1833
xor al, al ; 30 c0 ; 0xc1836
call 02e1ah ; e8 df 15 ; 0xc1838
@ -3124,7 +3124,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
jne short 01879h ; 75 38 ; 0xc183f
mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1841 vgabios.c:1166
xor bx, bx ; 31 db ; 0xc1844
mov dx, 07b69h ; ba 69 7b ; 0xc1846
mov dx, 07b6ah ; ba 6a 7b ; 0xc1846
mov ax, 0c000h ; b8 00 c0 ; 0xc1849
call 02da5h ; e8 56 15 ; 0xc184c
jmp short 01879h ; eb 28 ; 0xc184f vgabios.c:1167
@ -3135,13 +3135,13 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
push strict byte 00000h ; 6a 00 ; 0xc1859
push strict byte 00000h ; 6a 00 ; 0xc185b
mov cx, 00100h ; b9 00 01 ; 0xc185d
mov bx, 06b69h ; bb 69 6b ; 0xc1860
mov bx, 06b6ah ; bb 6a 6b ; 0xc1860
mov dx, 0c000h ; ba 00 c0 ; 0xc1863
xor al, al ; 30 c0 ; 0xc1866
call 02e1ah ; e8 af 15 ; 0xc1868
mov cx, strict word 00010h ; b9 10 00 ; 0xc186b vgabios.c:1170
xor bx, bx ; 31 db ; 0xc186e
mov dx, 07c96h ; ba 96 7c ; 0xc1870
mov dx, 07c97h ; ba 97 7c ; 0xc1870
mov ax, 0c000h ; b8 00 c0 ; 0xc1873
call 02da5h ; e8 2c 15 ; 0xc1876
cmp word [bp-01ch], strict byte 00000h ; 83 7e e4 00 ; 0xc1879 vgabios.c:1172
@ -3180,7 +3180,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
mov AL, strict byte 003h ; b0 03 ; 0xc18cf
mov AH, strict byte 011h ; b4 11 ; 0xc18d1
int 06dh ; cd 6d ; 0xc18d3
mov bx, 05969h ; bb 69 59 ; 0xc18d5 vgabios.c:1199
mov bx, 0596ah ; bb 6a 59 ; 0xc18d5 vgabios.c:1199
mov cx, ds ; 8c d9 ; 0xc18d8
mov ax, strict word 0001fh ; b8 1f 00 ; 0xc18da
call 009f0h ; e8 10 f1 ; 0xc18dd
@ -3192,14 +3192,14 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
je short 01900h ; 74 11 ; 0xc18ed
cmp AL, strict byte 008h ; 3c 08 ; 0xc18ef
jne short 0190ah ; 75 17 ; 0xc18f1
mov bx, 05569h ; bb 69 55 ; 0xc18f3 vgabios.c:1203
mov bx, 0556ah ; bb 6a 55 ; 0xc18f3 vgabios.c:1203
mov cx, ds ; 8c d9 ; 0xc18f6
mov ax, strict word 00043h ; b8 43 00 ; 0xc18f8
call 009f0h ; e8 f2 f0 ; 0xc18fb
jmp short 0190ah ; eb 0a ; 0xc18fe vgabios.c:1204
mov bx, 05d69h ; bb 69 5d ; 0xc1900 vgabios.c:1206
mov bx, 05d6ah ; bb 6a 5d ; 0xc1900 vgabios.c:1206
jmp short 018f6h ; eb f1 ; 0xc1903
mov bx, 06b69h ; bb 69 6b ; 0xc1905 vgabios.c:1209
mov bx, 06b6ah ; bb 6a 6b ; 0xc1905 vgabios.c:1209
jmp short 018f6h ; eb ec ; 0xc1908
lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc190a vgabios.c:1212
pop di ; 5f ; 0xc190d
@ -3676,7 +3676,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc1d0d
mul word [bp-016h] ; f7 66 ea ; 0xc1d10
mov cx, ax ; 89 c1 ; 0xc1d13
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc1d15
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc1d15
jne short 01d65h ; 75 49 ; 0xc1d1a
add ax, ax ; 01 c0 ; 0xc1d1c vgabios.c:1345
or AL, strict byte 0ffh ; 0c ff ; 0xc1d1e
@ -3701,7 +3701,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1d4e vgabios.c:1352
sal ax, 008h ; c1 e0 08 ; 0xc1d51
add ax, strict word 00020h ; 05 20 00 ; 0xc1d54
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1d57
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1d57
mov di, word [bp-020h] ; 8b 7e e0 ; 0xc1d5b
jcxz 01d62h ; e3 02 ; 0xc1d5e
rep stosw ; f3 ab ; 0xc1d60
@ -3742,7 +3742,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1dba
xor bh, bh ; 30 ff ; 0xc1dbd
sal bx, 003h ; c1 e3 03 ; 0xc1dbf
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1dc2
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1dc2
mov ax, si ; 89 f0 ; 0xc1dc6
jcxz 01dcch ; e3 02 ; 0xc1dc8
rep stosw ; f3 ab ; 0xc1dca
@ -3761,7 +3761,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1deb
xor bh, bh ; 30 ff ; 0xc1dee
sal bx, 003h ; c1 e3 03 ; 0xc1df0
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc1df3
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc1df3
mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1df7
mul word [bp-01eh] ; f7 66 e2 ; 0xc1dfa
add ax, word [bp-018h] ; 03 46 e8 ; 0xc1dfd
@ -3811,7 +3811,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e67
xor bh, bh ; 30 ff ; 0xc1e6a
sal bx, 003h ; c1 e3 03 ; 0xc1e6c
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1e6f
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1e6f
mov ax, si ; 89 f0 ; 0xc1e73
jcxz 01e79h ; e3 02 ; 0xc1e75
rep stosw ; f3 ab ; 0xc1e77
@ -3833,7 +3833,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e9e
xor bh, bh ; 30 ff ; 0xc1ea1
sal bx, 003h ; c1 e3 03 ; 0xc1ea3
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc1ea6
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc1ea6
mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1eaa
mul word [bp-01eh] ; f7 66 e2 ; 0xc1ead
add ax, cx ; 01 c8 ; 0xc1eb0
@ -3855,13 +3855,13 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
dec word [bp-01ch] ; ff 4e e4 ; 0xc1ed2 vgabios.c:1373
jmp near 01e21h ; e9 49 ff ; 0xc1ed5
mov si, word [bp-01ah] ; 8b 76 e6 ; 0xc1ed8 vgabios.c:1379
mov al, byte [si+0482bh] ; 8a 84 2b 48 ; 0xc1edb
mov al, byte [si+0482ch] ; 8a 84 2c 48 ; 0xc1edb
xor ah, ah ; 30 e4 ; 0xc1edf
mov si, ax ; 89 c6 ; 0xc1ee1
sal si, 006h ; c1 e6 06 ; 0xc1ee3
mov al, byte [si+04841h] ; 8a 84 41 48 ; 0xc1ee6
mov al, byte [si+04842h] ; 8a 84 42 48 ; 0xc1ee6
mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1eea
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc1eed vgabios.c:1380
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc1eed vgabios.c:1380
cmp AL, strict byte 003h ; 3c 03 ; 0xc1ef1
jc short 01f01h ; 72 0c ; 0xc1ef3
jbe short 01f08h ; 76 11 ; 0xc1ef5
@ -3907,7 +3907,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1f55
xor bh, bh ; 30 ff ; 0xc1f58
sal bx, 003h ; c1 e3 03 ; 0xc1f5a
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc1f5d
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc1f5d
mov cx, ax ; 89 c1 ; 0xc1f61
mov ax, dx ; 89 d0 ; 0xc1f63
xor di, di ; 31 ff ; 0xc1f65
@ -4015,7 +4015,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
jc short 020afh ; 72 4e ; 0xc205f
dec word [bp-01ch] ; ff 4e e4 ; 0xc2061 vgabios.c:1409
jmp short 01ff9h ; eb 93 ; 0xc2064
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2066 vgabios.c:1414
mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc2066 vgabios.c:1414
mov byte [bp-014h], al ; 88 46 ec ; 0xc206a
cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc206d vgabios.c:1415
jne short 020b2h ; 75 3f ; 0xc2071
@ -4039,7 +4039,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov cx, ax ; 89 c1 ; 0xc209e
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc20a0
xor ah, ah ; 30 e4 ; 0xc20a3
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc20a5
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc20a5
xor di, di ; 31 ff ; 0xc20a9
jcxz 020afh ; e3 02 ; 0xc20ab
rep stosb ; f3 aa ; 0xc20ad
@ -4165,7 +4165,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
sal cx, 003h ; c1 e1 03 ; 0xc21d8
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc21db
xor ah, ah ; 30 e4 ; 0xc21de
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc21e0
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc21e0
xor di, di ; 31 ff ; 0xc21e4
jcxz 021eah ; e3 02 ; 0xc21e6
rep stosb ; f3 aa ; 0xc21e8
@ -4392,7 +4392,7 @@ write_gfx_char_cga: ; 0xc23ee LB 0x112
mov bh, al ; 88 c7 ; 0xc23f4
mov ch, dl ; 88 d5 ; 0xc23f6
mov al, bl ; 88 d8 ; 0xc23f8
mov di, 05569h ; bf 69 55 ; 0xc23fa vgabios.c:1541
mov di, 0556ah ; bf 6a 55 ; 0xc23fa vgabios.c:1541
xor ah, ah ; 30 e4 ; 0xc23fd vgabios.c:1542
mov dl, byte [bp+00ah] ; 8a 56 0a ; 0xc23ff
xor dh, dh ; 30 f6 ; 0xc2402
@ -4509,7 +4509,7 @@ write_gfx_char_lin: ; 0xc2500 LB 0x9b
mov bh, al ; 88 c7 ; 0xc2506
mov ch, dl ; 88 d5 ; 0xc2508
mov al, cl ; 88 c8 ; 0xc250a
mov di, 05569h ; bf 69 55 ; 0xc250c vgabios.c:1605
mov di, 0556ah ; bf 6a 55 ; 0xc250c vgabios.c:1605
xor ah, ah ; 30 e4 ; 0xc250f vgabios.c:1606
mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2511
xor dh, dh ; 30 f6 ; 0xc2514
@ -4624,7 +4624,7 @@ biosfn_write_char_attr: ; 0xc259b LB 0x187
xor bh, bh ; 30 ff ; 0xc260c
mov di, bx ; 89 df ; 0xc260e
sal di, 003h ; c1 e7 03 ; 0xc2610
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc2613
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc2613
jne short 02663h ; 75 49 ; 0xc2618
mul dx ; f7 e2 ; 0xc261a vgabios.c:1648
add ax, ax ; 01 c0 ; 0xc261c
@ -4651,17 +4651,17 @@ biosfn_write_char_attr: ; 0xc259b LB 0x187
add bx, ax ; 01 c3 ; 0xc264c
mov word [bp-020h], bx ; 89 5e e0 ; 0xc264e
mov ax, word [bp-020h] ; 8b 46 e0 ; 0xc2651 vgabios.c:1651
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc2654
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc2654
mov cx, si ; 89 f1 ; 0xc2658
mov di, dx ; 89 d7 ; 0xc265a
jcxz 02660h ; e3 02 ; 0xc265c
rep stosw ; f3 ab ; 0xc265e
jmp near 0271bh ; e9 b8 00 ; 0xc2660 vgabios.c:1653
mov bl, byte [bx+0482bh] ; 8a 9f 2b 48 ; 0xc2663 vgabios.c:1656
mov bl, byte [bx+0482ch] ; 8a 9f 2c 48 ; 0xc2663 vgabios.c:1656
sal bx, 006h ; c1 e3 06 ; 0xc2667
mov al, byte [bx+04841h] ; 8a 87 41 48 ; 0xc266a
mov al, byte [bx+04842h] ; 8a 87 42 48 ; 0xc266a
mov byte [bp-012h], al ; 88 46 ee ; 0xc266e
mov al, byte [di+047aeh] ; 8a 85 ae 47 ; 0xc2671 vgabios.c:1657
mov al, byte [di+047afh] ; 8a 85 af 47 ; 0xc2671 vgabios.c:1657
mov byte [bp-014h], al ; 88 46 ec ; 0xc2675
dec si ; 4e ; 0xc2678 vgabios.c:1658
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2679
@ -4669,7 +4669,7 @@ biosfn_write_char_attr: ; 0xc259b LB 0x187
mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc267e vgabios.c:1660
xor bh, bh ; 30 ff ; 0xc2681
sal bx, 003h ; c1 e3 03 ; 0xc2683
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2686
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2686
cmp bl, 003h ; 80 fb 03 ; 0xc268a
jc short 0269eh ; 72 0f ; 0xc268d
jbe short 026a5h ; 76 14 ; 0xc268f
@ -4782,7 +4782,7 @@ biosfn_write_char_only: ; 0xc2722 LB 0x181
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc278f vgabios.c:1703
mov bx, ax ; 89 c3 ; 0xc2792
sal bx, 003h ; c1 e3 03 ; 0xc2794
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc2797
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc2797
jne short 027e0h ; 75 42 ; 0xc279c
mov ax, cx ; 89 c8 ; 0xc279e vgabios.c:1706
mul dx ; f7 e2 ; 0xc27a0
@ -4808,19 +4808,19 @@ biosfn_write_char_only: ; 0xc2722 LB 0x181
xor ah, ah ; 30 e4 ; 0xc27cb
mov di, ax ; 89 c7 ; 0xc27cd
sal di, 003h ; c1 e7 03 ; 0xc27cf
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc27d2 vgabios.c:50
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc27d2 vgabios.c:50
mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc27d6 vgabios.c:52
mov byte [es:bx], al ; 26 88 07 ; 0xc27d9
inc bx ; 43 ; 0xc27dc vgabios.c:1710
inc bx ; 43 ; 0xc27dd
jmp short 027c2h ; eb e2 ; 0xc27de vgabios.c:1711
mov di, ax ; 89 c7 ; 0xc27e0 vgabios.c:1716
mov al, byte [di+0482bh] ; 8a 85 2b 48 ; 0xc27e2
mov al, byte [di+0482ch] ; 8a 85 2c 48 ; 0xc27e2
mov di, ax ; 89 c7 ; 0xc27e6
sal di, 006h ; c1 e7 06 ; 0xc27e8
mov al, byte [di+04841h] ; 8a 85 41 48 ; 0xc27eb
mov al, byte [di+04842h] ; 8a 85 42 48 ; 0xc27eb
mov byte [bp-014h], al ; 88 46 ec ; 0xc27ef
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc27f2 vgabios.c:1717
mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc27f2 vgabios.c:1717
mov byte [bp-016h], al ; 88 46 ea ; 0xc27f6
dec si ; 4e ; 0xc27f9 vgabios.c:1718
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc27fa
@ -4828,7 +4828,7 @@ biosfn_write_char_only: ; 0xc2722 LB 0x181
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc27ff vgabios.c:1720
xor bh, bh ; 30 ff ; 0xc2802
sal bx, 003h ; c1 e3 03 ; 0xc2804
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2807
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2807
cmp bl, 003h ; 80 fb 03 ; 0xc280b
jc short 0281fh ; 72 0f ; 0xc280e
jbe short 02826h ; 76 14 ; 0xc2810
@ -4915,9 +4915,9 @@ biosfn_write_pixel: ; 0xc28a3 LB 0x173
mov bl, al ; 88 c3 ; 0xc28cb vgabios.c:1753
xor bh, bh ; 30 ff ; 0xc28cd
sal bx, 003h ; c1 e3 03 ; 0xc28cf
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc28d2
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc28d2
je short 028f1h ; 74 18 ; 0xc28d7
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc28d9 vgabios.c:1755
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc28d9 vgabios.c:1755
cmp AL, strict byte 003h ; 3c 03 ; 0xc28dd
jc short 028edh ; 72 0c ; 0xc28df
jbe short 028f7h ; 76 14 ; 0xc28e1
@ -4979,7 +4979,7 @@ biosfn_write_pixel: ; 0xc28a3 LB 0x173
mov ax, dx ; 89 d0 ; 0xc2968 vgabios.c:1775
shr ax, 1 ; d1 e8 ; 0xc296a
imul ax, ax, strict byte 00050h ; 6b c0 50 ; 0xc296c
cmp byte [bx+047aeh], 002h ; 80 bf ae 47 02 ; 0xc296f
cmp byte [bx+047afh], 002h ; 80 bf af 47 02 ; 0xc296f
jne short 0297eh ; 75 08 ; 0xc2974
mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2976 vgabios.c:1777
shr bx, 002h ; c1 eb 02 ; 0xc2979
@ -4997,7 +4997,7 @@ biosfn_write_pixel: ; 0xc28a3 LB 0x173
xor ah, ah ; 30 e4 ; 0xc2998
mov si, ax ; 89 c6 ; 0xc299a
sal si, 003h ; c1 e6 03 ; 0xc299c
cmp byte [si+047aeh], 002h ; 80 bc ae 47 02 ; 0xc299f
cmp byte [si+047afh], 002h ; 80 bc af 47 02 ; 0xc299f
jne short 029bfh ; 75 19 ; 0xc29a4
mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc29a6 vgabios.c:1787
and AL, strict byte 003h ; 24 03 ; 0xc29a9
@ -5119,7 +5119,7 @@ biosfn_write_teletype: ; 0xc2a16 LB 0x258
xor ah, ah ; 30 e4 ; 0xc2ac2
mov bx, ax ; 89 c3 ; 0xc2ac4
sal bx, 003h ; c1 e3 03 ; 0xc2ac6
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc2ac9
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc2ac9
jne short 02b12h ; 75 42 ; 0xc2ace
mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2ad0 vgabios.c:1865
mul word [bp-012h] ; f7 66 ee ; 0xc2ad3
@ -5139,22 +5139,22 @@ biosfn_write_teletype: ; 0xc2a16 LB 0x258
add ax, dx ; 01 d0 ; 0xc2af3
add ax, ax ; 01 c0 ; 0xc2af5
add si, ax ; 01 c6 ; 0xc2af7
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2af9 vgabios.c:50
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2af9 vgabios.c:50
mov byte [es:si], ch ; 26 88 2c ; 0xc2afd vgabios.c:52
cmp cl, 003h ; 80 f9 03 ; 0xc2b00 vgabios.c:1870
jne short 02b41h ; 75 3c ; 0xc2b03
inc si ; 46 ; 0xc2b05 vgabios.c:1871
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2b06 vgabios.c:50
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2b06 vgabios.c:50
mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2b0a
mov byte [es:si], al ; 26 88 04 ; 0xc2b0d
jmp short 02b41h ; eb 2f ; 0xc2b10 vgabios.c:1873
mov si, ax ; 89 c6 ; 0xc2b12 vgabios.c:1876
mov al, byte [si+0482bh] ; 8a 84 2b 48 ; 0xc2b14
mov al, byte [si+0482ch] ; 8a 84 2c 48 ; 0xc2b14
mov si, ax ; 89 c6 ; 0xc2b18
sal si, 006h ; c1 e6 06 ; 0xc2b1a
mov dl, byte [si+04841h] ; 8a 94 41 48 ; 0xc2b1d
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2b21 vgabios.c:1877
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2b25 vgabios.c:1878
mov dl, byte [si+04842h] ; 8a 94 42 48 ; 0xc2b1d
mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc2b21 vgabios.c:1877
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2b25 vgabios.c:1878
cmp bl, 003h ; 80 fb 03 ; 0xc2b29
jc short 02b3ch ; 72 0e ; 0xc2b2c
jbe short 02b43h ; 76 13 ; 0xc2b2e
@ -5231,7 +5231,7 @@ biosfn_write_teletype: ; 0xc2a16 LB 0x258
mov cl, byte [bp-010h] ; 8a 4e f0 ; 0xc2bdc
db 0feh, 0c9h
; dec cl ; fe c9 ; 0xc2bdf
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc2be1
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc2be1
jne short 02c32h ; 75 4a ; 0xc2be6
mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2be8 vgabios.c:1910
mul word [bp-012h] ; f7 66 ee ; 0xc2beb
@ -5253,7 +5253,7 @@ biosfn_write_teletype: ; 0xc2a16 LB 0x258
add ax, ax ; 01 c0 ; 0xc2c0e
add si, ax ; 01 c6 ; 0xc2c10
inc si ; 46 ; 0xc2c12 vgabios.c:1911
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2c13 vgabios.c:45
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2c13 vgabios.c:45
mov dl, byte [es:si] ; 26 8a 14 ; 0xc2c17
push strict byte 00001h ; 6a 01 ; 0xc2c1a vgabios.c:1912
mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2c1c
@ -5616,7 +5616,7 @@ set_gfx_font: ; 0xc2eaf LB 0x4d
mov DL, strict byte 002h ; b2 02 ; 0xc2ecf vgabios.c:2033
mov bl, dl ; 88 d3 ; 0xc2ed1 vgabios.c:2034
xor bh, bh ; 30 ff ; 0xc2ed3
mov al, byte [bx+07dfah] ; 8a 87 fa 7d ; 0xc2ed5
mov al, byte [bx+07dfbh] ; 8a 87 fb 7d ; 0xc2ed5
mov byte [bp+004h], al ; 88 46 04 ; 0xc2ed9
mov bx, 00085h ; bb 85 00 ; 0xc2edc vgabios.c:62
mov ax, strict word 00040h ; b8 40 00 ; 0xc2edf
@ -5662,7 +5662,7 @@ biosfn_load_gfx_8_14_chars: ; 0xc2f19 LB 0x22
mov al, bl ; 88 d8 ; 0xc2f25
mov cx, ax ; 89 c1 ; 0xc2f27
mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2f29
mov ax, 05d69h ; b8 69 5d ; 0xc2f2c
mov ax, 05d6ah ; b8 6a 5d ; 0xc2f2c
mov dx, ds ; 8c da ; 0xc2f2f
call 02eafh ; e8 7b ff ; 0xc2f31
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f34 vgabios.c:2054
@ -5683,7 +5683,7 @@ biosfn_load_gfx_8_8_dd_chars: ; 0xc2f3b LB 0x22
mov al, bl ; 88 d8 ; 0xc2f47
mov cx, ax ; 89 c1 ; 0xc2f49
mov bx, strict word 00008h ; bb 08 00 ; 0xc2f4b
mov ax, 05569h ; b8 69 55 ; 0xc2f4e
mov ax, 0556ah ; b8 6a 55 ; 0xc2f4e
mov dx, ds ; 8c da ; 0xc2f51
call 02eafh ; e8 59 ff ; 0xc2f53
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f56 vgabios.c:2058
@ -5704,7 +5704,7 @@ biosfn_load_gfx_8_16_chars: ; 0xc2f5d LB 0x22
mov al, bl ; 88 d8 ; 0xc2f69
mov cx, ax ; 89 c1 ; 0xc2f6b
mov bx, strict word 00010h ; bb 10 00 ; 0xc2f6d
mov ax, 06b69h ; b8 69 6b ; 0xc2f70
mov ax, 06b6ah ; b8 6a 6b ; 0xc2f70
mov dx, ds ; 8c da ; 0xc2f73
call 02eafh ; e8 37 ff ; 0xc2f75
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f78 vgabios.c:2062
@ -5843,7 +5843,7 @@ biosfn_read_state_info: ; 0xc305d LB 0x1ef
mov word [bp-00ah], ax ; 89 46 f6 ; 0xc307a vgabios.c:58
mov ax, ds ; 8c d8 ; 0xc307d vgabios.c:2150
mov es, dx ; 8e c2 ; 0xc307f vgabios.c:72
mov word [es:bx], 054ffh ; 26 c7 07 ff 54 ; 0xc3081
mov word [es:bx], 05500h ; 26 c7 07 00 55 ; 0xc3081
mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc3086
lea di, [bx+004h] ; 8d 7f 04 ; 0xc308a vgabios.c:2155
mov cx, strict word 0001eh ; b9 1e 00 ; 0xc308d
@ -6724,7 +6724,7 @@ find_vga_entry: ; 0xc3819 LB 0x28
mov bl, al ; 88 c3 ; 0xc382c
xor bh, bh ; 30 ff ; 0xc382e
sal bx, 003h ; c1 e3 03 ; 0xc3830
cmp dl, byte [bx+047abh] ; 3a 97 ab 47 ; 0xc3833
cmp dl, byte [bx+047ach] ; 3a 97 ac 47 ; 0xc3833
jne short 03826h ; 75 ed ; 0xc3837
mov ah, al ; 88 c4 ; 0xc3839
mov al, ah ; 88 e0 ; 0xc383b vgabios.c:2438
@ -6975,7 +6975,7 @@ int10_func: ; 0xc38d9 LB 0x49f
push strict byte 00000h ; 6a 00 ; 0xc3afc
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3afe
mov cx, 00100h ; b9 00 01 ; 0xc3b01
mov bx, 05d69h ; bb 69 5d ; 0xc3b04
mov bx, 05d6ah ; bb 6a 5d ; 0xc3b04
mov dx, 0c000h ; ba 00 c0 ; 0xc3b07
call 02e1ah ; e8 0d f3 ; 0xc3b0a
jmp short 03b2ch ; eb 1d ; 0xc3b0d
@ -6986,7 +6986,7 @@ int10_func: ; 0xc38d9 LB 0x49f
push strict byte 00000h ; 6a 00 ; 0xc3b17
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b19
mov cx, 00100h ; b9 00 01 ; 0xc3b1c
mov bx, 05569h ; bb 69 55 ; 0xc3b1f
mov bx, 0556ah ; bb 6a 55 ; 0xc3b1f
jmp short 03b07h ; eb e3 ; 0xc3b22
mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b24 vgabios.c:2629
xor ah, ah ; 30 e4 ; 0xc3b27
@ -6999,7 +6999,7 @@ int10_func: ; 0xc38d9 LB 0x49f
push strict byte 00000h ; 6a 00 ; 0xc3b37
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b39
mov cx, 00100h ; b9 00 01 ; 0xc3b3c
mov bx, 06b69h ; bb 69 6b ; 0xc3b3f
mov bx, 06b6ah ; bb 6a 6b ; 0xc3b3f
jmp short 03b07h ; eb c3 ; 0xc3b42
mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b44 vgabios.c:2636
mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3b47
@ -7523,7 +7523,7 @@ vbe_biosfn_return_controller_information: ; 0xc3f42 LB 0x12b
mov word [es:bx], 04556h ; 26 c7 07 56 45 ; 0xc3fad
mov word [es:bx+002h], 04153h ; 26 c7 47 02 53 41 ; 0xc3fb2 vbe.c:334
mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3fb8 vbe.c:338
mov word [es:bx+006h], 07dfeh ; 26 c7 47 06 fe 7d ; 0xc3fbe vbe.c:341
mov word [es:bx+006h], 07e00h ; 26 c7 47 06 00 7e ; 0xc3fbe vbe.c:341
mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3fc4
mov word [es:bx+00ah], strict word 00001h ; 26 c7 47 0a 01 00 ; 0xc3fc8 vbe.c:344
mov word [es:bx+00ch], strict word 00000h ; 26 c7 47 0c 00 00 ; 0xc3fce vbe.c:346
@ -7539,11 +7539,11 @@ vbe_biosfn_return_controller_information: ; 0xc3f42 LB 0x12b
cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3ff2 vbe.c:356
je short 0401ch ; 74 24 ; 0xc3ff6
mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc3ff8 vbe.c:359
mov word [es:bx+016h], 07e13h ; 26 c7 47 16 13 7e ; 0xc3ffe vbe.c:360
mov word [es:bx+016h], 07e15h ; 26 c7 47 16 15 7e ; 0xc3ffe vbe.c:360
mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc4004
mov word [es:bx+01ah], 07e30h ; 26 c7 47 1a 30 7e ; 0xc4008 vbe.c:361
mov word [es:bx+01ah], 07e32h ; 26 c7 47 1a 32 7e ; 0xc4008 vbe.c:361
mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc400e
mov word [es:bx+01eh], 07e4eh ; 26 c7 47 1e 4e 7e ; 0xc4012 vbe.c:362
mov word [es:bx+01eh], 07e50h ; 26 c7 47 1e 50 7e ; 0xc4012 vbe.c:362
mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc4018
mov dx, cx ; 89 ca ; 0xc401c vbe.c:369
add dx, strict byte 0001bh ; 83 c2 1b ; 0xc401e
@ -8278,12 +8278,12 @@ vesa_pm_end: ; 0xc4754 LB 0x1
; Padding 0x2b bytes at 0xc4755
times 43 db 0
section _DATA progbits vstart=0x4780 align=1 ; size=0x3742 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3742 -> off=0x0 cb=000000000000002b uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2b
db 'Oracle VirtualBox Version 7.1.8 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ab LB 0x3717 -> off=0x0 cb=0000000000000080 uValue=00000000000c002b 'vga_modes'
vga_modes: ; 0xc47ab LB 0x80
section _DATA progbits vstart=0x4780 align=1 ; size=0x3745 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3745 -> off=0x0 cb=000000000000002c uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2c
db 'Oracle VirtualBox Version 7.1.10 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ac LB 0x3719 -> off=0x0 cb=0000000000000080 uValue=00000000000c002c 'vga_modes'
vga_modes: ; 0xc47ac LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
@ -8292,14 +8292,14 @@ vga_modes: ; 0xc47ab LB 0x80
db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
; disGetNextSymbol 0xc482b LB 0x3697 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ab 'line_to_vpti'
line_to_vpti: ; 0xc482b LB 0x10
; disGetNextSymbol 0xc482c LB 0x3699 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ac 'line_to_vpti'
line_to_vpti: ; 0xc482c LB 0x10
db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
; disGetNextSymbol 0xc483b LB 0x3687 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bb 'dac_regs'
dac_regs: ; 0xc483b LB 0x4
; disGetNextSymbol 0xc483c LB 0x3689 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bc 'dac_regs'
dac_regs: ; 0xc483c LB 0x4
dd 0ff3f3f3fh
; disGetNextSymbol 0xc483f LB 0x3683 -> off=0x0 cb=0000000000000780 uValue=00000000000c00bf 'video_param_table'
video_param_table: ; 0xc483f LB 0x780
; disGetNextSymbol 0xc4840 LB 0x3685 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c0 'video_param_table'
video_param_table: ; 0xc4840 LB 0x780
db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
@ -8420,8 +8420,8 @@ video_param_table: ; 0xc483f LB 0x780
db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
; disGetNextSymbol 0xc4fbf LB 0x2f03 -> off=0x0 cb=00000000000000c0 uValue=00000000000c083f 'palette0'
palette0: ; 0xc4fbf LB 0xc0
; disGetNextSymbol 0xc4fc0 LB 0x2f05 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0840 'palette0'
palette0: ; 0xc4fc0 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
@ -8434,8 +8434,8 @@ palette0: ; 0xc4fbf LB 0xc0
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc507f LB 0x2e43 -> off=0x0 cb=00000000000000c0 uValue=00000000000c08ff 'palette1'
palette1: ; 0xc507f LB 0xc0
; disGetNextSymbol 0xc5080 LB 0x2e45 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0900 'palette1'
palette1: ; 0xc5080 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
@ -8448,8 +8448,8 @@ palette1: ; 0xc507f LB 0xc0
db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc513f LB 0x2d83 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09bf 'palette2'
palette2: ; 0xc513f LB 0xc0
; disGetNextSymbol 0xc5140 LB 0x2d85 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c0 'palette2'
palette2: ; 0xc5140 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
@ -8462,8 +8462,8 @@ palette2: ; 0xc513f LB 0xc0
db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc51ff LB 0x2cc3 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a7f 'palette3'
palette3: ; 0xc51ff LB 0x300
; disGetNextSymbol 0xc5200 LB 0x2cc5 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a80 'palette3'
palette3: ; 0xc5200 LB 0x300
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
@ -8512,24 +8512,24 @@ palette3: ; 0xc51ff LB 0x300
db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc54ff LB 0x29c3 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d7f 'static_functionality'
static_functionality: ; 0xc54ff LB 0x10
; disGetNextSymbol 0xc5500 LB 0x29c5 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d80 'static_functionality'
static_functionality: ; 0xc5500 LB 0x10
db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc550f LB 0x29b3 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d8f '_dcc_table'
_dcc_table: ; 0xc550f LB 0x24
; disGetNextSymbol 0xc5510 LB 0x29b5 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d90 '_dcc_table'
_dcc_table: ; 0xc5510 LB 0x24
db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5533 LB 0x298f -> off=0x0 cb=000000000000001a uValue=00000000000c0db3 '_secondary_save_area'
_secondary_save_area: ; 0xc5533 LB 0x1a
db 01ah, 000h, 00fh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5534 LB 0x2991 -> off=0x0 cb=000000000000001a uValue=00000000000c0db4 '_secondary_save_area'
_secondary_save_area: ; 0xc5534 LB 0x1a
db 01ah, 000h, 010h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc554d LB 0x2975 -> off=0x0 cb=000000000000001c uValue=00000000000c0dcd '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554d LB 0x1c
db 03fh, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 033h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5569 LB 0x2959 -> off=0x0 cb=0000000000000800 uValue=00000000000c0de9 'vgafont8'
vgafont8: ; 0xc5569 LB 0x800
; disGetNextSymbol 0xc554e LB 0x2977 -> off=0x0 cb=000000000000001c uValue=00000000000c0dce '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554e LB 0x1c
db 040h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 034h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc556a LB 0x295b -> off=0x0 cb=0000000000000800 uValue=00000000000c0dea 'vgafont8'
vgafont8: ; 0xc556a LB 0x800
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
@ -8658,8 +8658,8 @@ vgafont8: ; 0xc5569 LB 0x800
db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5d69 LB 0x2159 -> off=0x0 cb=0000000000000e00 uValue=00000000000c15e9 'vgafont14'
vgafont14: ; 0xc5d69 LB 0xe00
; disGetNextSymbol 0xc5d6a LB 0x215b -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ea 'vgafont14'
vgafont14: ; 0xc5d6a LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
@ -8884,8 +8884,8 @@ vgafont14: ; 0xc5d69 LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc6b69 LB 0x1359 -> off=0x0 cb=0000000000001000 uValue=00000000000c23e9 'vgafont16'
vgafont16: ; 0xc6b69 LB 0x1000
; disGetNextSymbol 0xc6b6a LB 0x135b -> off=0x0 cb=0000000000001000 uValue=00000000000c23ea 'vgafont16'
vgafont16: ; 0xc6b6a LB 0x1000
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
@ -9142,8 +9142,8 @@ vgafont16: ; 0xc6b69 LB 0x1000
db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc7b69 LB 0x359 -> off=0x0 cb=000000000000012d uValue=00000000000c33e9 'vgafont14alt'
vgafont14alt: ; 0xc7b69 LB 0x12d
; disGetNextSymbol 0xc7b6a LB 0x35b -> off=0x0 cb=000000000000012d uValue=00000000000c33ea 'vgafont14alt'
vgafont14alt: ; 0xc7b6a LB 0x12d
db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
@ -9163,8 +9163,8 @@ vgafont14alt: ; 0xc7b69 LB 0x12d
db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc7c96 LB 0x22c -> off=0x0 cb=0000000000000144 uValue=00000000000c3516 'vgafont16alt'
vgafont16alt: ; 0xc7c96 LB 0x144
; disGetNextSymbol 0xc7c97 LB 0x22e -> off=0x0 cb=0000000000000144 uValue=00000000000c3517 'vgafont16alt'
vgafont16alt: ; 0xc7c97 LB 0x144
db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
@ -9186,53 +9186,56 @@ vgafont16alt: ; 0xc7c96 LB 0x144
db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
db 006h, 000h, 000h, 000h
; disGetNextSymbol 0xc7dda LB 0xe8 -> off=0x0 cb=0000000000000008 uValue=00000000000c365a '_cga_msr'
_cga_msr: ; 0xc7dda LB 0x8
; disGetNextSymbol 0xc7ddb LB 0xea -> off=0x0 cb=0000000000000008 uValue=00000000000c365b '_cga_msr'
_cga_msr: ; 0xc7ddb LB 0x8
db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
; disGetNextSymbol 0xc7de2 LB 0xe0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de2 LB 0x8
; disGetNextSymbol 0xc7de3 LB 0xe2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3663 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de3 LB 0x8
db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7dea LB 0xd8 -> off=0x0 cb=0000000000000008 uValue=00000000000c366a 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7dea LB 0x8
; disGetNextSymbol 0xc7deb LB 0xda -> off=0x0 cb=0000000000000008 uValue=00000000000c366b 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7deb LB 0x8
db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7df2 LB 0xd0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3672 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df2 LB 0x8
; disGetNextSymbol 0xc7df3 LB 0xd2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3673 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df3 LB 0x8
db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
; disGetNextSymbol 0xc7dfa LB 0xc8 -> off=0x0 cb=0000000000000004 uValue=00000000000c367a 'row_tbl'
row_tbl: ; 0xc7dfa LB 0x4
dd 02b190e00h
; disGetNextSymbol 0xc7dfe LB 0xc4 -> off=0x0 cb=0000000000000015 uValue=00000000000c367e '_vbebios_copyright'
_vbebios_copyright: ; 0xc7dfe LB 0x15
; disGetNextSymbol 0xc7dfb LB 0xca -> off=0x0 cb=0000000000000005 uValue=00000000000c367b 'row_tbl'
row_tbl: ; 0xc7dfb LB 0x5
db 000h, 00eh, 019h, 02bh, 000h
; disGetNextSymbol 0xc7e00 LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c3680 '_vbebios_copyright'
_vbebios_copyright: ; 0xc7e00 LB 0x15
db 'VirtualBox VESA BIOS', 000h
; disGetNextSymbol 0xc7e13 LB 0xaf -> off=0x0 cb=000000000000001d uValue=00000000000c3693 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e13 LB 0x1d
; disGetNextSymbol 0xc7e15 LB 0xb0 -> off=0x0 cb=000000000000001d uValue=00000000000c3695 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e15 LB 0x1d
db 'Oracle and/or its affiliates', 000h
; disGetNextSymbol 0xc7e30 LB 0x92 -> off=0x0 cb=000000000000001e uValue=00000000000c36b0 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e30 LB 0x1e
; disGetNextSymbol 0xc7e32 LB 0x93 -> off=0x0 cb=000000000000001e uValue=00000000000c36b2 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e32 LB 0x1e
db 'Oracle VirtualBox VBE Adapter', 000h
; disGetNextSymbol 0xc7e4e LB 0x74 -> off=0x0 cb=0000000000000020 uValue=00000000000c36ce '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e4e LB 0x20
db 'Oracle VirtualBox Version 7.1.8', 000h
; disGetNextSymbol 0xc7e6e LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36ee '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e6e LB 0x2b
; disGetNextSymbol 0xc7e50 LB 0x75 -> off=0x0 cb=0000000000000021 uValue=00000000000c36d0 '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e50 LB 0x21
db 'Oracle VirtualBox Version 7.1.10', 000h
; disGetNextSymbol 0xc7e71 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f1 '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e71 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
; disGetNextSymbol 0xc7e99 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3719 '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e99 LB 0x29
; disGetNextSymbol 0xc7e9c LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c371c '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e9c LB 0x29
db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
section CONST progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x1 bytes at 0xc7ec5
db 001h
section CONST2 progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
section CONST progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x13e bytes at 0xc7ec2
db 001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
db 065h, 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h
db 06ch, 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h
db 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh
db 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh
db 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h
db 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h
section CONST2 progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x13a bytes at 0xc7ec6
db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h
db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch
db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h, 061h
db 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh, 06fh
db 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h
db 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h
db 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h
db 061h, 042h, 069h, 06fh, 073h, 032h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
@ -9244,4 +9247,4 @@ section CONST2 progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0a4h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0e2h

View file

@ -1 +1 @@
0bdccfc777369284b7a55153fa821a6e *VBoxVgaBios286.rom
29abc1e3e7d19d109b66388fcf76f7fb *VBoxVgaBios286.rom

View file

@ -1503,7 +1503,7 @@ init_bios_area: ; 0xc0a26 LB 0x3e
mov word [es:bx+00087h], 0f960h ; 26 c7 87 87 00 60 f9 ; 0xc0a43 vgabios.c:234
mov byte [es:bx+00089h], 051h ; 26 c6 87 89 00 51 ; 0xc0a4a vgabios.c:238
mov byte [es:bx+065h], 009h ; 26 c6 47 65 09 ; 0xc0a50 vgabios.c:240
mov word [es:bx+000a8h], 0554dh ; 26 c7 87 a8 00 4d 55 ; 0xc0a55 vgabios.c:242
mov word [es:bx+000a8h], 0554eh ; 26 c7 87 a8 00 4e 55 ; 0xc0a55 vgabios.c:242
mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5c
pop bp ; 5d ; 0xc0a61 vgabios.c:243
pop bx ; 5b ; 0xc0a62
@ -1969,7 +1969,7 @@ vga_read_char_attr: ; 0xc0db0 LB 0x127
mov word [bp-014h], di ; 89 7e ec ; 0xc0e0f vgabios.c:58
movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc0e12 vgabios.c:557
sal bx, 003h ; c1 e3 03 ; 0xc0e16
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc0e19
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc0e19
jne short 00e56h ; 75 36 ; 0xc0e1e
imul dx, di ; 0f af d7 ; 0xc0e20 vgabios.c:559
add dx, dx ; 01 d2 ; 0xc0e23
@ -1986,13 +1986,13 @@ vga_read_char_attr: ; 0xc0db0 LB 0x127
add ax, ax ; 01 c0 ; 0xc0e41
mov di, dx ; 89 d7 ; 0xc0e43
add di, ax ; 01 c7 ; 0xc0e45
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc0e47 vgabios.c:55
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc0e47 vgabios.c:55
mov ax, word [es:di] ; 26 8b 05 ; 0xc0e4b
push SS ; 16 ; 0xc0e4e vgabios.c:58
pop ES ; 07 ; 0xc0e4f
mov word [es:si], ax ; 26 89 04 ; 0xc0e50
jmp near 00eceh ; e9 78 00 ; 0xc0e53 vgabios.c:561
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc0e56 vgabios.c:562
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc0e56 vgabios.c:562
cmp bl, 005h ; 80 fb 05 ; 0xc0e5a
je short 00eaah ; 74 4b ; 0xc0e5d
cmp bl, 002h ; 80 fb 02 ; 0xc0e5f
@ -2091,18 +2091,18 @@ vga_get_font_info: ; 0xc0ee7 LB 0x83
retn 00002h ; c2 02 00 ; 0xc0f40
mov bx, 0010ch ; bb 0c 01 ; 0xc0f43 vgabios.c:67
jmp short 00f01h ; eb b9 ; 0xc0f46
mov dx, 05d69h ; ba 69 5d ; 0xc0f48 vgabios.c:601
mov dx, 05d6ah ; ba 6a 5d ; 0xc0f48 vgabios.c:601
mov ax, ds ; 8c d8 ; 0xc0f4b
jmp short 00f0ch ; eb bd ; 0xc0f4d vgabios.c:602
mov dx, 05569h ; ba 69 55 ; 0xc0f4f vgabios.c:604
mov dx, 0556ah ; ba 6a 55 ; 0xc0f4f vgabios.c:604
jmp short 00f4bh ; eb f7 ; 0xc0f52
mov dx, 05969h ; ba 69 59 ; 0xc0f54 vgabios.c:607
mov dx, 0596ah ; ba 6a 59 ; 0xc0f54 vgabios.c:607
jmp short 00f4bh ; eb f2 ; 0xc0f57
mov dx, 07b69h ; ba 69 7b ; 0xc0f59 vgabios.c:610
mov dx, 07b6ah ; ba 6a 7b ; 0xc0f59 vgabios.c:610
jmp short 00f4bh ; eb ed ; 0xc0f5c
mov dx, 06b69h ; ba 69 6b ; 0xc0f5e vgabios.c:613
mov dx, 06b6ah ; ba 6a 6b ; 0xc0f5e vgabios.c:613
jmp short 00f4bh ; eb e8 ; 0xc0f61
mov dx, 07c96h ; ba 96 7c ; 0xc0f63 vgabios.c:616
mov dx, 07c97h ; ba 97 7c ; 0xc0f63 vgabios.c:616
jmp short 00f4bh ; eb e3 ; 0xc0f66
jmp short 00f3dh ; eb d3 ; 0xc0f68 vgabios.c:622
; disGetNextSymbol 0xc0f6a LB 0x334f -> off=0x0 cb=0000000000000156 uValue=00000000000c0f6a 'vga_read_pixel'
@ -2126,9 +2126,9 @@ vga_read_pixel: ; 0xc0f6a LB 0x156
je near 010b9h ; 0f 84 27 01 ; 0xc0f8e
movzx bx, al ; 0f b6 d8 ; 0xc0f92 vgabios.c:645
sal bx, 003h ; c1 e3 03 ; 0xc0f95
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc0f98
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc0f98
je near 010b9h ; 0f 84 18 01 ; 0xc0f9d
mov ch, byte [bx+047adh] ; 8a af ad 47 ; 0xc0fa1 vgabios.c:649
mov ch, byte [bx+047aeh] ; 8a af ae 47 ; 0xc0fa1 vgabios.c:649
cmp ch, 003h ; 80 fd 03 ; 0xc0fa5
jc short 00fbbh ; 72 11 ; 0xc0fa8
jbe short 00fc3h ; 76 17 ; 0xc0faa
@ -2180,7 +2180,7 @@ vga_read_pixel: ; 0xc0f6a LB 0x156
or ch, al ; 08 c5 ; 0xc1027
inc byte [bp-006h] ; fe 46 fa ; 0xc1029 vgabios.c:661
jmp short 00ffch ; eb ce ; 0xc102c
movzx cx, byte [bx+047aeh] ; 0f b6 8f ae 47 ; 0xc102e vgabios.c:664
movzx cx, byte [bx+047afh] ; 0f b6 8f af 47 ; 0xc102e vgabios.c:664
mov bx, strict word 00004h ; bb 04 00 ; 0xc1033
sub bx, cx ; 29 cb ; 0xc1036
mov cx, bx ; 89 d9 ; 0xc1038
@ -2199,7 +2199,7 @@ vga_read_pixel: ; 0xc0f6a LB 0x156
mov al, byte [es:bx] ; 26 8a 07 ; 0xc1058
movzx bx, ah ; 0f b6 dc ; 0xc105b vgabios.c:668
sal bx, 003h ; c1 e3 03 ; 0xc105e
cmp byte [bx+047aeh], 002h ; 80 bf ae 47 02 ; 0xc1061
cmp byte [bx+047afh], 002h ; 80 bf af 47 02 ; 0xc1061
jne short 0107dh ; 75 15 ; 0xc1066
and dx, strict byte 00003h ; 83 e2 03 ; 0xc1068 vgabios.c:669
mov cx, strict word 00003h ; b9 03 00 ; 0xc106b
@ -2534,7 +2534,7 @@ biosfn_set_active_page: ; 0xc12cb LB 0xcd
movzx bx, ch ; 0f b6 dd ; 0xc1301 vgabios.c:847
mov si, bx ; 89 de ; 0xc1304
sal si, 003h ; c1 e6 03 ; 0xc1306
cmp byte [si+047ach], 000h ; 80 bc ac 47 00 ; 0xc1309
cmp byte [si+047adh], 000h ; 80 bc ad 47 00 ; 0xc1309
jne short 01344h ; 75 34 ; 0xc130e
mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1310 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc1313
@ -2558,10 +2558,10 @@ biosfn_set_active_page: ; 0xc12cb LB 0xcd
mov bx, dx ; 89 d3 ; 0xc133f
inc bx ; 43 ; 0xc1341
jmp short 01353h ; eb 0f ; 0xc1342 vgabios.c:860
movzx bx, byte [bx+0482bh] ; 0f b6 9f 2b 48 ; 0xc1344 vgabios.c:862
movzx bx, byte [bx+0482ch] ; 0f b6 9f 2c 48 ; 0xc1344 vgabios.c:862
sal bx, 006h ; c1 e3 06 ; 0xc1349
movzx ax, cl ; 0f b6 c1 ; 0xc134c
mov bx, word [bx+04842h] ; 8b 9f 42 48 ; 0xc134f
mov bx, word [bx+04843h] ; 8b 9f 43 48 ; 0xc134f
imul bx, ax ; 0f af d8 ; 0xc1353
mov si, strict word 00063h ; be 63 00 ; 0xc1356 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc1359
@ -2605,7 +2605,7 @@ find_vpti: ; 0xc1398 LB 0x45
movzx bx, al ; 0f b6 d8 ; 0xc139d vgabios.c:921
mov si, bx ; 89 de ; 0xc13a0
sal si, 003h ; c1 e6 03 ; 0xc13a2
cmp byte [si+047ach], 000h ; 80 bc ac 47 00 ; 0xc13a5
cmp byte [si+047adh], 000h ; 80 bc ad 47 00 ; 0xc13a5
jne short 013d4h ; 75 28 ; 0xc13aa
mov si, 00089h ; be 89 00 ; 0xc13ac vgabios.c:47
mov ax, strict word 00040h ; b8 40 00 ; 0xc13af
@ -2613,15 +2613,15 @@ find_vpti: ; 0xc1398 LB 0x45
mov al, byte [es:si] ; 26 8a 04 ; 0xc13b4
test AL, strict byte 010h ; a8 10 ; 0xc13b7 vgabios.c:923
je short 013c2h ; 74 07 ; 0xc13b9
movsx ax, byte [bx+07df2h] ; 0f be 87 f2 7d ; 0xc13bb vgabios.c:924
movsx ax, byte [bx+07df3h] ; 0f be 87 f3 7d ; 0xc13bb vgabios.c:924
jmp short 013d9h ; eb 17 ; 0xc13c0 vgabios.c:925
test AL, strict byte 080h ; a8 80 ; 0xc13c2
je short 013cdh ; 74 07 ; 0xc13c4
movsx ax, byte [bx+07de2h] ; 0f be 87 e2 7d ; 0xc13c6 vgabios.c:926
movsx ax, byte [bx+07de3h] ; 0f be 87 e3 7d ; 0xc13c6 vgabios.c:926
jmp short 013d9h ; eb 0c ; 0xc13cb vgabios.c:927
movsx ax, byte [bx+07deah] ; 0f be 87 ea 7d ; 0xc13cd vgabios.c:928
movsx ax, byte [bx+07debh] ; 0f be 87 eb 7d ; 0xc13cd vgabios.c:928
jmp short 013d9h ; eb 05 ; 0xc13d2 vgabios.c:929
movzx ax, byte [bx+0482bh] ; 0f b6 87 2b 48 ; 0xc13d4 vgabios.c:930
movzx ax, byte [bx+0482ch] ; 0f b6 87 2c 48 ; 0xc13d4 vgabios.c:930
pop bp ; 5d ; 0xc13d9 vgabios.c:933
pop si ; 5e ; 0xc13da
pop bx ; 5b ; 0xc13db
@ -2680,13 +2680,13 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jne near 01509h ; 0f 85 b0 00 ; 0xc1455
mov di, cx ; 89 cf ; 0xc1459 vgabios.c:999
sal di, 003h ; c1 e7 03 ; 0xc145b
mov al, byte [di+047b1h] ; 8a 85 b1 47 ; 0xc145e
mov al, byte [di+047b2h] ; 8a 85 b2 47 ; 0xc145e
mov dx, 003c6h ; ba c6 03 ; 0xc1462
out DX, AL ; ee ; 0xc1465
xor al, al ; 30 c0 ; 0xc1466 vgabios.c:1002
mov dx, 003c8h ; ba c8 03 ; 0xc1468
out DX, AL ; ee ; 0xc146b
mov cl, byte [di+047b2h] ; 8a 8d b2 47 ; 0xc146c vgabios.c:1005
mov cl, byte [di+047b3h] ; 8a 8d b3 47 ; 0xc146c vgabios.c:1005
cmp cl, 001h ; 80 f9 01 ; 0xc1470
jc short 01483h ; 72 0e ; 0xc1473
jbe short 0148eh ; 76 17 ; 0xc1475
@ -2697,21 +2697,21 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jmp short 014a1h ; eb 1e ; 0xc1481
test cl, cl ; 84 c9 ; 0xc1483
jne short 014a1h ; 75 1a ; 0xc1485
mov word [bp-016h], 04fbfh ; c7 46 ea bf 4f ; 0xc1487 vgabios.c:1007
mov word [bp-016h], 04fc0h ; c7 46 ea c0 4f ; 0xc1487 vgabios.c:1007
jmp short 014a1h ; eb 13 ; 0xc148c vgabios.c:1008
mov word [bp-016h], 0507fh ; c7 46 ea 7f 50 ; 0xc148e vgabios.c:1010
mov word [bp-016h], 05080h ; c7 46 ea 80 50 ; 0xc148e vgabios.c:1010
jmp short 014a1h ; eb 0c ; 0xc1493 vgabios.c:1011
mov word [bp-016h], 0513fh ; c7 46 ea 3f 51 ; 0xc1495 vgabios.c:1013
mov word [bp-016h], 05140h ; c7 46 ea 40 51 ; 0xc1495 vgabios.c:1013
jmp short 014a1h ; eb 05 ; 0xc149a vgabios.c:1014
mov word [bp-016h], 051ffh ; c7 46 ea ff 51 ; 0xc149c vgabios.c:1016
mov word [bp-016h], 05200h ; c7 46 ea 00 52 ; 0xc149c vgabios.c:1016
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc14a1 vgabios.c:1020
sal di, 003h ; c1 e7 03 ; 0xc14a5
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc14a8
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc14a8
jne short 014beh ; 75 0f ; 0xc14ad
mov es, [bp-01ah] ; 8e 46 e6 ; 0xc14af vgabios.c:1022
cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc14b2
jne short 014beh ; 75 05 ; 0xc14b7
mov word [bp-016h], 0507fh ; c7 46 ea 7f 50 ; 0xc14b9 vgabios.c:1023
mov word [bp-016h], 05080h ; c7 46 ea 80 50 ; 0xc14b9 vgabios.c:1023
xor cx, cx ; 31 c9 ; 0xc14be vgabios.c:1026
jmp short 014d1h ; eb 0f ; 0xc14c0
xor al, al ; 30 c0 ; 0xc14c2 vgabios.c:1033
@ -2724,8 +2724,8 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jnc short 014fch ; 73 2b ; 0xc14cf
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc14d1
sal di, 003h ; c1 e7 03 ; 0xc14d5
movzx di, byte [di+047b2h] ; 0f b6 bd b2 47 ; 0xc14d8
movzx di, byte [di+0483bh] ; 0f b6 bd 3b 48 ; 0xc14dd
movzx di, byte [di+047b3h] ; 0f b6 bd b3 47 ; 0xc14d8
movzx di, byte [di+0483ch] ; 0f b6 bd 3c 48 ; 0xc14dd
cmp cx, di ; 39 f9 ; 0xc14e2
jnbe short 014c2h ; 77 dc ; 0xc14e4
imul di, cx, strict byte 00003h ; 6b f9 03 ; 0xc14e6
@ -2835,7 +2835,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jmp short 015bbh ; eb e3 ; 0xc15d6
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc15d8 vgabios.c:1081
sal di, 003h ; c1 e7 03 ; 0xc15dc
cmp byte [di+047adh], 001h ; 80 bd ad 47 01 ; 0xc15df
cmp byte [di+047aeh], 001h ; 80 bd ae 47 01 ; 0xc15df
jne short 015ebh ; 75 05 ; 0xc15e4
mov cx, 003b4h ; b9 b4 03 ; 0xc15e6
jmp short 015eeh ; eb 03 ; 0xc15e9
@ -2875,9 +2875,9 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jne short 01692h ; 75 5c ; 0xc1634
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc1636 vgabios.c:1100
sal di, 003h ; c1 e7 03 ; 0xc163a
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc163d
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc163d
jne short 01656h ; 75 12 ; 0xc1642
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc1644 vgabios.c:1102
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc1644 vgabios.c:1102
mov cx, 04000h ; b9 00 40 ; 0xc1648
mov ax, 00720h ; b8 20 07 ; 0xc164b
xor di, di ; 31 ff ; 0xc164e
@ -2886,7 +2886,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jmp short 01692h ; eb 3c ; 0xc1654 vgabios.c:1104
cmp byte [bp-00eh], 00dh ; 80 7e f2 0d ; 0xc1656 vgabios.c:1106
jnc short 0166dh ; 73 11 ; 0xc165a
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc165c vgabios.c:1108
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc165c vgabios.c:1108
mov cx, 04000h ; b9 00 40 ; 0xc1660
xor ax, ax ; 31 c0 ; 0xc1663
xor di, di ; 31 ff ; 0xc1665
@ -2903,7 +2903,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
mov word [bp-01eh], ax ; 89 46 e2 ; 0xc1679
mov AL, strict byte 00fh ; b0 0f ; 0xc167c vgabios.c:1114
out DX, AL ; ee ; 0xc167e
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc167f vgabios.c:1115
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc167f vgabios.c:1115
mov cx, 08000h ; b9 00 80 ; 0xc1683
xor ax, ax ; 31 c0 ; 0xc1686
xor di, di ; 31 ff ; 0xc1688
@ -2952,7 +2952,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
cmp AL, strict byte 007h ; 3c 07 ; 0xc1705
jnbe short 0172fh ; 77 26 ; 0xc1707
movzx di, al ; 0f b6 f8 ; 0xc1709 vgabios.c:1136
mov al, byte [di+07ddah] ; 8a 85 da 7d ; 0xc170c vgabios.c:50
mov al, byte [di+07ddbh] ; 8a 85 db 7d ; 0xc170c vgabios.c:50
mov di, strict word 00065h ; bf 65 00 ; 0xc1710 vgabios.c:52
mov byte [es:di], al ; 26 88 05 ; 0xc1713
cmp byte [bp-00eh], 006h ; 80 7e f2 06 ; 0xc1716 vgabios.c:1137
@ -2966,7 +2966,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
mov byte [es:di], dl ; 26 88 15 ; 0xc172c
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc172f vgabios.c:1141
sal di, 003h ; c1 e7 03 ; 0xc1733
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc1736
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc1736
jne short 01746h ; 75 09 ; 0xc173b
mov dx, strict word 00007h ; ba 07 00 ; 0xc173d vgabios.c:1143
mov ax, strict word 00006h ; b8 06 00 ; 0xc1740
@ -2984,7 +2984,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
call 012cbh ; e8 6c fb ; 0xc175c
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc175f vgabios.c:1155
sal di, 003h ; c1 e7 03 ; 0xc1763
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc1766
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc1766
jne near 01850h ; 0f 85 e1 00 ; 0xc176b
mov es, [bp-014h] ; 8e 46 ec ; 0xc176f vgabios.c:1157
mov di, word [es:bx+008h] ; 26 8b 7f 08 ; 0xc1772
@ -3001,7 +3001,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
push ax ; 50 ; 0xc1794
push dword 000000000h ; 66 6a 00 ; 0xc1795
mov cx, 00100h ; b9 00 01 ; 0xc1798
mov bx, 05569h ; bb 69 55 ; 0xc179b
mov bx, 0556ah ; bb 6a 55 ; 0xc179b
mov dx, 0c000h ; ba 00 c0 ; 0xc179e
xor ax, ax ; 31 c0 ; 0xc17a1
call 02c0ah ; e8 64 14 ; 0xc17a3
@ -3010,7 +3010,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
push ax ; 50 ; 0xc17aa
push dword 000000000h ; 66 6a 00 ; 0xc17ab
mov cx, 00100h ; b9 00 01 ; 0xc17ae
mov bx, 05d69h ; bb 69 5d ; 0xc17b1
mov bx, 05d6ah ; bb 6a 5d ; 0xc17b1
mov dx, 0c000h ; ba 00 c0 ; 0xc17b4
xor al, al ; 30 c0 ; 0xc17b7
call 02c0ah ; e8 4e 14 ; 0xc17b9
@ -3018,7 +3018,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jne short 017f4h ; 75 32 ; 0xc17c0
mov cx, strict word 0000eh ; b9 0e 00 ; 0xc17c2 vgabios.c:1166
xor bx, bx ; 31 db ; 0xc17c5
mov dx, 07b69h ; ba 69 7b ; 0xc17c7
mov dx, 07b6ah ; ba 6a 7b ; 0xc17c7
mov ax, 0c000h ; b8 00 c0 ; 0xc17ca
call 02b95h ; e8 c5 13 ; 0xc17cd
jmp short 017f4h ; eb 22 ; 0xc17d0 vgabios.c:1167
@ -3026,13 +3026,13 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
push ax ; 50 ; 0xc17d4
push dword 000000000h ; 66 6a 00 ; 0xc17d5
mov cx, 00100h ; b9 00 01 ; 0xc17d8
mov bx, 06b69h ; bb 69 6b ; 0xc17db
mov bx, 06b6ah ; bb 6a 6b ; 0xc17db
mov dx, 0c000h ; ba 00 c0 ; 0xc17de
xor al, al ; 30 c0 ; 0xc17e1
call 02c0ah ; e8 24 14 ; 0xc17e3
mov cx, strict word 00010h ; b9 10 00 ; 0xc17e6 vgabios.c:1170
xor bx, bx ; 31 db ; 0xc17e9
mov dx, 07c96h ; ba 96 7c ; 0xc17eb
mov dx, 07c97h ; ba 97 7c ; 0xc17eb
mov ax, 0c000h ; b8 00 c0 ; 0xc17ee
call 02b95h ; e8 a1 13 ; 0xc17f1
cmp word [bp-012h], strict byte 00000h ; 83 7e ee 00 ; 0xc17f4 vgabios.c:1172
@ -3070,7 +3070,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
mov AL, strict byte 003h ; b0 03 ; 0xc184a
mov AH, strict byte 011h ; b4 11 ; 0xc184c
int 06dh ; cd 6d ; 0xc184e
mov bx, 05969h ; bb 69 59 ; 0xc1850 vgabios.c:1199
mov bx, 0596ah ; bb 6a 59 ; 0xc1850 vgabios.c:1199
mov cx, ds ; 8c d9 ; 0xc1853
mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1855
call 009f0h ; e8 95 f1 ; 0xc1858
@ -3082,14 +3082,14 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
je short 0187bh ; 74 11 ; 0xc1868
cmp AL, strict byte 008h ; 3c 08 ; 0xc186a
jne short 01885h ; 75 17 ; 0xc186c
mov bx, 05569h ; bb 69 55 ; 0xc186e vgabios.c:1203
mov bx, 0556ah ; bb 6a 55 ; 0xc186e vgabios.c:1203
mov cx, ds ; 8c d9 ; 0xc1871
mov ax, strict word 00043h ; b8 43 00 ; 0xc1873
call 009f0h ; e8 77 f1 ; 0xc1876
jmp short 01885h ; eb 0a ; 0xc1879 vgabios.c:1204
mov bx, 05d69h ; bb 69 5d ; 0xc187b vgabios.c:1206
mov bx, 05d6ah ; bb 6a 5d ; 0xc187b vgabios.c:1206
jmp short 01871h ; eb f1 ; 0xc187e
mov bx, 06b69h ; bb 69 6b ; 0xc1880 vgabios.c:1209
mov bx, 06b6ah ; bb 6a 6b ; 0xc1880 vgabios.c:1209
jmp short 01871h ; eb ec ; 0xc1883
lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1885 vgabios.c:1212
pop di ; 5f ; 0xc1888
@ -3485,7 +3485,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
mov word [bp-016h], ax ; 89 46 ea ; 0xc1c06
mov ax, word [bp-014h] ; 8b 46 ec ; 0xc1c09
imul ax, cx ; 0f af c1 ; 0xc1c0c
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc1c0f
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc1c0f
jne near 01db3h ; 0f 85 9b 01 ; 0xc1c14
mov cx, ax ; 89 c1 ; 0xc1c18 vgabios.c:1345
add cx, ax ; 01 c1 ; 0xc1c1a
@ -3509,7 +3509,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
movzx dx, byte [bp-012h] ; 0f b6 56 ee ; 0xc1c4d vgabios.c:1352
sal dx, 008h ; c1 e2 08 ; 0xc1c51
add dx, strict byte 00020h ; 83 c2 20 ; 0xc1c54
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc1c57
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc1c57
mov cx, ax ; 89 c1 ; 0xc1c5b
mov ax, dx ; 89 d0 ; 0xc1c5d
mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1c5f
@ -3543,7 +3543,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add di, dx ; 01 d7 ; 0xc1cb6
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cb8
sal bx, 003h ; c1 e3 03 ; 0xc1cbc
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1cbf
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1cbf
jcxz 01cc7h ; e3 02 ; 0xc1cc3
rep stosw ; f3 ab ; 0xc1cc5
jmp short 01d02h ; eb 39 ; 0xc1cc7 vgabios.c:1361
@ -3555,7 +3555,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add si, si ; 01 f6 ; 0xc1cd9
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cdb
sal bx, 003h ; c1 e3 03 ; 0xc1cdf
mov ax, word [bx+047afh] ; 8b 87 af 47 ; 0xc1ce2
mov ax, word [bx+047b0h] ; 8b 87 b0 47 ; 0xc1ce2
mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1ce6
imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1ce9
mov di, dx ; 89 d7 ; 0xc1ced
@ -3596,7 +3596,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add di, dx ; 01 d7 ; 0xc1d4f
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d51
sal bx, 003h ; c1 e3 03 ; 0xc1d55
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1d58
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1d58
jcxz 01d60h ; e3 02 ; 0xc1d5c
rep stosw ; f3 ab ; 0xc1d5e
jmp short 01da2h ; eb 40 ; 0xc1d60 vgabios.c:1370
@ -3610,7 +3610,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add si, si ; 01 f6 ; 0xc1d79
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d7b
sal bx, 003h ; c1 e3 03 ; 0xc1d7f
mov ax, word [bx+047afh] ; 8b 87 af 47 ; 0xc1d82
mov ax, word [bx+047b0h] ; 8b 87 b0 47 ; 0xc1d82
mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1d86
imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1d89
add dx, bx ; 01 da ; 0xc1d8d
@ -3629,11 +3629,11 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
jc near 0217ch ; 0f 82 cf 03 ; 0xc1da9
dec word [bp-01ah] ; ff 4e e6 ; 0xc1dad vgabios.c:1373
jmp near 01d0fh ; e9 5c ff ; 0xc1db0
movzx di, byte [di+0482bh] ; 0f b6 bd 2b 48 ; 0xc1db3 vgabios.c:1379
movzx di, byte [di+0482ch] ; 0f b6 bd 2c 48 ; 0xc1db3 vgabios.c:1379
sal di, 006h ; c1 e7 06 ; 0xc1db8
mov dl, byte [di+04841h] ; 8a 95 41 48 ; 0xc1dbb
mov dl, byte [di+04842h] ; 8a 95 42 48 ; 0xc1dbb
mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc1dbf
mov dl, byte [bx+047adh] ; 8a 97 ad 47 ; 0xc1dc2 vgabios.c:1380
mov dl, byte [bx+047aeh] ; 8a 97 ae 47 ; 0xc1dc2 vgabios.c:1380
cmp dl, 003h ; 80 fa 03 ; 0xc1dc6
jc short 01ddch ; 72 11 ; 0xc1dc9
jbe short 01de6h ; 76 19 ; 0xc1dcb
@ -3671,7 +3671,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1e22
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1e26
sal bx, 003h ; c1 e3 03 ; 0xc1e2a
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1e2d
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1e2d
xor di, di ; 31 ff ; 0xc1e31
jcxz 01e37h ; e3 02 ; 0xc1e33
rep stosb ; f3 aa ; 0xc1e35
@ -3752,7 +3752,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
jc near 0217ch ; 0f 82 5c 02 ; 0xc1f1c
dec word [bp-01ah] ; ff 4e e6 ; 0xc1f20 vgabios.c:1409
jmp short 01eb4h ; eb 8f ; 0xc1f23
mov dl, byte [bx+047aeh] ; 8a 97 ae 47 ; 0xc1f25 vgabios.c:1414
mov dl, byte [bx+047afh] ; 8a 97 af 47 ; 0xc1f25 vgabios.c:1414
cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1f29 vgabios.c:1415
jne short 01f6ah ; 75 3b ; 0xc1f2d
cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1f2f
@ -3770,7 +3770,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
movzx cx, dl ; 0f b6 ca ; 0xc1f53
imul cx, ax ; 0f af c8 ; 0xc1f56
movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1f59
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1f5d
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1f5d
xor di, di ; 31 ff ; 0xc1f61
jcxz 01f67h ; e3 02 ; 0xc1f63
rep stosb ; f3 aa ; 0xc1f65
@ -3871,7 +3871,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
imul cx, dx ; 0f af ca ; 0xc2088
sal cx, 003h ; c1 e1 03 ; 0xc208b
movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc208e
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2092
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2092
xor di, di ; 31 ff ; 0xc2096
jcxz 0209ch ; e3 02 ; 0xc2098
rep stosb ; f3 aa ; 0xc209a
@ -4061,7 +4061,7 @@ write_gfx_char_cga: ; 0xc2284 LB 0xdd
push si ; 56 ; 0xc2284 vgabios.c:1534
push di ; 57 ; 0xc2285
enter 00006h, 000h ; c8 06 00 00 ; 0xc2286
mov di, 05569h ; bf 69 55 ; 0xc228a vgabios.c:1541
mov di, 0556ah ; bf 6a 55 ; 0xc228a vgabios.c:1541
xor bh, bh ; 30 ff ; 0xc228d vgabios.c:1542
movzx si, byte [bp+00ah] ; 0f b6 76 0a ; 0xc228f
imul si, bx ; 0f af f3 ; 0xc2293
@ -4154,7 +4154,7 @@ write_gfx_char_lin: ; 0xc2361 LB 0x85
push di ; 57 ; 0xc2362
enter 00006h, 000h ; c8 06 00 00 ; 0xc2363
mov dh, dl ; 88 d6 ; 0xc2367
mov word [bp-002h], 05569h ; c7 46 fe 69 55 ; 0xc2369 vgabios.c:1605
mov word [bp-002h], 0556ah ; c7 46 fe 6a 55 ; 0xc2369 vgabios.c:1605
movzx si, cl ; 0f b6 f1 ; 0xc236e vgabios.c:1606
movzx cx, byte [bp+008h] ; 0f b6 4e 08 ; 0xc2371
imul cx, si ; 0f af ce ; 0xc2375
@ -4250,7 +4250,7 @@ biosfn_write_char_attr: ; 0xc23e6 LB 0x165
movzx bx, cl ; 0f b6 d9 ; 0xc244b vgabios.c:1645
mov di, bx ; 89 df ; 0xc244e
sal di, 003h ; c1 e7 03 ; 0xc2450
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc2453
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc2453
jne short 024a0h ; 75 46 ; 0xc2458
mov bx, word [bp-018h] ; 8b 5e e8 ; 0xc245a vgabios.c:1648
imul bx, ax ; 0f af d8 ; 0xc245d
@ -4272,24 +4272,24 @@ biosfn_write_char_attr: ; 0xc23e6 LB 0x165
add ax, bx ; 01 d8 ; 0xc2489
mov word [bp-01ah], ax ; 89 46 e6 ; 0xc248b
mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc248e vgabios.c:1651
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc2491
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc2491
mov cx, si ; 89 f1 ; 0xc2495
mov di, dx ; 89 d7 ; 0xc2497
jcxz 0249dh ; e3 02 ; 0xc2499
rep stosw ; f3 ab ; 0xc249b
jmp near 02544h ; e9 a4 00 ; 0xc249d vgabios.c:1653
movzx bx, byte [bx+0482bh] ; 0f b6 9f 2b 48 ; 0xc24a0 vgabios.c:1656
movzx bx, byte [bx+0482ch] ; 0f b6 9f 2c 48 ; 0xc24a0 vgabios.c:1656
sal bx, 006h ; c1 e3 06 ; 0xc24a5
mov al, byte [bx+04841h] ; 8a 87 41 48 ; 0xc24a8
mov al, byte [bx+04842h] ; 8a 87 42 48 ; 0xc24a8
mov byte [bp-006h], al ; 88 46 fa ; 0xc24ac
mov al, byte [di+047aeh] ; 8a 85 ae 47 ; 0xc24af vgabios.c:1657
mov al, byte [di+047afh] ; 8a 85 af 47 ; 0xc24af vgabios.c:1657
mov byte [bp-00ch], al ; 88 46 f4 ; 0xc24b3
dec si ; 4e ; 0xc24b6 vgabios.c:1658
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc24b7
je near 02544h ; 0f 84 86 00 ; 0xc24ba
movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc24be vgabios.c:1660
sal bx, 003h ; c1 e3 03 ; 0xc24c2
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc24c5
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc24c5
cmp AL, strict byte 003h ; 3c 03 ; 0xc24c9
jc short 024d9h ; 72 0c ; 0xc24cb
jbe short 024dfh ; 76 10 ; 0xc24cd
@ -4382,7 +4382,7 @@ biosfn_write_char_only: ; 0xc254b LB 0x162
xor ch, ch ; 30 ed ; 0xc25af vgabios.c:1703
mov bx, cx ; 89 cb ; 0xc25b1
sal bx, 003h ; c1 e3 03 ; 0xc25b3
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc25b6
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc25b6
jne short 025fah ; 75 3d ; 0xc25bb
imul di, ax ; 0f af f8 ; 0xc25bd vgabios.c:1706
add di, di ; 01 ff ; 0xc25c0
@ -4401,26 +4401,26 @@ biosfn_write_char_only: ; 0xc254b LB 0x162
je near 026a6h ; 0f 84 c1 00 ; 0xc25e1
movzx di, byte [bp-012h] ; 0f b6 7e ee ; 0xc25e5 vgabios.c:1709
sal di, 003h ; c1 e7 03 ; 0xc25e9
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc25ec vgabios.c:50
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc25ec vgabios.c:50
mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc25f0
mov byte [es:bx], al ; 26 88 07 ; 0xc25f3
inc bx ; 43 ; 0xc25f6 vgabios.c:1710
inc bx ; 43 ; 0xc25f7
jmp short 025ddh ; eb e3 ; 0xc25f8 vgabios.c:1711
mov di, cx ; 89 cf ; 0xc25fa vgabios.c:1716
movzx ax, byte [di+0482bh] ; 0f b6 85 2b 48 ; 0xc25fc
movzx ax, byte [di+0482ch] ; 0f b6 85 2c 48 ; 0xc25fc
mov di, ax ; 89 c7 ; 0xc2601
sal di, 006h ; c1 e7 06 ; 0xc2603
mov al, byte [di+04841h] ; 8a 85 41 48 ; 0xc2606
mov al, byte [di+04842h] ; 8a 85 42 48 ; 0xc2606
mov byte [bp-00ch], al ; 88 46 f4 ; 0xc260a
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc260d vgabios.c:1717
mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc260d vgabios.c:1717
mov byte [bp-014h], al ; 88 46 ec ; 0xc2611
dec si ; 4e ; 0xc2614 vgabios.c:1718
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2615
je near 026a6h ; 0f 84 8a 00 ; 0xc2618
movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc261c vgabios.c:1720
sal bx, 003h ; c1 e3 03 ; 0xc2620
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2623
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2623
cmp bl, 003h ; 80 fb 03 ; 0xc2627
jc short 0263ah ; 72 0e ; 0xc262a
jbe short 02641h ; 76 13 ; 0xc262c
@ -4490,9 +4490,9 @@ biosfn_write_pixel: ; 0xc26ad LB 0x165
je near 027edh ; 0f 84 1a 01 ; 0xc26cf
movzx bx, al ; 0f b6 d8 ; 0xc26d3 vgabios.c:1753
sal bx, 003h ; c1 e3 03 ; 0xc26d6
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc26d9
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc26d9
je near 027edh ; 0f 84 0b 01 ; 0xc26de
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc26e2 vgabios.c:1755
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc26e2 vgabios.c:1755
cmp AL, strict byte 003h ; 3c 03 ; 0xc26e6
jc short 026f9h ; 72 0f ; 0xc26e8
jbe short 02700h ; 76 14 ; 0xc26ea
@ -4551,7 +4551,7 @@ biosfn_write_pixel: ; 0xc26ad LB 0x165
mov si, cx ; 89 ce ; 0xc276f vgabios.c:1775
shr si, 1 ; d1 ee ; 0xc2771
imul si, si, strict byte 00050h ; 6b f6 50 ; 0xc2773
cmp al, byte [bx+047aeh] ; 3a 87 ae 47 ; 0xc2776
cmp al, byte [bx+047afh] ; 3a 87 af 47 ; 0xc2776
jne short 02783h ; 75 07 ; 0xc277a
mov bx, dx ; 89 d3 ; 0xc277c vgabios.c:1777
shr bx, 002h ; c1 eb 02 ; 0xc277e
@ -4567,7 +4567,7 @@ biosfn_write_pixel: ; 0xc26ad LB 0x165
mov al, byte [es:bx] ; 26 8a 07 ; 0xc2797
movzx si, ah ; 0f b6 f4 ; 0xc279a vgabios.c:1785
sal si, 003h ; c1 e6 03 ; 0xc279d
cmp byte [si+047aeh], 002h ; 80 bc ae 47 02 ; 0xc27a0
cmp byte [si+047afh], 002h ; 80 bc af 47 02 ; 0xc27a0
jne short 027beh ; 75 17 ; 0xc27a5
mov ah, dl ; 88 d4 ; 0xc27a7 vgabios.c:1787
and ah, 003h ; 80 e4 03 ; 0xc27a9
@ -4684,7 +4684,7 @@ biosfn_write_teletype: ; 0xc2812 LB 0x24a
movzx si, byte [bp-00ch] ; 0f b6 76 f4 ; 0xc28be vgabios.c:1862
mov bx, si ; 89 f3 ; 0xc28c2
sal bx, 003h ; c1 e3 03 ; 0xc28c4
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc28c7
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc28c7
jne short 02911h ; 75 43 ; 0xc28cc
mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc28ce vgabios.c:1865
imul ax, word [bp-00eh] ; 0f af 46 f2 ; 0xc28d1
@ -4700,20 +4700,20 @@ biosfn_write_teletype: ; 0xc2812 LB 0x24a
add ax, dx ; 01 d0 ; 0xc28ef
add ax, ax ; 01 c0 ; 0xc28f1
add si, ax ; 01 c6 ; 0xc28f3
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc28f5 vgabios.c:50
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc28f5 vgabios.c:50
mov byte [es:si], ch ; 26 88 2c ; 0xc28f9
cmp cl, 003h ; 80 f9 03 ; 0xc28fc vgabios.c:1870
jne near 0299fh ; 0f 85 9c 00 ; 0xc28ff
inc si ; 46 ; 0xc2903 vgabios.c:1871
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2904 vgabios.c:50
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2904 vgabios.c:50
mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2908
mov byte [es:si], al ; 26 88 04 ; 0xc290b
jmp near 0299fh ; e9 8e 00 ; 0xc290e vgabios.c:1873
movzx si, byte [si+0482bh] ; 0f b6 b4 2b 48 ; 0xc2911 vgabios.c:1876
movzx si, byte [si+0482ch] ; 0f b6 b4 2c 48 ; 0xc2911 vgabios.c:1876
sal si, 006h ; c1 e6 06 ; 0xc2916
mov ah, byte [si+04841h] ; 8a a4 41 48 ; 0xc2919
mov dl, byte [bx+047aeh] ; 8a 97 ae 47 ; 0xc291d vgabios.c:1877
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc2921 vgabios.c:1878
mov ah, byte [si+04842h] ; 8a a4 42 48 ; 0xc2919
mov dl, byte [bx+047afh] ; 8a 97 af 47 ; 0xc291d vgabios.c:1877
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2921 vgabios.c:1878
cmp AL, strict byte 003h ; 3c 03 ; 0xc2925
jc short 02935h ; 72 0c ; 0xc2927
jbe short 0293bh ; 76 10 ; 0xc2929
@ -4777,7 +4777,7 @@ biosfn_write_teletype: ; 0xc2812 LB 0x24a
mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc29c9
db 0feh, 0cch
; dec ah ; fe cc ; 0xc29cc
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc29ce
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc29ce
jne short 02a1dh ; 75 48 ; 0xc29d3
mov dx, word [bp-010h] ; 8b 56 f0 ; 0xc29d5 vgabios.c:1910
imul dx, word [bp-00eh] ; 0f af 56 f2 ; 0xc29d8
@ -4795,7 +4795,7 @@ biosfn_write_teletype: ; 0xc2812 LB 0x24a
add dx, dx ; 01 d2 ; 0xc29fa
add si, dx ; 01 d6 ; 0xc29fc
inc si ; 46 ; 0xc29fe vgabios.c:1911
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc29ff vgabios.c:45
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc29ff vgabios.c:45
mov bl, byte [es:si] ; 26 8a 1c ; 0xc2a03
push strict byte 00001h ; 6a 01 ; 0xc2a06 vgabios.c:1912
movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc2a08
@ -5146,7 +5146,7 @@ set_gfx_font: ; 0xc2c9c LB 0x49
jbe short 02cbch ; 76 02 ; 0xc2cb8
mov DL, strict byte 002h ; b2 02 ; 0xc2cba vgabios.c:2033
movzx bx, dl ; 0f b6 da ; 0xc2cbc vgabios.c:2034
mov al, byte [bx+07dfah] ; 8a 87 fa 7d ; 0xc2cbf
mov al, byte [bx+07dfbh] ; 8a 87 fb 7d ; 0xc2cbf
mov byte [bp+004h], al ; 88 46 04 ; 0xc2cc3
mov bx, 00085h ; bb 85 00 ; 0xc2cc6 vgabios.c:62
mov ax, strict word 00040h ; b8 40 00 ; 0xc2cc9
@ -5187,7 +5187,7 @@ biosfn_load_gfx_8_14_chars: ; 0xc2d01 LB 0x1e
push cx ; 51 ; 0xc2d09
movzx cx, al ; 0f b6 c8 ; 0xc2d0a
mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2d0d
mov ax, 05d69h ; b8 69 5d ; 0xc2d10
mov ax, 05d6ah ; b8 6a 5d ; 0xc2d10
mov dx, ds ; 8c da ; 0xc2d13
call 02c9ch ; e8 84 ff ; 0xc2d15
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d18 vgabios.c:2054
@ -5205,7 +5205,7 @@ biosfn_load_gfx_8_8_dd_chars: ; 0xc2d1f LB 0x1e
push cx ; 51 ; 0xc2d27
movzx cx, al ; 0f b6 c8 ; 0xc2d28
mov bx, strict word 00008h ; bb 08 00 ; 0xc2d2b
mov ax, 05569h ; b8 69 55 ; 0xc2d2e
mov ax, 0556ah ; b8 6a 55 ; 0xc2d2e
mov dx, ds ; 8c da ; 0xc2d31
call 02c9ch ; e8 66 ff ; 0xc2d33
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d36 vgabios.c:2058
@ -5223,7 +5223,7 @@ biosfn_load_gfx_8_16_chars: ; 0xc2d3d LB 0x1e
push cx ; 51 ; 0xc2d45
movzx cx, al ; 0f b6 c8 ; 0xc2d46
mov bx, strict word 00010h ; bb 10 00 ; 0xc2d49
mov ax, 06b69h ; b8 69 6b ; 0xc2d4c
mov ax, 06b6ah ; b8 6a 6b ; 0xc2d4c
mov dx, ds ; 8c da ; 0xc2d4f
call 02c9ch ; e8 48 ff ; 0xc2d51
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d54 vgabios.c:2062
@ -5355,7 +5355,7 @@ biosfn_read_state_info: ; 0xc2e32 LB 0x1f2
mov word [bp-00ah], ax ; 89 46 f6 ; 0xc2e4f vgabios.c:58
mov ax, ds ; 8c d8 ; 0xc2e52 vgabios.c:2150
mov es, dx ; 8e c2 ; 0xc2e54 vgabios.c:72
mov word [es:bx], 054ffh ; 26 c7 07 ff 54 ; 0xc2e56
mov word [es:bx], 05500h ; 26 c7 07 00 55 ; 0xc2e56
mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc2e5b
lea di, [bx+004h] ; 8d 7f 04 ; 0xc2e5f vgabios.c:2155
mov cx, strict word 0001eh ; b9 1e 00 ; 0xc2e62
@ -6231,7 +6231,7 @@ find_vga_entry: ; 0xc35ed LB 0x27
jnbe short 0360eh ; 77 0e ; 0xc35fe
movzx bx, al ; 0f b6 d8 ; 0xc3600
sal bx, 003h ; c1 e3 03 ; 0xc3603
cmp dl, byte [bx+047abh] ; 3a 97 ab 47 ; 0xc3606
cmp dl, byte [bx+047ach] ; 3a 97 ac 47 ; 0xc3606
jne short 035fah ; 75 ee ; 0xc360a
mov ah, al ; 88 c4 ; 0xc360c
mov al, ah ; 88 e0 ; 0xc360e vgabios.c:2438
@ -6449,7 +6449,7 @@ int10_func: ; 0xc36ac LB 0x47c
push strict byte 00000h ; 6a 00 ; 0xc389a
movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc389c
mov cx, 00100h ; b9 00 01 ; 0xc38a0
mov bx, 05d69h ; bb 69 5d ; 0xc38a3
mov bx, 05d6ah ; bb 6a 5d ; 0xc38a3
mov dx, 0c000h ; ba 00 c0 ; 0xc38a6
call 02c0ah ; e8 5e f3 ; 0xc38a9
jmp near 03b21h ; e9 72 02 ; 0xc38ac
@ -6459,7 +6459,7 @@ int10_func: ; 0xc36ac LB 0x47c
push strict byte 00000h ; 6a 00 ; 0xc38b6
movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38b8
mov cx, 00100h ; b9 00 01 ; 0xc38bc
mov bx, 05569h ; bb 69 55 ; 0xc38bf
mov bx, 0556ah ; bb 6a 55 ; 0xc38bf
jmp short 038a6h ; eb e2 ; 0xc38c2
mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc38c4 vgabios.c:2629
xor ah, ah ; 30 e4 ; 0xc38c7
@ -6471,7 +6471,7 @@ int10_func: ; 0xc36ac LB 0x47c
push strict byte 00000h ; 6a 00 ; 0xc38d6
movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38d8
mov cx, 00100h ; b9 00 01 ; 0xc38dc
mov bx, 06b69h ; bb 69 6b ; 0xc38df
mov bx, 06b6ah ; bb 6a 6b ; 0xc38df
jmp short 038a6h ; eb c2 ; 0xc38e2
mov dx, word [bp+008h] ; 8b 56 08 ; 0xc38e4 vgabios.c:2636
mov ax, word [bp+016h] ; 8b 46 16 ; 0xc38e7
@ -6992,7 +6992,7 @@ vbe_biosfn_return_controller_information: ; 0xc3cf2 LB 0x125
db 066h, 026h, 0c7h, 007h, 056h, 045h, 053h, 041h
; mov dword [es:bx], strict dword 041534556h ; 66 26 c7 07 56 45 53 41 ; 0xc3d5d
mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3d65 vbe.c:338
mov word [es:bx+006h], 07dfeh ; 26 c7 47 06 fe 7d ; 0xc3d6b vbe.c:341
mov word [es:bx+006h], 07e00h ; 26 c7 47 06 00 7e ; 0xc3d6b vbe.c:341
mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3d71
db 066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 000h
; mov dword [es:bx+00ah], strict dword 000000001h ; 66 26 c7 47 0a 01 00 00 00; 0xc3d75 vbe.c:344
@ -7008,11 +7008,11 @@ vbe_biosfn_return_controller_information: ; 0xc3cf2 LB 0x125
cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3d9c vbe.c:356
je short 03dc6h ; 74 24 ; 0xc3da0
mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc3da2 vbe.c:359
mov word [es:bx+016h], 07e13h ; 26 c7 47 16 13 7e ; 0xc3da8 vbe.c:360
mov word [es:bx+016h], 07e15h ; 26 c7 47 16 15 7e ; 0xc3da8 vbe.c:360
mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc3dae
mov word [es:bx+01ah], 07e30h ; 26 c7 47 1a 30 7e ; 0xc3db2 vbe.c:361
mov word [es:bx+01ah], 07e32h ; 26 c7 47 1a 32 7e ; 0xc3db2 vbe.c:361
mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc3db8
mov word [es:bx+01eh], 07e4eh ; 26 c7 47 1e 4e 7e ; 0xc3dbc vbe.c:362
mov word [es:bx+01eh], 07e50h ; 26 c7 47 1e 50 7e ; 0xc3dbc vbe.c:362
mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc3dc2
mov dx, cx ; 89 ca ; 0xc3dc6 vbe.c:369
add dx, strict byte 0001bh ; 83 c2 1b ; 0xc3dc8
@ -7732,12 +7732,12 @@ vesa_pm_end: ; 0xc4754 LB 0x1
; Padding 0x2b bytes at 0xc4755
times 43 db 0
section _DATA progbits vstart=0x4780 align=1 ; size=0x3742 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3742 -> off=0x0 cb=000000000000002b uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2b
db 'Oracle VirtualBox Version 7.1.8 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ab LB 0x3717 -> off=0x0 cb=0000000000000080 uValue=00000000000c002b 'vga_modes'
vga_modes: ; 0xc47ab LB 0x80
section _DATA progbits vstart=0x4780 align=1 ; size=0x3745 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3745 -> off=0x0 cb=000000000000002c uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2c
db 'Oracle VirtualBox Version 7.1.10 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ac LB 0x3719 -> off=0x0 cb=0000000000000080 uValue=00000000000c002c 'vga_modes'
vga_modes: ; 0xc47ac LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
@ -7746,14 +7746,14 @@ vga_modes: ; 0xc47ab LB 0x80
db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
; disGetNextSymbol 0xc482b LB 0x3697 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ab 'line_to_vpti'
line_to_vpti: ; 0xc482b LB 0x10
; disGetNextSymbol 0xc482c LB 0x3699 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ac 'line_to_vpti'
line_to_vpti: ; 0xc482c LB 0x10
db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
; disGetNextSymbol 0xc483b LB 0x3687 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bb 'dac_regs'
dac_regs: ; 0xc483b LB 0x4
; disGetNextSymbol 0xc483c LB 0x3689 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bc 'dac_regs'
dac_regs: ; 0xc483c LB 0x4
dd 0ff3f3f3fh
; disGetNextSymbol 0xc483f LB 0x3683 -> off=0x0 cb=0000000000000780 uValue=00000000000c00bf 'video_param_table'
video_param_table: ; 0xc483f LB 0x780
; disGetNextSymbol 0xc4840 LB 0x3685 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c0 'video_param_table'
video_param_table: ; 0xc4840 LB 0x780
db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
@ -7874,8 +7874,8 @@ video_param_table: ; 0xc483f LB 0x780
db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
; disGetNextSymbol 0xc4fbf LB 0x2f03 -> off=0x0 cb=00000000000000c0 uValue=00000000000c083f 'palette0'
palette0: ; 0xc4fbf LB 0xc0
; disGetNextSymbol 0xc4fc0 LB 0x2f05 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0840 'palette0'
palette0: ; 0xc4fc0 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
@ -7888,8 +7888,8 @@ palette0: ; 0xc4fbf LB 0xc0
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc507f LB 0x2e43 -> off=0x0 cb=00000000000000c0 uValue=00000000000c08ff 'palette1'
palette1: ; 0xc507f LB 0xc0
; disGetNextSymbol 0xc5080 LB 0x2e45 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0900 'palette1'
palette1: ; 0xc5080 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
@ -7902,8 +7902,8 @@ palette1: ; 0xc507f LB 0xc0
db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc513f LB 0x2d83 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09bf 'palette2'
palette2: ; 0xc513f LB 0xc0
; disGetNextSymbol 0xc5140 LB 0x2d85 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c0 'palette2'
palette2: ; 0xc5140 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
@ -7916,8 +7916,8 @@ palette2: ; 0xc513f LB 0xc0
db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc51ff LB 0x2cc3 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a7f 'palette3'
palette3: ; 0xc51ff LB 0x300
; disGetNextSymbol 0xc5200 LB 0x2cc5 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a80 'palette3'
palette3: ; 0xc5200 LB 0x300
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
@ -7966,24 +7966,24 @@ palette3: ; 0xc51ff LB 0x300
db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc54ff LB 0x29c3 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d7f 'static_functionality'
static_functionality: ; 0xc54ff LB 0x10
; disGetNextSymbol 0xc5500 LB 0x29c5 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d80 'static_functionality'
static_functionality: ; 0xc5500 LB 0x10
db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc550f LB 0x29b3 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d8f '_dcc_table'
_dcc_table: ; 0xc550f LB 0x24
; disGetNextSymbol 0xc5510 LB 0x29b5 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d90 '_dcc_table'
_dcc_table: ; 0xc5510 LB 0x24
db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5533 LB 0x298f -> off=0x0 cb=000000000000001a uValue=00000000000c0db3 '_secondary_save_area'
_secondary_save_area: ; 0xc5533 LB 0x1a
db 01ah, 000h, 00fh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5534 LB 0x2991 -> off=0x0 cb=000000000000001a uValue=00000000000c0db4 '_secondary_save_area'
_secondary_save_area: ; 0xc5534 LB 0x1a
db 01ah, 000h, 010h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc554d LB 0x2975 -> off=0x0 cb=000000000000001c uValue=00000000000c0dcd '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554d LB 0x1c
db 03fh, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 033h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5569 LB 0x2959 -> off=0x0 cb=0000000000000800 uValue=00000000000c0de9 'vgafont8'
vgafont8: ; 0xc5569 LB 0x800
; disGetNextSymbol 0xc554e LB 0x2977 -> off=0x0 cb=000000000000001c uValue=00000000000c0dce '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554e LB 0x1c
db 040h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 034h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc556a LB 0x295b -> off=0x0 cb=0000000000000800 uValue=00000000000c0dea 'vgafont8'
vgafont8: ; 0xc556a LB 0x800
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
@ -8112,8 +8112,8 @@ vgafont8: ; 0xc5569 LB 0x800
db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5d69 LB 0x2159 -> off=0x0 cb=0000000000000e00 uValue=00000000000c15e9 'vgafont14'
vgafont14: ; 0xc5d69 LB 0xe00
; disGetNextSymbol 0xc5d6a LB 0x215b -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ea 'vgafont14'
vgafont14: ; 0xc5d6a LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
@ -8338,8 +8338,8 @@ vgafont14: ; 0xc5d69 LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc6b69 LB 0x1359 -> off=0x0 cb=0000000000001000 uValue=00000000000c23e9 'vgafont16'
vgafont16: ; 0xc6b69 LB 0x1000
; disGetNextSymbol 0xc6b6a LB 0x135b -> off=0x0 cb=0000000000001000 uValue=00000000000c23ea 'vgafont16'
vgafont16: ; 0xc6b6a LB 0x1000
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
@ -8596,8 +8596,8 @@ vgafont16: ; 0xc6b69 LB 0x1000
db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc7b69 LB 0x359 -> off=0x0 cb=000000000000012d uValue=00000000000c33e9 'vgafont14alt'
vgafont14alt: ; 0xc7b69 LB 0x12d
; disGetNextSymbol 0xc7b6a LB 0x35b -> off=0x0 cb=000000000000012d uValue=00000000000c33ea 'vgafont14alt'
vgafont14alt: ; 0xc7b6a LB 0x12d
db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
@ -8617,8 +8617,8 @@ vgafont14alt: ; 0xc7b69 LB 0x12d
db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc7c96 LB 0x22c -> off=0x0 cb=0000000000000144 uValue=00000000000c3516 'vgafont16alt'
vgafont16alt: ; 0xc7c96 LB 0x144
; disGetNextSymbol 0xc7c97 LB 0x22e -> off=0x0 cb=0000000000000144 uValue=00000000000c3517 'vgafont16alt'
vgafont16alt: ; 0xc7c97 LB 0x144
db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
@ -8640,53 +8640,56 @@ vgafont16alt: ; 0xc7c96 LB 0x144
db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
db 006h, 000h, 000h, 000h
; disGetNextSymbol 0xc7dda LB 0xe8 -> off=0x0 cb=0000000000000008 uValue=00000000000c365a '_cga_msr'
_cga_msr: ; 0xc7dda LB 0x8
; disGetNextSymbol 0xc7ddb LB 0xea -> off=0x0 cb=0000000000000008 uValue=00000000000c365b '_cga_msr'
_cga_msr: ; 0xc7ddb LB 0x8
db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
; disGetNextSymbol 0xc7de2 LB 0xe0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de2 LB 0x8
; disGetNextSymbol 0xc7de3 LB 0xe2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3663 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de3 LB 0x8
db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7dea LB 0xd8 -> off=0x0 cb=0000000000000008 uValue=00000000000c366a 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7dea LB 0x8
; disGetNextSymbol 0xc7deb LB 0xda -> off=0x0 cb=0000000000000008 uValue=00000000000c366b 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7deb LB 0x8
db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7df2 LB 0xd0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3672 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df2 LB 0x8
; disGetNextSymbol 0xc7df3 LB 0xd2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3673 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df3 LB 0x8
db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
; disGetNextSymbol 0xc7dfa LB 0xc8 -> off=0x0 cb=0000000000000004 uValue=00000000000c367a 'row_tbl'
row_tbl: ; 0xc7dfa LB 0x4
dd 02b190e00h
; disGetNextSymbol 0xc7dfe LB 0xc4 -> off=0x0 cb=0000000000000015 uValue=00000000000c367e '_vbebios_copyright'
_vbebios_copyright: ; 0xc7dfe LB 0x15
; disGetNextSymbol 0xc7dfb LB 0xca -> off=0x0 cb=0000000000000005 uValue=00000000000c367b 'row_tbl'
row_tbl: ; 0xc7dfb LB 0x5
db 000h, 00eh, 019h, 02bh, 000h
; disGetNextSymbol 0xc7e00 LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c3680 '_vbebios_copyright'
_vbebios_copyright: ; 0xc7e00 LB 0x15
db 'VirtualBox VESA BIOS', 000h
; disGetNextSymbol 0xc7e13 LB 0xaf -> off=0x0 cb=000000000000001d uValue=00000000000c3693 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e13 LB 0x1d
; disGetNextSymbol 0xc7e15 LB 0xb0 -> off=0x0 cb=000000000000001d uValue=00000000000c3695 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e15 LB 0x1d
db 'Oracle and/or its affiliates', 000h
; disGetNextSymbol 0xc7e30 LB 0x92 -> off=0x0 cb=000000000000001e uValue=00000000000c36b0 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e30 LB 0x1e
; disGetNextSymbol 0xc7e32 LB 0x93 -> off=0x0 cb=000000000000001e uValue=00000000000c36b2 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e32 LB 0x1e
db 'Oracle VirtualBox VBE Adapter', 000h
; disGetNextSymbol 0xc7e4e LB 0x74 -> off=0x0 cb=0000000000000020 uValue=00000000000c36ce '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e4e LB 0x20
db 'Oracle VirtualBox Version 7.1.8', 000h
; disGetNextSymbol 0xc7e6e LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36ee '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e6e LB 0x2b
; disGetNextSymbol 0xc7e50 LB 0x75 -> off=0x0 cb=0000000000000021 uValue=00000000000c36d0 '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e50 LB 0x21
db 'Oracle VirtualBox Version 7.1.10', 000h
; disGetNextSymbol 0xc7e71 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f1 '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e71 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
; disGetNextSymbol 0xc7e99 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3719 '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e99 LB 0x29
; disGetNextSymbol 0xc7e9c LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c371c '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e9c LB 0x29
db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
section CONST progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x1 bytes at 0xc7ec5
db 001h
section CONST2 progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
section CONST progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x13e bytes at 0xc7ec2
db 001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
db 065h, 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h
db 06ch, 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h
db 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh
db 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh
db 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h
db 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h
section CONST2 progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x13a bytes at 0xc7ec6
db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h
db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch
db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h, 061h
db 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh, 06fh
db 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h
db 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h
db 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h
db 061h, 042h, 069h, 06fh, 073h, 033h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
@ -8698,4 +8701,4 @@ section CONST2 progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 019h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 057h

View file

@ -1 +1 @@
ec45a9e8132927ccc79fa6a7e43bf94f *VBoxVgaBios386.rom
f636d11bd1695ad6388b853545e0677d *VBoxVgaBios386.rom

View file

@ -1580,7 +1580,7 @@ init_bios_area: ; 0xc0a28 LB 0x3e
mov word [es:bx+00087h], 0f960h ; 26 c7 87 87 00 60 f9 ; 0xc0a45 vgabios.c:234
mov byte [es:bx+00089h], 051h ; 26 c6 87 89 00 51 ; 0xc0a4c vgabios.c:238
mov byte [es:bx+065h], 009h ; 26 c6 47 65 09 ; 0xc0a52 vgabios.c:240
mov word [es:bx+000a8h], 0554dh ; 26 c7 87 a8 00 4d 55 ; 0xc0a57 vgabios.c:242
mov word [es:bx+000a8h], 0554eh ; 26 c7 87 a8 00 4e 55 ; 0xc0a57 vgabios.c:242
mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5e
pop bp ; 5d ; 0xc0a63 vgabios.c:243
pop bx ; 5b ; 0xc0a64
@ -2093,7 +2093,7 @@ vga_read_char_attr: ; 0xc0ded LB 0x147
xor bh, bh ; 30 ff ; 0xc0e5c
mov CL, strict byte 003h ; b1 03 ; 0xc0e5e
sal bx, CL ; d3 e3 ; 0xc0e60
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc0e62
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc0e62
jne short 00e9fh ; 75 36 ; 0xc0e67
mov ax, di ; 89 f8 ; 0xc0e69 vgabios.c:559
mul dx ; f7 e2 ; 0xc0e6b
@ -2113,13 +2113,13 @@ vga_read_char_attr: ; 0xc0ded LB 0x147
sal ax, 1 ; d1 e0 ; 0xc0e89
mov di, word [bp-010h] ; 8b 7e f0 ; 0xc0e8b
add di, ax ; 01 c7 ; 0xc0e8e
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc0e90 vgabios.c:55
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc0e90 vgabios.c:55
mov ax, word [es:di] ; 26 8b 05 ; 0xc0e94
push SS ; 16 ; 0xc0e97 vgabios.c:58
pop ES ; 07 ; 0xc0e98
mov word [es:si], ax ; 26 89 04 ; 0xc0e99
jmp near 00f2bh ; e9 8c 00 ; 0xc0e9c vgabios.c:561
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc0e9f vgabios.c:562
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc0e9f vgabios.c:562
cmp bl, 005h ; 80 fb 05 ; 0xc0ea3
je short 00efeh ; 74 56 ; 0xc0ea6
cmp bl, 002h ; 80 fb 02 ; 0xc0ea8
@ -2227,18 +2227,18 @@ vga_get_font_info: ; 0xc0f44 LB 0x83
retn 00002h ; c2 02 00 ; 0xc0f9d
mov bx, 0010ch ; bb 0c 01 ; 0xc0fa0 vgabios.c:67
jmp short 00f5eh ; eb b9 ; 0xc0fa3
mov dx, 05d69h ; ba 69 5d ; 0xc0fa5 vgabios.c:601
mov dx, 05d6ah ; ba 6a 5d ; 0xc0fa5 vgabios.c:601
mov ax, ds ; 8c d8 ; 0xc0fa8
jmp short 00f69h ; eb bd ; 0xc0faa vgabios.c:602
mov dx, 05569h ; ba 69 55 ; 0xc0fac vgabios.c:604
mov dx, 0556ah ; ba 6a 55 ; 0xc0fac vgabios.c:604
jmp short 00fa8h ; eb f7 ; 0xc0faf
mov dx, 05969h ; ba 69 59 ; 0xc0fb1 vgabios.c:607
mov dx, 0596ah ; ba 6a 59 ; 0xc0fb1 vgabios.c:607
jmp short 00fa8h ; eb f2 ; 0xc0fb4
mov dx, 07b69h ; ba 69 7b ; 0xc0fb6 vgabios.c:610
mov dx, 07b6ah ; ba 6a 7b ; 0xc0fb6 vgabios.c:610
jmp short 00fa8h ; eb ed ; 0xc0fb9
mov dx, 06b69h ; ba 69 6b ; 0xc0fbb vgabios.c:613
mov dx, 06b6ah ; ba 6a 6b ; 0xc0fbb vgabios.c:613
jmp short 00fa8h ; eb e8 ; 0xc0fbe
mov dx, 07c96h ; ba 96 7c ; 0xc0fc0 vgabios.c:616
mov dx, 07c97h ; ba 97 7c ; 0xc0fc0 vgabios.c:616
jmp short 00fa8h ; eb e3 ; 0xc0fc3
jmp short 00f9ah ; eb d3 ; 0xc0fc5 vgabios.c:622
; disGetNextSymbol 0xc0fc7 LB 0x359d -> off=0x0 cb=000000000000016d uValue=00000000000c0fc7 'vga_read_pixel'
@ -2265,10 +2265,10 @@ vga_read_pixel: ; 0xc0fc7 LB 0x16d
xor bh, bh ; 30 ff ; 0xc0ff3
mov CL, strict byte 003h ; b1 03 ; 0xc0ff5
sal bx, CL ; d3 e3 ; 0xc0ff7
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc0ff9
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc0ff9
jne short 01003h ; 75 03 ; 0xc0ffe
jmp near 0112dh ; e9 2a 01 ; 0xc1000 vgabios.c:646
mov ch, byte [bx+047adh] ; 8a af ad 47 ; 0xc1003 vgabios.c:649
mov ch, byte [bx+047aeh] ; 8a af ae 47 ; 0xc1003 vgabios.c:649
cmp ch, cl ; 38 cd ; 0xc1007
jc short 0101ah ; 72 0f ; 0xc1009
jbe short 01022h ; 76 15 ; 0xc100b
@ -2324,7 +2324,7 @@ vga_read_pixel: ; 0xc0fc7 LB 0x16d
inc byte [bp-008h] ; fe 46 f8 ; 0xc1087 vgabios.c:661
jmp short 0105eh ; eb d2 ; 0xc108a
jmp near 01125h ; e9 96 00 ; 0xc108c
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc108f vgabios.c:664
mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc108f vgabios.c:664
xor ah, ah ; 30 e4 ; 0xc1093
mov cx, strict word 00004h ; b9 04 00 ; 0xc1095
sub cx, ax ; 29 c1 ; 0xc1098
@ -2347,7 +2347,7 @@ vga_read_pixel: ; 0xc0fc7 LB 0x16d
xor bh, bh ; 30 ff ; 0xc10c2
mov CL, strict byte 003h ; b1 03 ; 0xc10c4
sal bx, CL ; d3 e3 ; 0xc10c6
cmp byte [bx+047aeh], 002h ; 80 bf ae 47 02 ; 0xc10c8
cmp byte [bx+047afh], 002h ; 80 bf af 47 02 ; 0xc10c8
jne short 010eah ; 75 1b ; 0xc10cd
mov cx, si ; 89 f1 ; 0xc10cf vgabios.c:669
xor ch, ch ; 30 ed ; 0xc10d1
@ -2717,7 +2717,7 @@ biosfn_set_active_page: ; 0xc135c LB 0xd5
mov CL, strict byte 003h ; b1 03 ; 0xc1399
mov si, bx ; 89 de ; 0xc139b
sal si, CL ; d3 e6 ; 0xc139d
cmp byte [si+047ach], 000h ; 80 bc ac 47 00 ; 0xc139f
cmp byte [si+047adh], 000h ; 80 bc ad 47 00 ; 0xc139f
jne short 013e1h ; 75 3b ; 0xc13a4
mov bx, strict word 0004ah ; bb 4a 00 ; 0xc13a6 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc13a9
@ -2744,12 +2744,12 @@ biosfn_set_active_page: ; 0xc135c LB 0xd5
lea ax, [di+001h] ; 8d 45 01 ; 0xc13da
mul bx ; f7 e3 ; 0xc13dd
jmp short 013f2h ; eb 11 ; 0xc13df vgabios.c:860
mov bl, byte [bx+0482bh] ; 8a 9f 2b 48 ; 0xc13e1 vgabios.c:862
mov bl, byte [bx+0482ch] ; 8a 9f 2c 48 ; 0xc13e1 vgabios.c:862
mov CL, strict byte 006h ; b1 06 ; 0xc13e5
sal bx, CL ; d3 e3 ; 0xc13e7
mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc13e9
xor ah, ah ; 30 e4 ; 0xc13ec
mul word [bx+04842h] ; f7 a7 42 48 ; 0xc13ee
mul word [bx+04843h] ; f7 a7 43 48 ; 0xc13ee
mov cx, ax ; 89 c1 ; 0xc13f2
mov bx, strict word 00063h ; bb 63 00 ; 0xc13f4 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc13f7
@ -2794,7 +2794,7 @@ find_vpti: ; 0xc1431 LB 0x48
mov CL, strict byte 003h ; b1 03 ; 0xc143b
mov si, bx ; 89 de ; 0xc143d
sal si, CL ; d3 e6 ; 0xc143f
cmp byte [si+047ach], 000h ; 80 bc ac 47 00 ; 0xc1441
cmp byte [si+047adh], 000h ; 80 bc ad 47 00 ; 0xc1441
jne short 0146eh ; 75 26 ; 0xc1446
mov si, 00089h ; be 89 00 ; 0xc1448 vgabios.c:47
mov ax, strict word 00040h ; b8 40 00 ; 0xc144b
@ -2802,16 +2802,16 @@ find_vpti: ; 0xc1431 LB 0x48
mov al, byte [es:si] ; 26 8a 04 ; 0xc1450
test AL, strict byte 010h ; a8 10 ; 0xc1453 vgabios.c:923
je short 0145dh ; 74 06 ; 0xc1455
mov al, byte [bx+07df2h] ; 8a 87 f2 7d ; 0xc1457 vgabios.c:924
mov al, byte [bx+07df3h] ; 8a 87 f3 7d ; 0xc1457 vgabios.c:924
jmp short 0146bh ; eb 0e ; 0xc145b vgabios.c:925
test AL, strict byte 080h ; a8 80 ; 0xc145d
je short 01467h ; 74 06 ; 0xc145f
mov al, byte [bx+07de2h] ; 8a 87 e2 7d ; 0xc1461 vgabios.c:926
mov al, byte [bx+07de3h] ; 8a 87 e3 7d ; 0xc1461 vgabios.c:926
jmp short 0146bh ; eb 04 ; 0xc1465 vgabios.c:927
mov al, byte [bx+07deah] ; 8a 87 ea 7d ; 0xc1467 vgabios.c:928
mov al, byte [bx+07debh] ; 8a 87 eb 7d ; 0xc1467 vgabios.c:928
cbw ; 98 ; 0xc146b
jmp short 01474h ; eb 06 ; 0xc146c vgabios.c:929
mov al, byte [bx+0482bh] ; 8a 87 2b 48 ; 0xc146e vgabios.c:930
mov al, byte [bx+0482ch] ; 8a 87 2c 48 ; 0xc146e vgabios.c:930
xor ah, ah ; 30 e4 ; 0xc1472
pop bp ; 5d ; 0xc1474 vgabios.c:933
pop si ; 5e ; 0xc1475
@ -2876,13 +2876,13 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
mov CL, strict byte 003h ; b1 03 ; 0xc14f6 vgabios.c:999
mov bx, dx ; 89 d3 ; 0xc14f8
sal bx, CL ; d3 e3 ; 0xc14fa
mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc14fc
mov al, byte [bx+047b2h] ; 8a 87 b2 47 ; 0xc14fc
mov dx, 003c6h ; ba c6 03 ; 0xc1500
out DX, AL ; ee ; 0xc1503
xor al, al ; 30 c0 ; 0xc1504 vgabios.c:1002
mov dx, 003c8h ; ba c8 03 ; 0xc1506
out DX, AL ; ee ; 0xc1509
mov bl, byte [bx+047b2h] ; 8a 9f b2 47 ; 0xc150a vgabios.c:1005
mov bl, byte [bx+047b3h] ; 8a 9f b3 47 ; 0xc150a vgabios.c:1005
cmp bl, 001h ; 80 fb 01 ; 0xc150e
jc short 01523h ; 72 10 ; 0xc1511
jbe short 0152eh ; 76 19 ; 0xc1513
@ -2894,24 +2894,24 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
jmp near 01953h ; e9 30 04 ; 0xc1520
test bl, bl ; 84 db ; 0xc1523
jne short 01544h ; 75 1d ; 0xc1525
mov word [bp-016h], 04fbfh ; c7 46 ea bf 4f ; 0xc1527 vgabios.c:1007
mov word [bp-016h], 04fc0h ; c7 46 ea c0 4f ; 0xc1527 vgabios.c:1007
jmp short 01544h ; eb 16 ; 0xc152c vgabios.c:1008
mov word [bp-016h], 0507fh ; c7 46 ea 7f 50 ; 0xc152e vgabios.c:1010
mov word [bp-016h], 05080h ; c7 46 ea 80 50 ; 0xc152e vgabios.c:1010
jmp short 01544h ; eb 0f ; 0xc1533 vgabios.c:1011
mov word [bp-016h], 0513fh ; c7 46 ea 3f 51 ; 0xc1535 vgabios.c:1013
mov word [bp-016h], 05140h ; c7 46 ea 40 51 ; 0xc1535 vgabios.c:1013
jmp short 01544h ; eb 08 ; 0xc153a vgabios.c:1014
jmp near 015b8h ; e9 79 00 ; 0xc153c
mov word [bp-016h], 051ffh ; c7 46 ea ff 51 ; 0xc153f vgabios.c:1016
mov word [bp-016h], 05200h ; c7 46 ea 00 52 ; 0xc153f vgabios.c:1016
mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc1544 vgabios.c:1020
xor bh, bh ; 30 ff ; 0xc1547
mov CL, strict byte 003h ; b1 03 ; 0xc1549
sal bx, CL ; d3 e3 ; 0xc154b
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc154d
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc154d
jne short 01563h ; 75 0f ; 0xc1552
mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1554 vgabios.c:1022
cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc1557
jne short 01563h ; 75 05 ; 0xc155c
mov word [bp-016h], 0507fh ; c7 46 ea 7f 50 ; 0xc155e vgabios.c:1023
mov word [bp-016h], 05080h ; c7 46 ea 80 50 ; 0xc155e vgabios.c:1023
xor bx, bx ; 31 db ; 0xc1563 vgabios.c:1026
jmp short 01576h ; eb 0f ; 0xc1565
xor al, al ; 30 c0 ; 0xc1567 vgabios.c:1033
@ -2927,9 +2927,9 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
mov CL, strict byte 003h ; b1 03 ; 0xc157b
mov di, ax ; 89 c7 ; 0xc157d
sal di, CL ; d3 e7 ; 0xc157f
mov al, byte [di+047b2h] ; 8a 85 b2 47 ; 0xc1581
mov al, byte [di+047b3h] ; 8a 85 b3 47 ; 0xc1581
mov di, ax ; 89 c7 ; 0xc1585
mov al, byte [di+0483bh] ; 8a 85 3b 48 ; 0xc1587
mov al, byte [di+0483ch] ; 8a 85 3c 48 ; 0xc1587
cmp bx, ax ; 39 c3 ; 0xc158b
jnbe short 01567h ; 77 d8 ; 0xc158d
mov ax, bx ; 89 d8 ; 0xc158f
@ -3043,7 +3043,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor bh, bh ; 30 ff ; 0xc1686
mov CL, strict byte 003h ; b1 03 ; 0xc1688
sal bx, CL ; d3 e3 ; 0xc168a
cmp byte [bx+047adh], 001h ; 80 bf ad 47 01 ; 0xc168c
cmp byte [bx+047aeh], 001h ; 80 bf ae 47 01 ; 0xc168c
jne short 01698h ; 75 05 ; 0xc1691
mov bx, 003b4h ; bb b4 03 ; 0xc1693
jmp short 0169bh ; eb 03 ; 0xc1696
@ -3085,9 +3085,9 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor bh, bh ; 30 ff ; 0xc16e6
mov CL, strict byte 003h ; b1 03 ; 0xc16e8
sal bx, CL ; d3 e3 ; 0xc16ea
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc16ec
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc16ec
jne short 01705h ; 75 12 ; 0xc16f1
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc16f3 vgabios.c:1102
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc16f3 vgabios.c:1102
mov cx, 04000h ; b9 00 40 ; 0xc16f7
mov ax, 00720h ; b8 20 07 ; 0xc16fa
xor di, di ; 31 ff ; 0xc16fd
@ -3096,7 +3096,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
jmp short 01741h ; eb 3c ; 0xc1703 vgabios.c:1104
cmp byte [bp-00ch], 00dh ; 80 7e f4 0d ; 0xc1705 vgabios.c:1106
jnc short 0171ch ; 73 11 ; 0xc1709
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc170b vgabios.c:1108
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc170b vgabios.c:1108
mov cx, 04000h ; b9 00 40 ; 0xc170f
xor ax, ax ; 31 c0 ; 0xc1712
xor di, di ; 31 ff ; 0xc1714
@ -3113,7 +3113,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
mov word [bp-022h], ax ; 89 46 de ; 0xc1728
mov AL, strict byte 00fh ; b0 0f ; 0xc172b vgabios.c:1114
out DX, AL ; ee ; 0xc172d
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc172e vgabios.c:1115
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc172e vgabios.c:1115
mov cx, 08000h ; b9 00 80 ; 0xc1732
xor ax, ax ; 31 c0 ; 0xc1735
xor di, di ; 31 ff ; 0xc1737
@ -3165,7 +3165,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
jnbe short 017e1h ; 77 27 ; 0xc17b8
mov bl, al ; 88 c3 ; 0xc17ba vgabios.c:1136
xor bh, bh ; 30 ff ; 0xc17bc
mov al, byte [bx+07ddah] ; 8a 87 da 7d ; 0xc17be vgabios.c:50
mov al, byte [bx+07ddbh] ; 8a 87 db 7d ; 0xc17be vgabios.c:50
mov bx, strict word 00065h ; bb 65 00 ; 0xc17c2 vgabios.c:52
mov byte [es:bx], al ; 26 88 07 ; 0xc17c5
cmp byte [bp-00ch], 006h ; 80 7e f4 06 ; 0xc17c8 vgabios.c:1137
@ -3181,7 +3181,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor bh, bh ; 30 ff ; 0xc17e4
mov CL, strict byte 003h ; b1 03 ; 0xc17e6
sal bx, CL ; d3 e3 ; 0xc17e8
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc17ea
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc17ea
jne short 017fah ; 75 09 ; 0xc17ef
mov dx, strict word 00007h ; ba 07 00 ; 0xc17f1 vgabios.c:1143
mov ax, strict word 00006h ; b8 06 00 ; 0xc17f4
@ -3202,7 +3202,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor bh, bh ; 30 ff ; 0xc1817
mov CL, strict byte 003h ; b1 03 ; 0xc1819
sal bx, CL ; d3 e3 ; 0xc181b
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc181d
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc181d
jne short 01892h ; 75 6e ; 0xc1822
les bx, [bp-014h] ; c4 5e ec ; 0xc1824 vgabios.c:1157
mov bx, word [es:bx+008h] ; 26 8b 5f 08 ; 0xc1827
@ -3224,7 +3224,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
push ax ; 50 ; 0xc1855
push ax ; 50 ; 0xc1856
mov cx, 00100h ; b9 00 01 ; 0xc1857
mov bx, 05569h ; bb 69 55 ; 0xc185a
mov bx, 0556ah ; bb 6a 55 ; 0xc185a
mov dx, 0c000h ; ba 00 c0 ; 0xc185d
call 02e8ch ; e8 29 16 ; 0xc1860
jmp short 018bah ; eb 55 ; 0xc1863 vgabios.c:1162
@ -3236,14 +3236,14 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor al, al ; 30 c0 ; 0xc186d
push ax ; 50 ; 0xc186f
mov cx, 00100h ; b9 00 01 ; 0xc1870
mov bx, 05d69h ; bb 69 5d ; 0xc1873
mov bx, 05d6ah ; bb 6a 5d ; 0xc1873
mov dx, 0c000h ; ba 00 c0 ; 0xc1876
call 02e8ch ; e8 10 16 ; 0xc1879
cmp byte [bp-00ch], 007h ; 80 7e f4 07 ; 0xc187c vgabios.c:1165
jne short 018bah ; 75 38 ; 0xc1880
mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1882 vgabios.c:1166
xor bx, bx ; 31 db ; 0xc1885
mov dx, 07b69h ; ba 69 7b ; 0xc1887
mov dx, 07b6ah ; ba 6a 7b ; 0xc1887
mov ax, 0c000h ; b8 00 c0 ; 0xc188a
call 02e14h ; e8 84 15 ; 0xc188d
jmp short 018bah ; eb 28 ; 0xc1890 vgabios.c:1167
@ -3256,12 +3256,12 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor al, al ; 30 c0 ; 0xc189d
push ax ; 50 ; 0xc189f
mov cx, 00100h ; b9 00 01 ; 0xc18a0
mov bx, 06b69h ; bb 69 6b ; 0xc18a3
mov bx, 06b6ah ; bb 6a 6b ; 0xc18a3
mov dx, 0c000h ; ba 00 c0 ; 0xc18a6
call 02e8ch ; e8 e0 15 ; 0xc18a9
mov cx, strict word 00010h ; b9 10 00 ; 0xc18ac vgabios.c:1170
xor bx, bx ; 31 db ; 0xc18af
mov dx, 07c96h ; ba 96 7c ; 0xc18b1
mov dx, 07c97h ; ba 97 7c ; 0xc18b1
mov ax, 0c000h ; b8 00 c0 ; 0xc18b4
call 02e14h ; e8 5a 15 ; 0xc18b7
cmp word [bp-01ch], strict byte 00000h ; 83 7e e4 00 ; 0xc18ba vgabios.c:1172
@ -3300,7 +3300,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
mov AL, strict byte 003h ; b0 03 ; 0xc1915
mov AH, strict byte 011h ; b4 11 ; 0xc1917
int 06dh ; cd 6d ; 0xc1919
mov bx, 05969h ; bb 69 59 ; 0xc191b vgabios.c:1199
mov bx, 0596ah ; bb 6a 59 ; 0xc191b vgabios.c:1199
mov cx, ds ; 8c d9 ; 0xc191e
mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1920
call 009f0h ; e8 ca f0 ; 0xc1923
@ -3312,14 +3312,14 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
je short 01949h ; 74 12 ; 0xc1935
cmp dl, 008h ; 80 fa 08 ; 0xc1937
jne short 01953h ; 75 17 ; 0xc193a
mov bx, 05569h ; bb 69 55 ; 0xc193c vgabios.c:1203
mov bx, 0556ah ; bb 6a 55 ; 0xc193c vgabios.c:1203
mov cx, ds ; 8c d9 ; 0xc193f
mov ax, strict word 00043h ; b8 43 00 ; 0xc1941
call 009f0h ; e8 a9 f0 ; 0xc1944
jmp short 01953h ; eb 0a ; 0xc1947 vgabios.c:1204
mov bx, 05d69h ; bb 69 5d ; 0xc1949 vgabios.c:1206
mov bx, 05d6ah ; bb 6a 5d ; 0xc1949 vgabios.c:1206
jmp short 0193fh ; eb f1 ; 0xc194c
mov bx, 06b69h ; bb 69 6b ; 0xc194e vgabios.c:1209
mov bx, 06b6ah ; bb 6a 6b ; 0xc194e vgabios.c:1209
jmp short 0193fh ; eb ec ; 0xc1951
lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1953 vgabios.c:1212
pop di ; 5f ; 0xc1956
@ -3800,7 +3800,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1d58
mul word [bp-024h] ; f7 66 dc ; 0xc1d5b
mov di, ax ; 89 c7 ; 0xc1d5e
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc1d60
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc1d60
jne short 01db1h ; 75 4a ; 0xc1d65
sal ax, 1 ; d1 e0 ; 0xc1d67 vgabios.c:1345
or AL, strict byte 0ffh ; 0c ff ; 0xc1d69
@ -3825,7 +3825,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc1d99 vgabios.c:1352
xor al, ch ; 30 e8 ; 0xc1d9c
add ax, strict word 00020h ; 05 20 00 ; 0xc1d9e
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1da1
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1da1
mov cx, di ; 89 f9 ; 0xc1da5
mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1da7
jcxz 01daeh ; e3 02 ; 0xc1daa
@ -3868,7 +3868,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1e0a
mov CL, strict byte 003h ; b1 03 ; 0xc1e0c
sal bx, CL ; d3 e3 ; 0xc1e0e
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc1e10
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc1e10
mov cx, word [bp-01ah] ; 8b 4e e6 ; 0xc1e14
mov ax, si ; 89 f0 ; 0xc1e17
jcxz 01e1dh ; e3 02 ; 0xc1e19
@ -3890,7 +3890,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1e44
mov CL, strict byte 003h ; b1 03 ; 0xc1e46
sal bx, CL ; d3 e3 ; 0xc1e48
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc1e4a
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc1e4a
mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1e4e
mul word [bp-018h] ; f7 66 e8 ; 0xc1e51
add ax, word [bp-01ah] ; 03 46 e6 ; 0xc1e54
@ -3942,7 +3942,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mov CL, strict byte 003h ; b1 03 ; 0xc1ec3
mov di, ax ; 89 c7 ; 0xc1ec5
sal di, CL ; d3 e7 ; 0xc1ec7
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc1ec9
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc1ec9
mov cx, bx ; 89 d9 ; 0xc1ecd
mov ax, si ; 89 f0 ; 0xc1ecf
mov di, dx ; 89 d7 ; 0xc1ed1
@ -3968,7 +3968,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1f05
mov CL, strict byte 003h ; b1 03 ; 0xc1f07
sal bx, CL ; d3 e3 ; 0xc1f09
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc1f0b
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc1f0b
mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1f0f
mul word [bp-018h] ; f7 66 e8 ; 0xc1f12
add ax, word [bp-014h] ; 03 46 ec ; 0xc1f15
@ -3990,14 +3990,14 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
dec word [bp-016h] ; ff 4e ea ; 0xc1f38 vgabios.c:1373
jmp near 01e7bh ; e9 3d ff ; 0xc1f3b
mov si, word [bp-01eh] ; 8b 76 e2 ; 0xc1f3e vgabios.c:1379
mov al, byte [si+0482bh] ; 8a 84 2b 48 ; 0xc1f41
mov al, byte [si+0482ch] ; 8a 84 2c 48 ; 0xc1f41
xor ah, ah ; 30 e4 ; 0xc1f45
mov CL, strict byte 006h ; b1 06 ; 0xc1f47
mov si, ax ; 89 c6 ; 0xc1f49
sal si, CL ; d3 e6 ; 0xc1f4b
mov al, byte [si+04841h] ; 8a 84 41 48 ; 0xc1f4d
mov al, byte [si+04842h] ; 8a 84 42 48 ; 0xc1f4d
mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1f51
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc1f54 vgabios.c:1380
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc1f54 vgabios.c:1380
cmp AL, strict byte 003h ; 3c 03 ; 0xc1f58
jc short 01f68h ; 72 0c ; 0xc1f5a
jbe short 01f6fh ; 76 11 ; 0xc1f5c
@ -4045,7 +4045,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1fc0
mov CL, strict byte 003h ; b1 03 ; 0xc1fc2
sal bx, CL ; d3 e3 ; 0xc1fc4
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc1fc6
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc1fc6
mov cx, dx ; 89 d1 ; 0xc1fca
xor di, di ; 31 ff ; 0xc1fcc
mov es, bx ; 8e c3 ; 0xc1fce
@ -4151,7 +4151,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
jc short 02112h ; 72 4e ; 0xc20c2
dec word [bp-016h] ; ff 4e ea ; 0xc20c4 vgabios.c:1409
jmp short 02057h ; eb 8e ; 0xc20c7
mov cl, byte [bx+047aeh] ; 8a 8f ae 47 ; 0xc20c9 vgabios.c:1414
mov cl, byte [bx+047afh] ; 8a 8f af 47 ; 0xc20c9 vgabios.c:1414
cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc20cd vgabios.c:1415
jne short 02115h ; 75 42 ; 0xc20d1
cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc20d3
@ -4173,7 +4173,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mul dx ; f7 e2 ; 0xc20fb
mov dl, byte [bp-010h] ; 8a 56 f0 ; 0xc20fd
xor dh, dh ; 30 f6 ; 0xc2100
mov bx, word [bx+047afh] ; 8b 9f af 47 ; 0xc2102
mov bx, word [bx+047b0h] ; 8b 9f b0 47 ; 0xc2102
mov cx, ax ; 89 c1 ; 0xc2106
mov ax, dx ; 89 d0 ; 0xc2108
xor di, di ; 31 ff ; 0xc210a
@ -4307,7 +4307,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mov cx, ax ; 89 c1 ; 0xc224b
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc224d
xor ah, ah ; 30 e4 ; 0xc2250
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2252
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2252
xor di, di ; 31 ff ; 0xc2256
jcxz 0225ch ; e3 02 ; 0xc2258
rep stosb ; f3 aa ; 0xc225a
@ -4532,7 +4532,7 @@ write_gfx_char_cga: ; 0xc2454 LB 0x112
mov ch, al ; 88 c5 ; 0xc245c
mov byte [bp-002h], dl ; 88 56 fe ; 0xc245e
mov al, bl ; 88 d8 ; 0xc2461
mov si, 05569h ; be 69 55 ; 0xc2463 vgabios.c:1541
mov si, 0556ah ; be 6a 55 ; 0xc2463 vgabios.c:1541
xor ah, ah ; 30 e4 ; 0xc2466 vgabios.c:1542
mov bl, byte [bp+00ah] ; 8a 5e 0a ; 0xc2468
xor bh, bh ; 30 ff ; 0xc246b
@ -4653,7 +4653,7 @@ write_gfx_char_lin: ; 0xc2566 LB 0xa1
mov bh, al ; 88 c7 ; 0xc256e
mov ch, dl ; 88 d5 ; 0xc2570
mov al, cl ; 88 c8 ; 0xc2572
mov di, 05569h ; bf 69 55 ; 0xc2574 vgabios.c:1605
mov di, 0556ah ; bf 6a 55 ; 0xc2574 vgabios.c:1605
xor ah, ah ; 30 e4 ; 0xc2577 vgabios.c:1606
mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2579
xor dh, dh ; 30 f6 ; 0xc257c
@ -4773,7 +4773,7 @@ biosfn_write_char_attr: ; 0xc2607 LB 0x172
mov CL, strict byte 003h ; b1 03 ; 0xc2679
mov di, bx ; 89 df ; 0xc267b
sal di, CL ; d3 e7 ; 0xc267d
cmp byte [di+047ach], 000h ; 80 bd ac 47 00 ; 0xc267f
cmp byte [di+047adh], 000h ; 80 bd ad 47 00 ; 0xc267f
jne short 026c6h ; 75 40 ; 0xc2684
mul dx ; f7 e2 ; 0xc2686 vgabios.c:1648
sal ax, 1 ; d1 e0 ; 0xc2688
@ -4796,18 +4796,18 @@ biosfn_write_char_attr: ; 0xc2607 LB 0x172
mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc26ae
mov word [bp-01eh], ax ; 89 46 e2 ; 0xc26b1
mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc26b4 vgabios.c:1651
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc26b7
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc26b7
mov cx, si ; 89 f1 ; 0xc26bb
mov di, bx ; 89 df ; 0xc26bd
jcxz 026c3h ; e3 02 ; 0xc26bf
rep stosw ; f3 ab ; 0xc26c1
jmp near 02772h ; e9 ac 00 ; 0xc26c3 vgabios.c:1653
mov bl, byte [bx+0482bh] ; 8a 9f 2b 48 ; 0xc26c6 vgabios.c:1656
mov bl, byte [bx+0482ch] ; 8a 9f 2c 48 ; 0xc26c6 vgabios.c:1656
mov CL, strict byte 006h ; b1 06 ; 0xc26ca
sal bx, CL ; d3 e3 ; 0xc26cc
mov al, byte [bx+04841h] ; 8a 87 41 48 ; 0xc26ce
mov al, byte [bx+04842h] ; 8a 87 42 48 ; 0xc26ce
mov byte [bp-010h], al ; 88 46 f0 ; 0xc26d2
mov al, byte [di+047aeh] ; 8a 85 ae 47 ; 0xc26d5 vgabios.c:1657
mov al, byte [di+047afh] ; 8a 85 af 47 ; 0xc26d5 vgabios.c:1657
mov byte [bp-012h], al ; 88 46 ee ; 0xc26d9
dec si ; 4e ; 0xc26dc vgabios.c:1658
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc26dd
@ -4816,7 +4816,7 @@ biosfn_write_char_attr: ; 0xc2607 LB 0x172
xor bh, bh ; 30 ff ; 0xc26e5
mov CL, strict byte 003h ; b1 03 ; 0xc26e7
sal bx, CL ; d3 e3 ; 0xc26e9
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc26eb
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc26eb
cmp al, cl ; 38 c8 ; 0xc26ef
jc short 026ffh ; 72 0c ; 0xc26f1
jbe short 02705h ; 76 10 ; 0xc26f3
@ -4927,7 +4927,7 @@ biosfn_write_char_only: ; 0xc2779 LB 0x183
mov CL, strict byte 003h ; b1 03 ; 0xc27e6
mov bx, ax ; 89 c3 ; 0xc27e8
sal bx, CL ; d3 e3 ; 0xc27ea
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc27ec
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc27ec
jne short 02838h ; 75 45 ; 0xc27f1
mov ax, di ; 89 f8 ; 0xc27f3 vgabios.c:1706
mul dx ; f7 e2 ; 0xc27f5
@ -4955,20 +4955,20 @@ biosfn_write_char_only: ; 0xc2779 LB 0x183
mov CL, strict byte 003h ; b1 03 ; 0xc2824
mov di, ax ; 89 c7 ; 0xc2826
sal di, CL ; d3 e7 ; 0xc2828
mov es, [di+047afh] ; 8e 85 af 47 ; 0xc282a vgabios.c:50
mov es, [di+047b0h] ; 8e 85 b0 47 ; 0xc282a vgabios.c:50
mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc282e vgabios.c:52
mov byte [es:bx], al ; 26 88 07 ; 0xc2831
inc bx ; 43 ; 0xc2834 vgabios.c:1710
inc bx ; 43 ; 0xc2835
jmp short 02819h ; eb e1 ; 0xc2836 vgabios.c:1711
mov di, ax ; 89 c7 ; 0xc2838 vgabios.c:1716
mov al, byte [di+0482bh] ; 8a 85 2b 48 ; 0xc283a
mov al, byte [di+0482ch] ; 8a 85 2c 48 ; 0xc283a
mov CL, strict byte 006h ; b1 06 ; 0xc283e
mov di, ax ; 89 c7 ; 0xc2840
sal di, CL ; d3 e7 ; 0xc2842
mov al, byte [di+04841h] ; 8a 85 41 48 ; 0xc2844
mov al, byte [di+04842h] ; 8a 85 42 48 ; 0xc2844
mov byte [bp-012h], al ; 88 46 ee ; 0xc2848
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc284b vgabios.c:1717
mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc284b vgabios.c:1717
mov byte [bp-014h], al ; 88 46 ec ; 0xc284f
dec si ; 4e ; 0xc2852 vgabios.c:1718
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2853
@ -4977,7 +4977,7 @@ biosfn_write_char_only: ; 0xc2779 LB 0x183
xor bh, bh ; 30 ff ; 0xc285b
mov CL, strict byte 003h ; b1 03 ; 0xc285d
sal bx, CL ; d3 e3 ; 0xc285f
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2861
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2861
cmp bl, cl ; 38 cb ; 0xc2865
jc short 02878h ; 72 0f ; 0xc2867
jbe short 0287fh ; 76 14 ; 0xc2869
@ -5065,9 +5065,9 @@ biosfn_write_pixel: ; 0xc28fc LB 0x17a
xor bh, bh ; 30 ff ; 0xc2927
mov CL, strict byte 003h ; b1 03 ; 0xc2929
sal bx, CL ; d3 e3 ; 0xc292b
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc292d
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc292d
je short 0294ch ; 74 18 ; 0xc2932
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc2934 vgabios.c:1755
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2934 vgabios.c:1755
cmp al, cl ; 38 c8 ; 0xc2938
jc short 02948h ; 72 0c ; 0xc293a
jbe short 02952h ; 76 14 ; 0xc293c
@ -5131,7 +5131,7 @@ biosfn_write_pixel: ; 0xc28fc LB 0x17a
shr ax, 1 ; d1 e8 ; 0xc29c7
mov dx, strict word 00050h ; ba 50 00 ; 0xc29c9
mul dx ; f7 e2 ; 0xc29cc
cmp byte [bx+047aeh], 002h ; 80 bf ae 47 02 ; 0xc29ce
cmp byte [bx+047afh], 002h ; 80 bf af 47 02 ; 0xc29ce
jne short 029deh ; 75 09 ; 0xc29d3
mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc29d5 vgabios.c:1777
shr bx, 1 ; d1 eb ; 0xc29d8
@ -5151,7 +5151,7 @@ biosfn_write_pixel: ; 0xc28fc LB 0x17a
mov CL, strict byte 003h ; b1 03 ; 0xc29fa
mov si, dx ; 89 d6 ; 0xc29fc
sal si, CL ; d3 e6 ; 0xc29fe
cmp byte [si+047aeh], 002h ; 80 bc ae 47 02 ; 0xc2a00
cmp byte [si+047afh], 002h ; 80 bc af 47 02 ; 0xc2a00
jne short 02a21h ; 75 1a ; 0xc2a05
mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc2a07 vgabios.c:1787
and ah, cl ; 20 cc ; 0xc2a0a
@ -5275,7 +5275,7 @@ biosfn_write_teletype: ; 0xc2a76 LB 0x263
mov CL, strict byte 003h ; b1 03 ; 0xc2b25
mov bx, ax ; 89 c3 ; 0xc2b27
sal bx, CL ; d3 e3 ; 0xc2b29
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc2b2b
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc2b2b
jne short 02b74h ; 75 42 ; 0xc2b30
mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2b32 vgabios.c:1865
mul word [bp-014h] ; f7 66 ec ; 0xc2b35
@ -5295,23 +5295,23 @@ biosfn_write_teletype: ; 0xc2a76 LB 0x263
add ax, dx ; 01 d0 ; 0xc2b55
sal ax, 1 ; d1 e0 ; 0xc2b57
add si, ax ; 01 c6 ; 0xc2b59
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2b5b vgabios.c:50
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2b5b vgabios.c:50
mov byte [es:si], ch ; 26 88 2c ; 0xc2b5f vgabios.c:52
cmp cl, byte [bp-004h] ; 3a 4e fc ; 0xc2b62 vgabios.c:1870
jne short 02ba4h ; 75 3d ; 0xc2b65
inc si ; 46 ; 0xc2b67 vgabios.c:1871
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2b68 vgabios.c:50
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2b68 vgabios.c:50
mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2b6c
mov byte [es:si], al ; 26 88 04 ; 0xc2b6f
jmp short 02ba4h ; eb 30 ; 0xc2b72 vgabios.c:1873
mov si, ax ; 89 c6 ; 0xc2b74 vgabios.c:1876
mov al, byte [si+0482bh] ; 8a 84 2b 48 ; 0xc2b76
mov al, byte [si+0482ch] ; 8a 84 2c 48 ; 0xc2b76
mov CL, strict byte 006h ; b1 06 ; 0xc2b7a
mov si, ax ; 89 c6 ; 0xc2b7c
sal si, CL ; d3 e6 ; 0xc2b7e
mov dl, byte [si+04841h] ; 8a 94 41 48 ; 0xc2b80
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2b84 vgabios.c:1877
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2b88 vgabios.c:1878
mov dl, byte [si+04842h] ; 8a 94 42 48 ; 0xc2b80
mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc2b84 vgabios.c:1877
mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2b88 vgabios.c:1878
cmp bl, 003h ; 80 fb 03 ; 0xc2b8c
jc short 02b9fh ; 72 0e ; 0xc2b8f
jbe short 02ba6h ; 76 13 ; 0xc2b91
@ -5389,7 +5389,7 @@ biosfn_write_teletype: ; 0xc2a76 LB 0x263
mov ch, byte [bp-012h] ; 8a 6e ee ; 0xc2c40
db 0feh, 0cdh
; dec ch ; fe cd ; 0xc2c43
cmp byte [bx+047ach], 000h ; 80 bf ac 47 00 ; 0xc2c45
cmp byte [bx+047adh], 000h ; 80 bf ad 47 00 ; 0xc2c45
jne short 02c98h ; 75 4c ; 0xc2c4a
mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2c4c vgabios.c:1910
mul word [bp-014h] ; f7 66 ec ; 0xc2c4f
@ -5411,7 +5411,7 @@ biosfn_write_teletype: ; 0xc2a76 LB 0x263
sal ax, 1 ; d1 e0 ; 0xc2c72
add si, ax ; 01 c6 ; 0xc2c74
inc si ; 46 ; 0xc2c76 vgabios.c:1911
mov es, [bx+047afh] ; 8e 87 af 47 ; 0xc2c77 vgabios.c:45
mov es, [bx+047b0h] ; 8e 87 b0 47 ; 0xc2c77 vgabios.c:45
mov dl, byte [es:si] ; 26 8a 14 ; 0xc2c7b vgabios.c:47
mov ax, strict word 00001h ; b8 01 00 ; 0xc2c7e vgabios.c:1912
push ax ; 50 ; 0xc2c81
@ -5789,7 +5789,7 @@ set_gfx_font: ; 0xc2f26 LB 0x4d
mov DL, strict byte 002h ; b2 02 ; 0xc2f46 vgabios.c:2033
mov bl, dl ; 88 d3 ; 0xc2f48 vgabios.c:2034
xor bh, bh ; 30 ff ; 0xc2f4a
mov al, byte [bx+07dfah] ; 8a 87 fa 7d ; 0xc2f4c
mov al, byte [bx+07dfbh] ; 8a 87 fb 7d ; 0xc2f4c
mov byte [bp+004h], al ; 88 46 04 ; 0xc2f50
mov bx, 00085h ; bb 85 00 ; 0xc2f53 vgabios.c:62
mov ax, strict word 00040h ; b8 40 00 ; 0xc2f56
@ -5835,7 +5835,7 @@ biosfn_load_gfx_8_14_chars: ; 0xc2f90 LB 0x22
mov al, bl ; 88 d8 ; 0xc2f9c
mov cx, ax ; 89 c1 ; 0xc2f9e
mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2fa0
mov ax, 05d69h ; b8 69 5d ; 0xc2fa3
mov ax, 05d6ah ; b8 6a 5d ; 0xc2fa3
mov dx, ds ; 8c da ; 0xc2fa6
call 02f26h ; e8 7b ff ; 0xc2fa8
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fab vgabios.c:2054
@ -5856,7 +5856,7 @@ biosfn_load_gfx_8_8_dd_chars: ; 0xc2fb2 LB 0x22
mov al, bl ; 88 d8 ; 0xc2fbe
mov cx, ax ; 89 c1 ; 0xc2fc0
mov bx, strict word 00008h ; bb 08 00 ; 0xc2fc2
mov ax, 05569h ; b8 69 55 ; 0xc2fc5
mov ax, 0556ah ; b8 6a 55 ; 0xc2fc5
mov dx, ds ; 8c da ; 0xc2fc8
call 02f26h ; e8 59 ff ; 0xc2fca
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fcd vgabios.c:2058
@ -5877,7 +5877,7 @@ biosfn_load_gfx_8_16_chars: ; 0xc2fd4 LB 0x22
mov al, bl ; 88 d8 ; 0xc2fe0
mov cx, ax ; 89 c1 ; 0xc2fe2
mov bx, strict word 00010h ; bb 10 00 ; 0xc2fe4
mov ax, 06b69h ; b8 69 6b ; 0xc2fe7
mov ax, 06b6ah ; b8 6a 6b ; 0xc2fe7
mov dx, ds ; 8c da ; 0xc2fea
call 02f26h ; e8 37 ff ; 0xc2fec
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fef vgabios.c:2062
@ -6010,7 +6010,7 @@ biosfn_read_state_info: ; 0xc30c6 LB 0x1f2
mov word [bp-00ah], ax ; 89 46 f6 ; 0xc30e3 vgabios.c:58
mov ax, ds ; 8c d8 ; 0xc30e6 vgabios.c:2150
mov es, dx ; 8e c2 ; 0xc30e8 vgabios.c:72
mov word [es:bx], 054ffh ; 26 c7 07 ff 54 ; 0xc30ea
mov word [es:bx], 05500h ; 26 c7 07 00 55 ; 0xc30ea
mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc30ef
lea di, [bx+004h] ; 8d 7f 04 ; 0xc30f3 vgabios.c:2155
mov cx, strict word 0001eh ; b9 1e 00 ; 0xc30f6
@ -6899,7 +6899,7 @@ find_vga_entry: ; 0xc3888 LB 0x2b
xor bh, bh ; 30 ff ; 0xc389e
mov CL, strict byte 003h ; b1 03 ; 0xc38a0
sal bx, CL ; d3 e3 ; 0xc38a2
cmp dl, byte [bx+047abh] ; 3a 97 ab 47 ; 0xc38a4
cmp dl, byte [bx+047ach] ; 3a 97 ac 47 ; 0xc38a4
jne short 03896h ; 75 ec ; 0xc38a8
mov ah, al ; 88 c4 ; 0xc38aa
mov al, ah ; 88 e0 ; 0xc38ac vgabios.c:2438
@ -7125,7 +7125,7 @@ int10_func: ; 0xc394b LB 0x456
push ax ; 50 ; 0xc3b26
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b27
mov cx, 00100h ; b9 00 01 ; 0xc3b2a
mov bx, 05d69h ; bb 69 5d ; 0xc3b2d
mov bx, 05d6ah ; bb 6a 5d ; 0xc3b2d
mov dx, 0c000h ; ba 00 c0 ; 0xc3b30
call 02e8ch ; e8 56 f3 ; 0xc3b33
jmp short 03b58h ; eb 20 ; 0xc3b36
@ -7138,7 +7138,7 @@ int10_func: ; 0xc394b LB 0x456
push ax ; 50 ; 0xc3b44
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b45
mov cx, 00100h ; b9 00 01 ; 0xc3b48
mov bx, 05569h ; bb 69 55 ; 0xc3b4b
mov bx, 0556ah ; bb 6a 55 ; 0xc3b4b
jmp short 03b30h ; eb e0 ; 0xc3b4e
mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b50 vgabios.c:2629
xor ah, ah ; 30 e4 ; 0xc3b53
@ -7153,7 +7153,7 @@ int10_func: ; 0xc394b LB 0x456
push ax ; 50 ; 0xc3b67
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b68
mov cx, 00100h ; b9 00 01 ; 0xc3b6b
mov bx, 06b69h ; bb 69 6b ; 0xc3b6e
mov bx, 06b6ah ; bb 6a 6b ; 0xc3b6e
jmp short 03b30h ; eb bd ; 0xc3b71
mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b73 vgabios.c:2636
mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3b76
@ -7674,7 +7674,7 @@ vbe_biosfn_return_controller_information: ; 0xc3f6b LB 0x12b
mov word [es:bx], 04556h ; 26 c7 07 56 45 ; 0xc3fd6
mov word [es:bx+002h], 04153h ; 26 c7 47 02 53 41 ; 0xc3fdb vbe.c:334
mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3fe1 vbe.c:338
mov word [es:bx+006h], 07dfeh ; 26 c7 47 06 fe 7d ; 0xc3fe7 vbe.c:341
mov word [es:bx+006h], 07e00h ; 26 c7 47 06 00 7e ; 0xc3fe7 vbe.c:341
mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3fed
mov word [es:bx+00ah], strict word 00001h ; 26 c7 47 0a 01 00 ; 0xc3ff1 vbe.c:344
mov word [es:bx+00ch], strict word 00000h ; 26 c7 47 0c 00 00 ; 0xc3ff7 vbe.c:346
@ -7690,11 +7690,11 @@ vbe_biosfn_return_controller_information: ; 0xc3f6b LB 0x12b
cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc401b vbe.c:356
je short 04045h ; 74 24 ; 0xc401f
mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc4021 vbe.c:359
mov word [es:bx+016h], 07e13h ; 26 c7 47 16 13 7e ; 0xc4027 vbe.c:360
mov word [es:bx+016h], 07e15h ; 26 c7 47 16 15 7e ; 0xc4027 vbe.c:360
mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc402d
mov word [es:bx+01ah], 07e30h ; 26 c7 47 1a 30 7e ; 0xc4031 vbe.c:361
mov word [es:bx+01ah], 07e32h ; 26 c7 47 1a 32 7e ; 0xc4031 vbe.c:361
mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc4037
mov word [es:bx+01eh], 07e4eh ; 26 c7 47 1e 4e 7e ; 0xc403b vbe.c:362
mov word [es:bx+01eh], 07e50h ; 26 c7 47 1e 50 7e ; 0xc403b vbe.c:362
mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc4041
mov dx, cx ; 89 ca ; 0xc4045 vbe.c:369
add dx, strict byte 0001bh ; 83 c2 1b ; 0xc4047
@ -8436,12 +8436,12 @@ vesa_pm_end: ; 0xc4754 LB 0x1
; Padding 0x2b bytes at 0xc4755
times 43 db 0
section _DATA progbits vstart=0x4780 align=1 ; size=0x3742 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3742 -> off=0x0 cb=000000000000002b uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2b
db 'Oracle VirtualBox Version 7.1.8 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ab LB 0x3717 -> off=0x0 cb=0000000000000080 uValue=00000000000c002b 'vga_modes'
vga_modes: ; 0xc47ab LB 0x80
section _DATA progbits vstart=0x4780 align=1 ; size=0x3745 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3745 -> off=0x0 cb=000000000000002c uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2c
db 'Oracle VirtualBox Version 7.1.10 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ac LB 0x3719 -> off=0x0 cb=0000000000000080 uValue=00000000000c002c 'vga_modes'
vga_modes: ; 0xc47ac LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
@ -8450,14 +8450,14 @@ vga_modes: ; 0xc47ab LB 0x80
db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
; disGetNextSymbol 0xc482b LB 0x3697 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ab 'line_to_vpti'
line_to_vpti: ; 0xc482b LB 0x10
; disGetNextSymbol 0xc482c LB 0x3699 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ac 'line_to_vpti'
line_to_vpti: ; 0xc482c LB 0x10
db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
; disGetNextSymbol 0xc483b LB 0x3687 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bb 'dac_regs'
dac_regs: ; 0xc483b LB 0x4
; disGetNextSymbol 0xc483c LB 0x3689 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bc 'dac_regs'
dac_regs: ; 0xc483c LB 0x4
dd 0ff3f3f3fh
; disGetNextSymbol 0xc483f LB 0x3683 -> off=0x0 cb=0000000000000780 uValue=00000000000c00bf 'video_param_table'
video_param_table: ; 0xc483f LB 0x780
; disGetNextSymbol 0xc4840 LB 0x3685 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c0 'video_param_table'
video_param_table: ; 0xc4840 LB 0x780
db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
@ -8578,8 +8578,8 @@ video_param_table: ; 0xc483f LB 0x780
db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
; disGetNextSymbol 0xc4fbf LB 0x2f03 -> off=0x0 cb=00000000000000c0 uValue=00000000000c083f 'palette0'
palette0: ; 0xc4fbf LB 0xc0
; disGetNextSymbol 0xc4fc0 LB 0x2f05 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0840 'palette0'
palette0: ; 0xc4fc0 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
@ -8592,8 +8592,8 @@ palette0: ; 0xc4fbf LB 0xc0
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc507f LB 0x2e43 -> off=0x0 cb=00000000000000c0 uValue=00000000000c08ff 'palette1'
palette1: ; 0xc507f LB 0xc0
; disGetNextSymbol 0xc5080 LB 0x2e45 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0900 'palette1'
palette1: ; 0xc5080 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
@ -8606,8 +8606,8 @@ palette1: ; 0xc507f LB 0xc0
db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc513f LB 0x2d83 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09bf 'palette2'
palette2: ; 0xc513f LB 0xc0
; disGetNextSymbol 0xc5140 LB 0x2d85 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c0 'palette2'
palette2: ; 0xc5140 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
@ -8620,8 +8620,8 @@ palette2: ; 0xc513f LB 0xc0
db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
; disGetNextSymbol 0xc51ff LB 0x2cc3 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a7f 'palette3'
palette3: ; 0xc51ff LB 0x300
; disGetNextSymbol 0xc5200 LB 0x2cc5 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a80 'palette3'
palette3: ; 0xc5200 LB 0x300
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
@ -8670,24 +8670,24 @@ palette3: ; 0xc51ff LB 0x300
db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc54ff LB 0x29c3 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d7f 'static_functionality'
static_functionality: ; 0xc54ff LB 0x10
; disGetNextSymbol 0xc5500 LB 0x29c5 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d80 'static_functionality'
static_functionality: ; 0xc5500 LB 0x10
db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc550f LB 0x29b3 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d8f '_dcc_table'
_dcc_table: ; 0xc550f LB 0x24
; disGetNextSymbol 0xc5510 LB 0x29b5 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d90 '_dcc_table'
_dcc_table: ; 0xc5510 LB 0x24
db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5533 LB 0x298f -> off=0x0 cb=000000000000001a uValue=00000000000c0db3 '_secondary_save_area'
_secondary_save_area: ; 0xc5533 LB 0x1a
db 01ah, 000h, 00fh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5534 LB 0x2991 -> off=0x0 cb=000000000000001a uValue=00000000000c0db4 '_secondary_save_area'
_secondary_save_area: ; 0xc5534 LB 0x1a
db 01ah, 000h, 010h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc554d LB 0x2975 -> off=0x0 cb=000000000000001c uValue=00000000000c0dcd '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554d LB 0x1c
db 03fh, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 033h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5569 LB 0x2959 -> off=0x0 cb=0000000000000800 uValue=00000000000c0de9 'vgafont8'
vgafont8: ; 0xc5569 LB 0x800
; disGetNextSymbol 0xc554e LB 0x2977 -> off=0x0 cb=000000000000001c uValue=00000000000c0dce '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554e LB 0x1c
db 040h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 034h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc556a LB 0x295b -> off=0x0 cb=0000000000000800 uValue=00000000000c0dea 'vgafont8'
vgafont8: ; 0xc556a LB 0x800
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
@ -8816,8 +8816,8 @@ vgafont8: ; 0xc5569 LB 0x800
db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5d69 LB 0x2159 -> off=0x0 cb=0000000000000e00 uValue=00000000000c15e9 'vgafont14'
vgafont14: ; 0xc5d69 LB 0xe00
; disGetNextSymbol 0xc5d6a LB 0x215b -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ea 'vgafont14'
vgafont14: ; 0xc5d6a LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
@ -9042,8 +9042,8 @@ vgafont14: ; 0xc5d69 LB 0xe00
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc6b69 LB 0x1359 -> off=0x0 cb=0000000000001000 uValue=00000000000c23e9 'vgafont16'
vgafont16: ; 0xc6b69 LB 0x1000
; disGetNextSymbol 0xc6b6a LB 0x135b -> off=0x0 cb=0000000000001000 uValue=00000000000c23ea 'vgafont16'
vgafont16: ; 0xc6b6a LB 0x1000
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
@ -9300,8 +9300,8 @@ vgafont16: ; 0xc6b69 LB 0x1000
db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc7b69 LB 0x359 -> off=0x0 cb=000000000000012d uValue=00000000000c33e9 'vgafont14alt'
vgafont14alt: ; 0xc7b69 LB 0x12d
; disGetNextSymbol 0xc7b6a LB 0x35b -> off=0x0 cb=000000000000012d uValue=00000000000c33ea 'vgafont14alt'
vgafont14alt: ; 0xc7b6a LB 0x12d
db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
@ -9321,8 +9321,8 @@ vgafont14alt: ; 0xc7b69 LB 0x12d
db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc7c96 LB 0x22c -> off=0x0 cb=0000000000000144 uValue=00000000000c3516 'vgafont16alt'
vgafont16alt: ; 0xc7c96 LB 0x144
; disGetNextSymbol 0xc7c97 LB 0x22e -> off=0x0 cb=0000000000000144 uValue=00000000000c3517 'vgafont16alt'
vgafont16alt: ; 0xc7c97 LB 0x144
db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
@ -9344,53 +9344,56 @@ vgafont16alt: ; 0xc7c96 LB 0x144
db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
db 006h, 000h, 000h, 000h
; disGetNextSymbol 0xc7dda LB 0xe8 -> off=0x0 cb=0000000000000008 uValue=00000000000c365a '_cga_msr'
_cga_msr: ; 0xc7dda LB 0x8
; disGetNextSymbol 0xc7ddb LB 0xea -> off=0x0 cb=0000000000000008 uValue=00000000000c365b '_cga_msr'
_cga_msr: ; 0xc7ddb LB 0x8
db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
; disGetNextSymbol 0xc7de2 LB 0xe0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de2 LB 0x8
; disGetNextSymbol 0xc7de3 LB 0xe2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3663 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de3 LB 0x8
db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7dea LB 0xd8 -> off=0x0 cb=0000000000000008 uValue=00000000000c366a 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7dea LB 0x8
; disGetNextSymbol 0xc7deb LB 0xda -> off=0x0 cb=0000000000000008 uValue=00000000000c366b 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7deb LB 0x8
db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7df2 LB 0xd0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3672 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df2 LB 0x8
; disGetNextSymbol 0xc7df3 LB 0xd2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3673 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df3 LB 0x8
db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
; disGetNextSymbol 0xc7dfa LB 0xc8 -> off=0x0 cb=0000000000000004 uValue=00000000000c367a 'row_tbl'
row_tbl: ; 0xc7dfa LB 0x4
dd 02b190e00h
; disGetNextSymbol 0xc7dfe LB 0xc4 -> off=0x0 cb=0000000000000015 uValue=00000000000c367e '_vbebios_copyright'
_vbebios_copyright: ; 0xc7dfe LB 0x15
; disGetNextSymbol 0xc7dfb LB 0xca -> off=0x0 cb=0000000000000005 uValue=00000000000c367b 'row_tbl'
row_tbl: ; 0xc7dfb LB 0x5
db 000h, 00eh, 019h, 02bh, 000h
; disGetNextSymbol 0xc7e00 LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c3680 '_vbebios_copyright'
_vbebios_copyright: ; 0xc7e00 LB 0x15
db 'VirtualBox VESA BIOS', 000h
; disGetNextSymbol 0xc7e13 LB 0xaf -> off=0x0 cb=000000000000001d uValue=00000000000c3693 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e13 LB 0x1d
; disGetNextSymbol 0xc7e15 LB 0xb0 -> off=0x0 cb=000000000000001d uValue=00000000000c3695 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e15 LB 0x1d
db 'Oracle and/or its affiliates', 000h
; disGetNextSymbol 0xc7e30 LB 0x92 -> off=0x0 cb=000000000000001e uValue=00000000000c36b0 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e30 LB 0x1e
; disGetNextSymbol 0xc7e32 LB 0x93 -> off=0x0 cb=000000000000001e uValue=00000000000c36b2 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e32 LB 0x1e
db 'Oracle VirtualBox VBE Adapter', 000h
; disGetNextSymbol 0xc7e4e LB 0x74 -> off=0x0 cb=0000000000000020 uValue=00000000000c36ce '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e4e LB 0x20
db 'Oracle VirtualBox Version 7.1.8', 000h
; disGetNextSymbol 0xc7e6e LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36ee '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e6e LB 0x2b
; disGetNextSymbol 0xc7e50 LB 0x75 -> off=0x0 cb=0000000000000021 uValue=00000000000c36d0 '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e50 LB 0x21
db 'Oracle VirtualBox Version 7.1.10', 000h
; disGetNextSymbol 0xc7e71 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f1 '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e71 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
; disGetNextSymbol 0xc7e99 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3719 '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e99 LB 0x29
; disGetNextSymbol 0xc7e9c LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c371c '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e9c LB 0x29
db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
section CONST progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x1 bytes at 0xc7ec5
db 001h
section CONST2 progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
section CONST progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x13e bytes at 0xc7ec2
db 001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
db 065h, 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h
db 06ch, 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h
db 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh
db 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh
db 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h
section CONST2 progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
; Padding 0x13a bytes at 0xc7ec6
db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h
db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch
db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h, 061h
db 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh, 06fh
db 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h
db 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h
db 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h
db 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
@ -9402,4 +9405,4 @@ section CONST2 progbits vstart=0x7ec2 align=1 ; size=0x0 class=DATA group=DGROUP
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0e3h
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 021h

View file

@ -1 +1 @@
85b4d4e69c0d498396a3ef5b1df3bfc1 *VBoxVgaBios8086.rom
7834d260590101c10faf3453e3fb0f9f *VBoxVgaBios8086.rom

View file

@ -1,5 +1,4 @@
/* $Id: DevVirtioNet.cpp $ */
/* $Id: DevVirtioNet.cpp 169005 2025-05-26 19:56:17Z klaus $ */
/** @file
* VBox storage devices - Virtio NET Driver
*
@ -672,6 +671,10 @@ static DECLCALLBACK(void) virtioNetVirtqNotified(PPDMDEVINS pDevIns, PVIRTIOCORE
PVIRTIONETVIRTQ pVirtq = &pThis->aVirtqs[uVirtqNbr];
PVIRTIONETWORKER pWorker = &pThis->aWorkers[uVirtqNbr];
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pVirtio->fRecovering))
LogRel(("[%s] Received notification from the guest on queue %u\n", pThis->szInst, uVirtqNbr));
#endif /* VIRTIO_REL_INFO_DUMP */
#if defined (IN_RING3) && defined (LOG_ENABLED)
RTLogFlush(NULL);
#endif
@ -791,7 +794,11 @@ void virtioNetDumpGcPhysRxBuf(PPDMDEVINS pDevIns, PVIRTIONETPKTHDR pRxPktHdr,
/**
* @callback_method_impl{FNDBGFHANDLERDEV, virtio-net debugger info callback.}
*/
#ifdef VIRTIO_REL_INFO_DUMP
DECLCALLBACK(void) virtioNetR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
#else /* !VIRTIO_REL_INFO_DUMP */
static DECLCALLBACK(void) virtioNetR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
#endif /* !VIRTIO_REL_INFO_DUMP */
{
PVIRTIONET pThis = PDMDEVINS_2_DATA(pDevIns, PVIRTIONET);
PVIRTIONETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVIRTIONETCC);
@ -803,6 +810,14 @@ static DECLCALLBACK(void) virtioNetR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp
bool fState = pszArgs && (*pszArgs == 's' || *pszArgs == 'S'); /* "state" */
bool fPointers = pszArgs && (*pszArgs == 'p' || *pszArgs == 'P'); /* "pointers" */
bool fVirtqs = pszArgs && (*pszArgs == 'q' || *pszArgs == 'Q'); /* "queues */
#ifdef VIRTIO_REL_INFO_DUMP
if (pszArgs && (*pszArgs == 't' || *pszArgs == 'T'))
{
ASMAtomicWriteBool(&pThis->Virtio.fTestRecovery, true);
pHlp->pfnPrintf(pHlp, "Triggering recovery for %s\n", pThis->szInst);
return;
}
#endif /* VIRTIO_REL_INFO_DUMP */
/* Show basic information. */
pHlp->pfnPrintf(pHlp,
@ -1037,6 +1052,10 @@ static int virtioNetR3DevCfgAccess(PVIRTIONET pThis, uint32_t uOffsetOfAccess, v
pThis->szInst, uOffsetOfAccess, uOffsetOfAccess, cb));
return fWrite ? VINF_SUCCESS : VINF_IOM_MMIO_UNUSED_00;
}
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pThis->Virtio.fRecovering))
LogRel(("[%s] %s %u bytes @ dev cfg + %u: %.*Rhxs\n", pThis->szInst, fWrite ? "wrote" : "read", cb, uOffsetOfAccess, cb, pv));
#endif /* VIRTIO_REL_INFO_DUMP */
return VINF_SUCCESS;
}
@ -1536,6 +1555,42 @@ static DECLCALLBACK(int) virtioNetR3ModernSaveExec(PPDMDEVINS pDevIns, PSSMHANDL
#ifdef IN_RING3
#ifdef VIRTIO_REL_INFO_DUMP
/**
* Attempt to recover from the state when a descriptor loop is discovered in adapter queue.
* The idea is to force device reset via setting the DEVICE_NEEDS_RESET bit in the device status field.
* To prevent further accesses to the queue in invalid state we need to bring down the link temporarily.
* Unfortunately it does not seem to be handled by Linux virtio at all, so the faulty queue will remain
* disabled, preventing recovery.
*
* @param pDevIns PDM instance
*
*/
DECLHIDDEN(int) virtioNetAttemptToRecover(PPDMDEVINS pDevIns)
{
PVIRTIONET pThis = PDMDEVINS_2_DATA(pDevIns, PVIRTIONET);
PVIRTIONETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVIRTIONETCC);
if (IS_LINK_UP(pThis))
{
SET_LINK_DOWN(pThis);
/* Re-establish link in 10 seconds. */
int rc = PDMDevHlpTimerSetMillies(pDevIns, pThisCC->hLinkUpTimer, 10000);
AssertRC(rc);
LogRel(("[%s] Virtio disabled until device reset\n", pThis->szInst));
pThis->fVirtioReady = false;
}
virtioCoreResetAll(&pThis->Virtio);
if (ASMAtomicXchgBool(&pThis->Virtio.fRecovering, true))
LogRel(("[%s] Attempting recovery while in recovery!\n", pThis->szInst));
return VINF_SUCCESS;
}
#endif /* VIRTIO_REL_INFO_DUMP */
/**
* Perform 16-bit 1's compliment checksum on provided packet in accordance with VirtIO specification,
* pertinent to VIRTIO_NET_F_CSUM feature, which 'offloads' the Checksum feature from the driver
@ -1650,6 +1705,10 @@ static int virtioNetR3CheckRxBufsAvail(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVI
virtioCoreVirtqAvailBufCount(pDevIns, &pThis->Virtio, pRxVirtq->uIdx)));
rc = VINF_SUCCESS;
}
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pThis->Virtio.fRecovering))
LogRel(("[%s] %sRX buffers available on %s\n", pThis->szInst, rc == VERR_INVALID_STATE ? "Enabling notify as no " : "", pRxVirtq->szName));
#endif /* VIRTIO_REL_INFO_DUMP */
virtioCoreVirtqEnableNotify(&pThis->Virtio, pRxVirtq->uIdx, rc == VERR_INVALID_STATE /* fEnable */);
return rc;
}
@ -2008,6 +2067,12 @@ static int virtioNetR3RxPktMultibufXfer(PPDMDEVINS pDevIns, PVIRTIONET pThis, ui
{
cbHdrEnqueued = cbPktHdr;
int rc = virtioCoreR3VirtqAvailBufGet(pDevIns, &pThis->Virtio, pRxVirtq->uIdx, pVirtqBuf, true);
#ifdef VIRTIO_REL_INFO_DUMP
if (rc == VERR_INVALID_STATE)
return virtioNetAttemptToRecover(pDevIns);
if (rc == VERR_NOT_AVAILABLE)
return VINF_SUCCESS;
#endif /* VIRTIO_REL_INFO_DUMP */
AssertMsgReturn(rc == VINF_SUCCESS || rc == VERR_NOT_AVAILABLE, ("%Rrc\n", rc), rc);
AssertMsgReturn(rc == VINF_SUCCESS && pVirtqBuf->cbPhysReturn,
("Not enough Rx buffers in queue to accomodate ethernet packet\n"),
@ -2052,6 +2117,12 @@ static int virtioNetR3CopyRxPktToGuest(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVI
PVIRTQBUF pVirtqBuf = &VirtqBuf;
int rc = virtioCoreR3VirtqAvailBufGet(pDevIns, &pThis->Virtio, pRxVirtq->uIdx, pVirtqBuf, true);
#ifdef VIRTIO_REL_INFO_DUMP
if (rc == VERR_INVALID_STATE)
return virtioNetAttemptToRecover(pDevIns);
if (rc == VERR_NOT_AVAILABLE)
return VINF_SUCCESS;
#endif /* VIRTIO_REL_INFO_DUMP */
AssertMsgReturn(rc == VINF_SUCCESS || rc == VERR_NOT_AVAILABLE, ("%Rrc\n", rc), rc);
AssertMsgReturn(rc == VINF_SUCCESS && pVirtqBuf->cbPhysReturn,
("Not enough Rx buffers or capacity to accommodate ethernet packet\n"),
@ -2079,6 +2150,10 @@ static int virtioNetR3CopyRxPktToGuest(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVI
return rc;
}
STAM_PROFILE_STOP(&pThis->StatReceiveStore, a);
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicXchgBool(&pThis->Virtio.fRecovering, false))
LogRel(("[%s] Recovery complete on successfully receiving a packet\n", pThis->szInst));
#endif /* VIRTIO_REL_INFO_DUMP */
return VINF_SUCCESS;
}
@ -2720,6 +2795,10 @@ static int virtioNetR3TransmitPkts(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVIRTIO
int cPkts = virtioCoreVirtqAvailBufCount(pVirtio->pDevInsR3, pVirtio, pTxVirtq->uIdx);
if (!cPkts)
{
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pThis->Virtio.fRecovering))
LogRel(("[%s] No packets to send found on %s\n", pThis->szInst, pTxVirtq->szName));
#endif /* VIRTIO_REL_INFO_DUMP */
LogFunc(("[%s] No packets to send found on %s\n", pThis->szInst, pTxVirtq->szName));
if (pDrv)
@ -2728,6 +2807,10 @@ static int virtioNetR3TransmitPkts(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVIRTIO
ASMAtomicWriteU32(&pThis->uIsTransmitting, 0);
return VERR_MISSING;
}
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pThis->Virtio.fRecovering))
LogRel(("[%s] About to transmit %d pending packet%c\n", pThis->szInst, cPkts, cPkts == 1 ? ' ' : 's'));
#endif /* VIRTIO_REL_INFO_DUMP */
LogFunc(("[%s] About to transmit %d pending packet%c\n", pThis->szInst, cPkts, cPkts == 1 ? ' ' : 's'));
virtioNetR3SetWriteLed(pThisCC, true);
@ -2858,6 +2941,23 @@ static int virtioNetR3TransmitPkts(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVIRTIO
&& IS_VIRTQ_EMPTY(pDevIns, &pThis->Virtio, pTxVirtq->uIdx))
virtioCoreVirtqEnableNotify(&pThis->Virtio, pTxVirtq->uIdx, true /* fEnable */);
}
#ifdef VIRTIO_REL_INFO_DUMP
if (rc == VERR_INVALID_STATE)
{
/*
* Our best bet for recovering from a bad queue state is to do a device reset, but
* it is not enough because NetKVM driver does not complete NBLs on reset. We need to lower
* the link in order to prevent adding new descriptors to the TX queue first. Then we
* need to simulate processing of all outstanding descriptor chains by simply copying
* all head indices from avail to used ring. Note that we have only 'peeked' into the avail
* ring, so the avail index should not have moved yet. This is not the case for other queues.
*/
virtioNetAttemptToRecover(pDevIns);
virtioCorePutAllAvailBufsToUsedRing(pDevIns, &pThis->Virtio, pTxVirtq->uIdx);
}
else if (ASMAtomicXchgBool(&pThis->Virtio.fRecovering, false))
LogRel(("[%s] Recovery complete on successfully transmitting a packet\n", pThis->szInst));
#endif /* VIRTIO_REL_INFO_DUMP */
virtioNetR3SetWriteLed(pThisCC, false);
if (pDrv)
@ -2890,7 +2990,22 @@ static DECLCALLBACK(void) virtioNetR3LinkUpTimer(PPDMDEVINS pDevIns, TMTIMERHAND
PVIRTIONET pThis = PDMDEVINS_2_DATA(pDevIns, PVIRTIONET);
PVIRTIONETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVIRTIONETCC);
#ifdef VIRTIO_REL_INFO_DUMP
if (RT_UNLIKELY(!pThis->fVirtioReady))
{
if (ASMAtomicXchgBool(&pThis->Virtio.fRecovering, false))
{
LogRel(("[%s] Recovery failed, VM reset is needed!\n", pThis->szInst));
return;
}
}
#endif /* VIRTIO_REL_INFO_DUMP */
SET_LINK_UP(pThis);
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pThis->Virtio.fRecovering))
LogRel(("[%s] Link is up\n", pThis->szInst));
#endif /* VIRTIO_REL_INFO_DUMP */
virtioNetWakeupRxBufWaiter(pDevIns);
if (pThisCC->pDrv)
@ -3139,6 +3254,13 @@ static DECLCALLBACK(int) virtioNetR3WorkerThread(PPDMDEVINS pDevIns, PPDMTHREAD
VIRTQBUF_T VirtqBuf;
PVIRTQBUF pVirtqBuf = &VirtqBuf;
int rc = virtioCoreR3VirtqAvailBufGet(pDevIns, &pThis->Virtio, pVirtq->uIdx, pVirtqBuf, true);
#ifdef VIRTIO_REL_INFO_DUMP
if (rc == VERR_INVALID_STATE)
{
virtioNetAttemptToRecover(pDevIns);
continue;
}
#endif /* VIRTIO_REL_INFO_DUMP */
if (rc == VERR_NOT_AVAILABLE)
{
Log10Func(("[%s] %s worker woken. Nothing found in queue\n", pThis->szInst, pVirtq->szName));
@ -3204,6 +3326,10 @@ static DECLCALLBACK(void) virtioNetR3StatusChg(PVIRTIOCORE pVirtio, PVIRTIOCOREC
}
else
{
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pThis->Virtio.fRecovering))
LogRel(("[%s] Resetting...\n", pThis->szInst));
#endif /* VIRTIO_REL_INFO_DUMP */
Log(("\n%-23s: %s VirtIO is resetting ***\n", __FUNCTION__, pThis->szInst));
pThis->virtioNetConfig.uStatus = pThis->fCableConnected ? VIRTIONET_F_LINK_UP : 0;
@ -3232,6 +3358,11 @@ static DECLCALLBACK(void) virtioNetR3StatusChg(PVIRTIOCORE pVirtio, PVIRTIOCOREC
pThis->aVirtqs[uVirtqNbr].fAttachedToVirtioCore = false;
}
}
#ifdef VIRTIO_REL_INFO_DUMP
if (pThisCC->pDrv)
pThisCC->pDrv->pfnNotifyLinkChanged(pThisCC->pDrv, pThis->virtioNetConfig.uStatus ? PDMNETWORKLINKSTATE_UP : PDMNETWORKLINKSTATE_DOWN);
#endif /* VIRTIO_REL_INFO_DUMP */
}
/**
@ -3242,6 +3373,10 @@ static DECLCALLBACK(void) pfnFeatureNegotiationComplete(PVIRTIOCORE pVirtio, uin
PVIRTIONET pThis = PDMDEVINS_2_DATA(pVirtio->pDevInsR3, PVIRTIONET);
LogFunc(("[Feature Negotiation Complete] Guest Driver version is: %s\n", fLegacy ? "legacy" : "modern"));
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pThis->Virtio.fRecovering))
LogRel(("[%s] Feature Negotiation Complete for %s driver\n", pThis->szInst, fLegacy ? "legacy" : "modern"));
#endif /* VIRTIO_REL_INFO_DUMP */
virtioNetConfigurePktHdr(pThis, fLegacy);
virtioNetR3SetVirtqNames(pThis, fLegacy);

View file

@ -1312,7 +1312,7 @@ section CONST progbits vstart=0x9a align=1 ; size=0xa92 class=DATA group=DGROUP
section CONST2 progbits vstart=0xb2c align=1 ; size=0x3fa class=DATA group=DGROUP
; disGetNextSymbol 0xf0b2c LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0b2c 'bios_cvs_version_string'
bios_cvs_version_string: ; 0xf0b2c LB 0x12
db 'VirtualBox 7.1.8', 000h, 000h
db 'VirtualBox 7.1.10', 000h
; disGetNextSymbol 0xf0b3e LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0b3e '_bios_prefix_string'
_bios_prefix_string: ; 0xf0b3e LB 0x8
db 'BIOS: ', 000h, 000h
@ -13465,4 +13465,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2117
; disGetNextSymbol 0xffff5 LB 0xb -> off=0xb cb=0000000000000000 uValue=0000000000100000 '_dummy_addr_0x100000'
db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 083h
db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 05ah

View file

@ -1 +1 @@
1c9c9eede8319eb5a58a1cd1a1a1d8ff *VBoxPcBios286.rom
8e03a660126a6eb7cf21272f92517357 *VBoxPcBios286.rom

View file

@ -1566,7 +1566,7 @@ section CONST progbits vstart=0xf0 align=1 ; size=0xd14 class=DATA group=DGROUP
section CONST2 progbits vstart=0xe04 align=1 ; size=0x3fa class=DATA group=DGROUP
; disGetNextSymbol 0xf0e04 LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0e04 'bios_cvs_version_string'
bios_cvs_version_string: ; 0xf0e04 LB 0x12
db 'VirtualBox 7.1.8', 000h, 000h
db 'VirtualBox 7.1.10', 000h
; disGetNextSymbol 0xf0e16 LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0e16 '_bios_prefix_string'
_bios_prefix_string: ; 0xf0e16 LB 0x8
db 'BIOS: ', 000h, 000h
@ -19401,4 +19401,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2117
; disGetNextSymbol 0xffff5 LB 0xb -> off=0xb cb=0000000000000000 uValue=0000000000100000 '_dummy_addr_0x100000'
db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 010h
db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 0e7h

View file

@ -1 +1 @@
cc36c118d0c3651a550c2548dc2517df *VBoxPcBios386.rom
92abd9d7aa1caad12085bc339081a486 *VBoxPcBios386.rom

View file

@ -1283,7 +1283,7 @@ section CONST progbits vstart=0x9a align=1 ; size=0xa92 class=DATA group=DGROUP
section CONST2 progbits vstart=0xb2c align=1 ; size=0x3fa class=DATA group=DGROUP
; disGetNextSymbol 0xf0b2c LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0b2c 'bios_cvs_version_string'
bios_cvs_version_string: ; 0xf0b2c LB 0x12
db 'VirtualBox 7.1.8', 000h, 000h
db 'VirtualBox 7.1.10', 000h
; disGetNextSymbol 0xf0b3e LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0b3e '_bios_prefix_string'
_bios_prefix_string: ; 0xf0b3e LB 0x8
db 'BIOS: ', 000h, 000h
@ -13698,4 +13698,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2117
; disGetNextSymbol 0xffff5 LB 0xb -> off=0xb cb=0000000000000000 uValue=0000000000100000 '_dummy_addr_0x100000'
db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fbh, 025h
db 030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fbh, 0fch

View file

@ -1 +1 @@
df102e2b6e2cb7be6efe290ed2ee033a *VBoxPcBios8086.rom
1abccb29e5f0e3fc5a701a5982264143 *VBoxPcBios8086.rom

View file

@ -47,6 +47,9 @@
#include <VBox/vmm/pdmdev.h>
#include "VirtioCore.h"
#ifdef VIRTIO_REL_INFO_DUMP
#include <iprt/trace.h>
#endif /* VIRTIO_REL_INFO_DUMP */
/*********************************************************************************************************************************
* Defined Constants And Macros *
@ -632,6 +635,74 @@ DECLINLINE(void) virtioCoreR3DescInfo(PCDBGFINFOHLP pHlp, PVIRTQ_DESC_T pDesc, u
pDesc->cb, pDesc->GCPhysBuf, cszTail);
}
#ifdef VIRTIO_REL_INFO_DUMP
DECLHIDDEN(void) virtioCoreR3DumpAvailRing(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, PVIRTIOCORE pVirtio, PVIRTQUEUE pVirtq)
{
uint16_t auTmp[VIRTQ_SIZE];
virtioCoreGCPhysRead(pVirtio, pDevIns,
pVirtq->GCPhysVirtqAvail + RT_UOFFSETOF_DYN(VIRTQ_AVAIL_T, auRing[0]),
auTmp, pVirtq->uQueueSize * sizeof(uint16_t));
pHlp->pfnPrintf(pHlp, " avail ring dump:\n%.*RhXd\n", pVirtq->uQueueSize * sizeof(uint16_t), auTmp,
pVirtq->GCPhysVirtqAvail + RT_UOFFSETOF_DYN(VIRTQ_AVAIL_T, auRing[0]));
}
DECLHIDDEN(void) virtioCoreR3DumpUsedRing(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, PVIRTIOCORE pVirtio, PVIRTQUEUE pVirtq)
{
VIRTQ_USED_ELEM_T aTmp[VIRTQ_SIZE];
virtioCoreGCPhysRead(pVirtio, pDevIns,
pVirtq->GCPhysVirtqUsed + RT_UOFFSETOF_DYN(VIRTQ_USED_T, aRing[0]),
aTmp, pVirtq->uQueueSize * sizeof(VIRTQ_USED_ELEM_T));
pHlp->pfnPrintf(pHlp, " used ring dump:\n%.*RhXd\n", pVirtq->uQueueSize * sizeof(VIRTQ_USED_ELEM_T), aTmp,
pVirtq->GCPhysVirtqUsed + RT_UOFFSETOF_DYN(VIRTQ_USED_T, aRing[0]));
}
#define VIRTIO_CORE_EVENT_INVALID 0
#define VIRTIO_CORE_EVENT_AVAIL_GET 1 // pVirtq->uAvailIdxShadow, pVirtqBuf->uHeadIdx
#define VIRTIO_CORE_EVENT_AVAIL_PEEK 2 // pVirtq->uAvailIdxShadow, pVirtqBuf->uHeadIdx
#define VIRTIO_CORE_EVENT_AVAIL_NEXT 3 // pVirtq->uAvailIdxShadow, N/A
#define VIRTIO_CORE_EVENT_USED_PUT 4 // pVirtq->uUsedIdxShadow, pVirtqBuf->uHeadIdx
#define VIRTIO_CORE_EVENT_USED_SYNC 5 // pVirtq->uUsedIdxShadow, N/A
static const char *virtioCoreEventText[] = {
"none <n/a>",
" get avail",
"peek avail",
"next avail",
" put used",
"sync used"
};
static void virtioCoreTraceEvent(PVIRTIOCORE pVirtio, PVIRTQUEUE pVirtq, const uint8_t event, uint16_t ringIdx, uint16_t descIdx)
{
if (pVirtq->uQueueSize)
{
if (event == VIRTIO_CORE_EVENT_AVAIL_NEXT || event == VIRTIO_CORE_EVENT_USED_SYNC)
RTTraceBufAddMsgF(pVirtio->hTraceBuf, "%s: %s[%u]\n", pVirtq->szName, virtioCoreEventText[event], ringIdx % pVirtq->uQueueSize);
else
RTTraceBufAddMsgF(pVirtio->hTraceBuf, "%s: %s[%u]=%u\n", pVirtq->szName, virtioCoreEventText[event], ringIdx % pVirtq->uQueueSize, descIdx);
}
else
{
if (event == VIRTIO_CORE_EVENT_AVAIL_NEXT || event == VIRTIO_CORE_EVENT_USED_SYNC)
RTTraceBufAddMsgF(pVirtio->hTraceBuf, "%s: %s[%u]\n", pVirtq->szName, virtioCoreEventText[event], ringIdx);
else
RTTraceBufAddMsgF(pVirtio->hTraceBuf, "%s: %s[%u]=%u\n", pVirtq->szName, virtioCoreEventText[event], ringIdx, descIdx);
}
}
static DECLCALLBACK(int) dumpOneEntryToRelLog(RTTRACEBUF hTraceBuf, uint32_t iEntry, uint64_t NanoTS, RTCPUID idCpu, const char *pszMsg, void *pvUser)
{
RT_NOREF(hTraceBuf, pvUser);
LogRel(("%03u / %llu / %02u / %s", iEntry, NanoTS, idCpu, pszMsg));
return VINF_SUCCESS;
}
static inline void virtioCoreDumpTraceBufToRelLog(RTTRACEBUF hTraceBuf)
{
RTTraceBufEnumEntries(hTraceBuf, dumpOneEntryToRelLog, NULL);
}
#endif /* VIRTIO_REL_INFO_DUMP */
/** API Fuunction: See header file */
DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, PVIRTIOCORE pVirtio, const char *pszArgs, int uVirtq)
{
@ -660,6 +731,7 @@ DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, P
&uAvailEventIdx, sizeof(uAvailEventIdx));
}
#ifndef VIRTIO_REL_INFO_DUMP
VIRTQBUF_T VirtqBuf;
PVIRTQBUF pVirtqBuf = &VirtqBuf;
RT_ZERO(VirtqBuf); /* Make sure pSgPhysSend and pSgPhysReturn are initialized. */
@ -674,6 +746,7 @@ DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, P
cSendSegs = pVirtqBuf->pSgPhysSend ? pVirtqBuf->pSgPhysSend->cSegs : 0;
cReturnSegs = pVirtqBuf->pSgPhysReturn ? pVirtqBuf->pSgPhysReturn->cSegs : 0;
}
#endif /* !VIRTIO_REL_INFO_DUMP */
bool fAvailNoInterrupt = virtioReadAvailRingFlags(pDevIns, pVirtio, pVirtq) & VIRTQ_AVAIL_F_NO_INTERRUPT;
bool fUsedNoNotify = virtioReadUsedRingFlags(pDevIns, pVirtio, pVirtq) & VIRTQ_USED_F_NO_NOTIFY;
@ -694,6 +767,7 @@ DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, P
pHlp->pfnPrintf(pHlp, " shadow: ............... %d (%d)\n", pVirtq->uQueueSize ? uUsedIdxShadow % pVirtq->uQueueSize : uUsedIdxShadow, uUsedIdxShadow);
pHlp->pfnPrintf(pHlp, " flags: ................ %s\n", fUsedNoNotify ? "NO_NOTIFY" : "");
pHlp->pfnPrintf(pHlp, "\n");
#ifndef VIRTIO_REL_INFO_DUMP
if (!fEmpty)
{
pHlp->pfnPrintf(pHlp, " desc chain:\n");
@ -718,6 +792,7 @@ DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, P
}
} else
pHlp->pfnPrintf(pHlp, " no desc chains available\n");
#endif /* !VIRTIO_REL_INFO_DUMP */
pHlp->pfnPrintf(pHlp, "\n");
/* Avoid handling zero-sized queues, there is nothing to show anyway. */
@ -782,6 +857,12 @@ DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, P
pHlp->pfnPrintf(pHlp, " ------ - ----------- ---------------- ------- -------- ------------------\n");
for (uint16_t i = 0; i < pVirtq->uQueueSize; i++)
virtioCoreR3DescInfo(pHlp, &descTable[i], i, aszTails[i]);
#ifdef VIRTIO_REL_INFO_DUMP
pHlp->pfnPrintf(pHlp, "\n");
virtioCoreR3DumpAvailRing(pDevIns, pHlp, pVirtio, pVirtq);
pHlp->pfnPrintf(pHlp, "\n");
virtioCoreR3DumpUsedRing(pDevIns, pHlp, pVirtio, pVirtq);
#endif /* VIRTIO_REL_INFO_DUMP */
}
@ -889,10 +970,78 @@ DECLHIDDEN(int) virtioCoreR3VirtqAvailBufNext(PVIRTIOCORE pVirtio, uint16_t uVir
Log6Func(("%s avail shadow idx: %u\n", pVirtq->szName, pVirtq->uAvailIdxShadow));
pVirtq->uAvailIdxShadow++;
#ifdef VIRTIO_REL_INFO_DUMP
virtioCoreTraceEvent(pVirtio, pVirtq, VIRTIO_CORE_EVENT_AVAIL_NEXT, pVirtq->uAvailIdxShadow, 0);
#endif /* VIRTIO_REL_INFO_DUMP */
return VINF_SUCCESS;
}
#ifdef VIRTIO_REL_INFO_DUMP
DECLCALLBACK(void) virtioNetR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs);
static DECLCALLBACK(void) dbgVirtio_Printf(PCDBGFINFOHLP pHlp, const char *pszFormat, ...)
{
RT_NOREF(pHlp);
va_list va;
va_start(va, pszFormat);
RTLogRelPrintfV(pszFormat, va);
va_end(va);
}
static DECLCALLBACK(void) dbgVirtio_PrintfV(PCDBGFINFOHLP pHlp, const char *pszFormat, va_list args)
{
RT_NOREF(pHlp);
RTLogRelPrintfV(pszFormat, args);
}
/**
* @interface_method_impl{DBGCCMDHLP,pfnGetDbgfOutputHlp}
*/
static void dbgVirtioDump(PPDMDEVINS pDevIns)
{
PVIRTIOCORE pVirtio = PDMINS_2_DATA(pDevIns, PVIRTIOCORE);
LogRel(("dbgVirtioDump(%s)\n", pVirtio->szInstance));
if (RTStrNCmp("virtio-net", pVirtio->szInstance, 10) == 0)
{
DBGFINFOHLP DbgHlp;
DbgHlp.pfnPrintf = dbgVirtio_Printf;
DbgHlp.pfnPrintfV = dbgVirtio_PrintfV;
DbgHlp.pfnGetOptError = NULL;
virtioNetR3Info(pDevIns, &DbgHlp, "a"); // Print everything!
}
}
/** Temporary API function: See Header file */
void virtioCorePutAllAvailBufsToUsedRing(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_t uVirtq)
{
PVIRTQUEUE pVirtq = &pVirtio->aVirtqueues[uVirtq];
uint16_t uStartAvailIdx = pVirtq->uAvailIdxShadow;
uint16_t uStartUsedIdx = pVirtq->uUsedIdxShadow;
/*
* Copy chain head indices from avail to used, specifying zero processed length, which should be ok
* for TX queue of virtio-net only!
*/
while (pVirtq->uAvailIdxShadow != virtioReadAvailRingIdx(pDevIns, pVirtio, pVirtq))
virtioWriteUsedElem(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow++,
virtioReadAvailDescIdx(pDevIns, pVirtio, pVirtq, pVirtq->uAvailIdxShadow++), 0);
if (pVirtq->uAvailIdxShadow != uStartAvailIdx)
{
LogRel(("[%s] Copied indices for %s [avail(%u:%u) -> used(%u:%u)]\n", pVirtio->szInstance, pVirtq->szName,
uStartAvailIdx, pVirtq->uAvailIdxShadow - 1, uStartUsedIdx, pVirtq->uUsedIdxShadow - 1));
virtioWriteUsedRingIdx(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow);
virtioCoreNotifyGuestDriver(pDevIns, pVirtio, uVirtq);
}
else
LogRel(("[%s] Avail ring is empty for %s, nothing to copy.\n", pVirtio->szInstance, pVirtq->szName));
}
#endif /* VIRTIO_REL_INFO_DUMP */
/** API Function: See header file */
DECLHIDDEN(int) virtioCoreR3VirtqAvailBufGet(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_t uVirtq,
uint16_t uHeadIdx, PVIRTQBUF pVirtqBuf)
@ -940,20 +1089,39 @@ DECLHIDDEN(int) virtioCoreR3VirtqAvailBufGet(PPDMDEVINS pDevIns, PVIRTIOCORE pVi
* linked descriptors exceeding the total number of descriptors in the ring (see @bugref{8620}),
* the following aborts I/O if breach and employs a simple log throttling algorithm to notify.
*/
#ifdef VIRTIO_REL_INFO_DUMP
if (cSegsIn + cSegsOut >= pVirtq->uQueueSize || ASMAtomicCmpXchgBool(&pVirtio->fTestRecovery, false, true))
{
static volatile uint32_t s_cMessages = 0;
if (ASMAtomicIncU32(&s_cMessages) <= 10)
{
LogRel(("Too many linked descriptors; check if the guest arranges descriptors in a loop "
"(cSegsIn=%u cSegsOut=%u uQueueSize=%u uDescIdx=%u uHeadIdx=%u uAvailIdxShadow=%u queue=%s).\n",
cSegsIn, cSegsOut, pVirtq->uQueueSize, uDescIdx, pVirtqBuf->uHeadIdx, pVirtq->uAvailIdxShadow, pVirtq->szName));
virtioCoreDumpTraceBufToRelLog(pVirtio->hTraceBuf);
dbgVirtioDump(pDevIns);
}
/* Disable the queue to prevent its operation until it is re-initialized. */
pVirtq->uEnable = false;
return VERR_INVALID_STATE;
}
#else /* !VIRTIO_REL_INFO_DUMP */
if (cSegsIn + cSegsOut >= pVirtq->uQueueSize)
{
static volatile uint32_t s_cMessages = 0;
static volatile uint32_t s_cThreshold = 1;
if (ASMAtomicIncU32(&s_cMessages) == ASMAtomicReadU32(&s_cThreshold))
{
LogRelMax(64, ("Too many linked descriptors; check if the guest arranges descriptors in a loop (cSegsIn=%u cSegsOut=%u uQueueSize=%u uDescIdx=%u queue=%s).\n",
cSegsIn, cSegsOut, pVirtq->uQueueSize, uDescIdx, pVirtq->szName));
LogRelMax(64, ("Too many linked descriptors; check if the guest arranges descriptors in a loop "
"(cSegsIn=%u cSegsOut=%u uQueueSize=%u uDescIdx=%u uHeadIdx=%u uAvailIdxShadow=%u queue=%s).\n",
cSegsIn, cSegsOut, pVirtq->uQueueSize, uDescIdx, pVirtqBuf->uHeadIdx, pVirtq->uAvailIdxShadow, pVirtq->szName));
if (ASMAtomicReadU32(&s_cMessages) != 1)
LogRelMax(64, ("(the above error has occured %u times so far)\n", ASMAtomicReadU32(&s_cMessages)));
ASMAtomicWriteU32(&s_cThreshold, ASMAtomicReadU32(&s_cThreshold) * 10);
}
break;
}
#endif /* !VIRTIO_REL_INFO_DUMP */
/* Check if the limit has been reached for input chain (see section 2.4.4.1 of virtio 1.0 spec). */
if (cSegsIn >= RT_ELEMENTS(pVirtqBuf->aSegsIn))
{
@ -1041,6 +1209,9 @@ DECLHIDDEN(int) virtioCoreR3VirtqAvailBufGet(PPDMDEVINS pDevIns, PVIRTIOCORE pVi
if (pVirtio->uDriverFeatures & VIRTIO_F_EVENT_IDX)
virtioWriteUsedAvailEvent(pDevIns,pVirtio, pVirtq, pVirtq->uAvailIdxShadow + 1);
#ifdef VIRTIO_REL_INFO_DUMP
virtioCoreTraceEvent(pVirtio, pVirtq, fRemove ? VIRTIO_CORE_EVENT_AVAIL_GET : VIRTIO_CORE_EVENT_AVAIL_PEEK, pVirtq->uAvailIdxShadow, uHeadIdx);
#endif /* VIRTIO_REL_INFO_DUMP */
if (fRemove)
pVirtq->uAvailIdxShadow++;
@ -1115,6 +1286,9 @@ DECLHIDDEN(int) virtioCoreR3VirtqUsedBufPut(PPDMDEVINS pDevIns, PVIRTIOCORE pVir
* @todo r=aeichner: The increment of the shadow index is not atomic but this code can be called
* concurrently!!
*/
#ifdef VIRTIO_REL_INFO_DUMP
virtioCoreTraceEvent(pVirtio, pVirtq, VIRTIO_CORE_EVENT_USED_PUT, pVirtq->uUsedIdxShadow, pVirtqBuf->uHeadIdx);
#endif /* VIRTIO_REL_INFO_DUMP */
virtioWriteUsedElem(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow++, pVirtqBuf->uHeadIdx, (uint32_t)cbTotal);
#ifdef LOG_ENABLED
@ -1195,6 +1369,9 @@ DECLHIDDEN(int) virtioCoreR3VirtqUsedBufPut(PPDMDEVINS pDevIns, PVIRTIOCORE pVir
Log6Func((" Enqueue desc chain head idx %u to %s used ring @ %u\n", pVirtqBuf->uHeadIdx,
VIRTQNAME(pVirtio, uVirtq), pVirtq->uUsedIdxShadow));
#ifdef VIRTIO_REL_INFO_DUMP
virtioCoreTraceEvent(pVirtio, pVirtq, VIRTIO_CORE_EVENT_USED_PUT, pVirtq->uUsedIdxShadow, pVirtqBuf->uHeadIdx);
#endif /* VIRTIO_REL_INFO_DUMP */
virtioWriteUsedElem(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow++, pVirtqBuf->uHeadIdx, (uint32_t)cbEnqueue);
#ifdef LOG_ENABLED
@ -1229,6 +1406,12 @@ DECLHIDDEN(int) virtioCoreVirtqUsedRingSync(PPDMDEVINS pDevIns, PVIRTIOCORE pVir
Log6Func((" Sync %s used ring (%u -> idx)\n",
pVirtq->szName, pVirtq->uUsedIdxShadow));
#ifdef IN_RING3
// I believe virtioCoreVirtqUsedRingSync is only called from ring 3 in virtio-net
#ifdef VIRTIO_REL_INFO_DUMP
virtioCoreTraceEvent(pVirtio, pVirtq, VIRTIO_CORE_EVENT_USED_SYNC, pVirtq->uUsedIdxShadow, 0);
#endif /* VIRTIO_REL_INFO_DUMP */
#endif /* IN_RING3 */
virtioWriteUsedRingIdx(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow);
virtioCoreNotifyGuestDriver(pDevIns, pVirtio, uVirtq);
@ -1331,6 +1514,11 @@ static void virtioCoreNotifyGuestDriver(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio,
*/
static int virtioNudgeGuest(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint8_t uCause, uint16_t uMsixVector)
{
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pVirtio->fRecovering))
LogRel(("[%s] Raising%s interrupt, because of %s\n", pVirtio->szInstance, pVirtio->fMsiSupport ? " MSI" : "",
uCause == VIRTIO_ISR_VIRTQ_INTERRUPT ? "added buffer" : "config change"));
#endif /* VIRTIO_REL_INFO_DUMP */
if (uCause == VIRTIO_ISR_VIRTQ_INTERRUPT)
Log6Func(("Reason for interrupt - buffer added to 'used' ring.\n"));
else
@ -1559,6 +1747,15 @@ static int virtioCommonCfgAccessed(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, PVIR
uint16_t uVirtq = pVirtio->uVirtqSelect;
int rc = VINF_SUCCESS;
uint64_t val;
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pVirtio->fRecovering))
{
if (fWrite)
LogRel(("[%s] writes %u bytes @ cmn cfg + %u: %.*Rhxs\n", pVirtio->szInstance, cb, uOffsetOfAccess, cb, pv));
else
LogRel(("[%s] attempts to read %u bytes @ cmn cfg + %u\n", pVirtio->szInstance, cb, uOffsetOfAccess));
}
#endif /* VIRTIO_REL_INFO_DUMP */
if (VIRTIO_DEV_CONFIG_MATCH_MEMBER(uDeviceFeatures, VIRTIO_PCI_COMMON_CFG_T, uOffsetOfAccess))
{
if (fWrite) /* Guest WRITE pCommonCfg>uDeviceFeatures */
@ -1724,6 +1921,10 @@ static int virtioCommonCfgAccessed(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, PVIR
fWrite ? "write" : "read ", uOffsetOfAccess, uOffsetOfAccess, cb));
return fWrite ? VINF_SUCCESS : VINF_IOM_MMIO_UNUSED_00;
}
#ifdef VIRTIO_REL_INFO_DUMP
if (ASMAtomicReadBool(&pVirtio->fRecovering) && !fWrite)
LogRel(("[%s] read %u bytes @ cmn cfg + %u: %.*Rhxs\n", pVirtio->szInstance, cb, uOffsetOfAccess, cb, pv));
#endif /* VIRTIO_REL_INFO_DUMP */
#ifndef IN_RING3
RT_NOREF(pDevIns, pVirtioCC);
@ -2794,6 +2995,10 @@ DECLHIDDEN(void) virtioCoreR3VmStateChanged(PVIRTIOCORE pVirtio, VIRTIOVMSTATECH
*/
DECLHIDDEN(void) virtioCoreR3Term(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, PVIRTIOCORECC pVirtioCC)
{
#ifdef VIRTIO_REL_INFO_DUMP
RTTraceBufRelease(pVirtio->hTraceBuf);
pVirtio->hTraceBuf = NIL_RTTRACEBUF;
#endif /* VIRTIO_REL_INFO_DUMP */
if (pVirtioCC->pbPrevDevSpecificCfg)
{
RTMemFree(pVirtioCC->pbPrevDevSpecificCfg);
@ -3150,6 +3355,15 @@ DECLHIDDEN(int) virtioCoreR3Init(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, PVIRTI
PDMDevHlpSTAMRegister(pDevIns, &pVirtio->StatWriteRC, STAMTYPE_PROFILE, "IO/WriteRC", STAMUNIT_TICKS_PER_CALL, "Profiling IO writes in RC");
# endif /* VBOX_WITH_STATISTICS */
#ifdef VIRTIO_REL_INFO_DUMP
pVirtio->fRecovering = false;
pVirtio->fTestRecovery = false;
size_t cbBlock = VIRTIO_CORE_TRACE_BUF_SIZE;
rc = RTTraceBufCarve(&pVirtio->hTraceBuf, 0 /*cEntries*/, 0 /*cbEntry*/, 0 /*fFlags*/, pVirtio->aTraceBuf, &cbBlock);
AssertRC(rc);
if (RT_FAILURE(rc))
LogRel(("virtioCore: Failed to initialize trace buffer (rc=%d)\n", rc));
#endif /* VIRTIO_REL_INFO_DUMP */
return VINF_SUCCESS;
}

View file

@ -36,6 +36,12 @@
#include <iprt/sg.h>
#include <iprt/types.h>
/*
* WARNING! NEVER ENABLE IN PRODUCTION BUILDS!
* Enables temporary printouts to release log in descriptor chain handling code.
*/
//#define VIRTIO_REL_INFO_DUMP 1
#ifdef LOG_ENABLED
# define VIRTIO_HEX_DUMP(logLevel, pv, cb, base, title) \
do { \
@ -457,6 +463,13 @@ typedef struct VIRTIOCORE
uint32_t fOfferLegacy; /**< Set at init call from dev-specific code */
uint16_t uIrqMmio; /**< The interrupt number when Virtio-over-MMIO is used */
uint8_t uDeviceType; /**< The implemented device type for Virtio-over-MMIO */
#ifdef VIRTIO_REL_INFO_DUMP
bool fRecovering;
bool fTestRecovery;
#define VIRTIO_CORE_TRACE_BUF_SIZE (256 /* header */ + 256 * 256 /* buffer*/)
RTTRACEBUF hTraceBuf;
uint8_t aTraceBuf[VIRTIO_CORE_TRACE_BUF_SIZE];
#endif /* VIRTIO_REL_INFO_DUMP */
/** @name The locations of the capability structures in PCI config space and the BAR.
* @{ */
@ -782,6 +795,19 @@ DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, P
*/
DECLHIDDEN(uint16_t) virtioCoreVirtqAvailBufCount(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_t uVirtqNbr);
#ifdef VIRTIO_REL_INFO_DUMP
/**
* Copies all available chains to used ring. Only indices of chains are copied, not the chains
* themselves. This can only be done for virtionet TX ring to work around the issue in NetKVM
* driver, which does not complete NBLs on device reset, if these NBLs are already in 'avail' ring.
*
* @param pDevIns The device instance.
* @param pVirtio Pointer to the shared virtio state.
* @param uVirtqNbr Virtqueue to modify.
*/
void virtioCorePutAllAvailBufsToUsedRing(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_t uVirtqNbr);
#endif /* VIRTIO_REL_INFO_DUMP */
/**
* This function is identical to virtioCoreR3VirtqAvailBufGet(), *except* it doesn't consume
* peeked buffer from avail ring of the virtq. The function *becomes* identical to the

View file

@ -121,7 +121,7 @@ static const RTSCRIPTLEXCFG s_LexCfg =
/** pszDesc */
"ARMv8 disassembler lexer",
/** fFlags */
RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE,
RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_LOWER,
/** pszWhitespace */
NULL,
/** pszNewline */
@ -173,7 +173,7 @@ static void testDisas(const char *pszSub, uint8_t const *pabInstrs, uintptr_t uE
int rc = RTScriptLexCreateFromReader(&hLexSource, testDisasmLexerRead,
NULL /*pfnDtor*/, &Rdr /*pvUser*/, cbSrc,
NULL /*phStrCacheId*/, NULL /*phStrCacheStringLit*/,
&s_LexCfg);
NULL /*phStrCacheComments*/, &s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
if (RT_FAILURE(rc))
return; /* Can't do our work if this fails. */
@ -227,7 +227,8 @@ static void testDisas(const char *pszSub, uint8_t const *pabInstrs, uintptr_t uE
/* Build the lexer and compare that it semantically is equal to the source input. */
RTSCRIPTLEX hLexDis = NULL;
rc = RTScriptLexCreateFromString(&hLexDis, szOutput, NULL /*phStrCacheId*/,
NULL /*phStrCacheStringLit*/, &s_LexCfg);
NULL /*phStrCacheStringLit*/, NULL /*phStrCacheComments*/,
&s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
if (RT_SUCCESS(rc))
{
@ -484,13 +485,14 @@ static void testDisasComplianceAgaistCapstone(void)
rc = RTScriptLexCreateFromReader(&hLexCapstone, testDisasmLexerRead,
NULL /*pfnDtor*/, &Rdr /*pvUser*/, 0 /*cchBuf*/,
NULL /*phStrCacheId*/, NULL /*phStrCacheStringLit*/,
&s_LexCfg);
NULL /*phStrCacheComments*/, &s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
/* Build the lexer and compare that it semantically is equal to the source input. */
RTSCRIPTLEX hLexDis = NULL;
rc = RTScriptLexCreateFromString(&hLexDis, szOutput, NULL /*phStrCacheId*/,
NULL /*phStrCacheStringLit*/, &s_LexCfg);
NULL /*phStrCacheStringLit*/, NULL /*phStrCacheComments*/,
&s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
if (RT_SUCCESS(rc))
{

View file

@ -424,10 +424,6 @@ void UIVisoContentBrowser::createVisoEntry(const QString &strPath, const QString
/* static */
QString UIVisoContentBrowser::sanitizePath(const QString &strOriginal)
{
/* Look for white space and double quote: */
QRegularExpression regex("[\\s\"]");
if (!regex.match(strOriginal).hasMatch())
return strOriginal;
QString strNew(strOriginal);
strNew.replace("\"", "\\\"");
strNew.append("\"");
@ -442,8 +438,8 @@ QStringList UIVisoContentBrowser::entryList()
{
if (iterator.value().isEmpty())
continue;
QString strEntry = QString("%1=%2").arg(sanitizePath(iterator.key())).arg(sanitizePath(iterator.value()));
entryList << strEntry;
QString strEntry = QString("%1=%2").arg(iterator.key()).arg(iterator.value());
entryList << sanitizePath(strEntry);
}
return entryList;
}
@ -897,43 +893,51 @@ void UIVisoContentBrowser::parseVisoFileContent(const QString &strFileName)
return;
QTextStream stream(&file);
QString strFileContent = stream.readAll();
strFileContent.replace(' ', '\n');
QMap<QString, QString> fileEntries;
strFileContent.replace('\'', '\"');
bool fInsideQuotes = false;
/* Replace spaces with new lines expect those within quotes: */
for (int i = 0; i < strFileContent.length(); ++i)
{
if (strFileContent[i] == '\"')
fInsideQuotes = !fInsideQuotes;
if (strFileContent[i] == ' ' && !fInsideQuotes)
strFileContent[i] = '\n';
}
QStringList removedEntries;
foreach (const QString &strPart, strFileContent.split("\n", Qt::SkipEmptyParts))
QStringList lines = strFileContent.split('\n', Qt::SkipEmptyParts);
for (int i = 0; i < lines.size(); ++i)
{
const QStringList fileEntry = strPart.split("=", Qt::SkipEmptyParts);
/* We currently do not support different on-ISO names for different namespaces. */
if (strPart.startsWith("/") && strPart.count('=') <= 1)
const QString &strLine = lines[i];
if (strLine.count('=') == 1)
{
if (fileEntry.size() == 1)
/* file-mode and dir-mode. something for later to deal with: */
if (strLine.contains("file-mode") || strLine.contains("dir-mode"))
continue;
QStringList lineParts = strLine.split('=');
if (lineParts.size() == 2)
{
QFileInfo fileInfo(fileEntry[0]);
if (fileInfo.exists())
if (lineParts[1].contains("must-remove"))
{
QString isoName = QString("/%1").arg(fileInfo.fileName());
fileEntries[isoName] = fileEntry[0];
}
}
else if (fileEntry.size() == 2)
{
if (QFileInfo(fileEntry[1]).exists())
fileEntries[fileEntry[0]] = fileEntry[1];
else if (fileEntry[1] == cRemoveText)
removedEntries.append(fileEntry[0]);
}
removedEntries << lineParts[0];
}
else
{
if(fileEntry.size() == 2 && fileEntry[0].contains("import-iso", Qt::CaseInsensitive))
lineParts[0].remove('\"');
lineParts[1].remove('\"');
/* Check if target file structure exists: */
if (QFileInfo(lineParts[1]).exists())
fileEntries[lineParts[0]] = lineParts[1];
}
}
continue;
}
if (strLine.contains("import-iso") && i + 1 < lines.size())
{
if (QFileInfo(fileEntry[1]).exists())
importISOContentToViso(fileEntry[1]);
if (QFileInfo(lines[i+1]).exists())
importISOContentToViso(lines[i+1]);
}
}
}
file.close();
createLoadedFileEntries(fileEntries);
processRemovedEntries(removedEntries);
}
@ -974,7 +978,7 @@ void UIVisoContentBrowser::createLoadedFileEntries(const QMap<QString, QString>
pItem->setData(strLocalPath, UIFileSystemModelData_LocalPath);
/* Pre-scan and populate the directory since we may need its content while processing removed items: */
if (enmObjectType == KFsObjType_Directory)
scanHostDirectory(pItem, true /* recursive */);
scanHostDirectory(pItem, false /* recursive */);
}
if (i == pathList.size() - 1)
createVisoEntry(pItem->path(), pItem->data(UIFileSystemModelData_LocalPath).toString(), false);
@ -1067,13 +1071,17 @@ void UIVisoContentBrowser::scanHostDirectory(UIFileSystemItem *directoryItem, bo
void UIVisoContentBrowser::updateStartItemName()
{
if (!rootItem() || !rootItem()->child(0))
UIFileSystemItem *pRoot = rootItem();
if (!pRoot)
return;
UIFileSystemItem *pChild = pRoot->child(0);
if (!pChild)
return;
const QString strName(QDir::toNativeSeparators("/"));
rootItem()->child(0)->setData(strName, UIFileSystemModelData_Name);
pChild->setData(strName, UIFileSystemModelData_Name);
/* If the table root index is the start item then we have to update the location selector text here: */
// if (m_pProxyModel->mapToSource(m_pTableView->rootIndex()).internalPointer() == rootItem()->child(0))
// if (m_pProxyModel->mapToSource(m_pTableView->rootIndex()).internalPointer() == pChild)
// updateLocationSelectorText(strName);
m_pProxyModel->invalidate();
}
@ -1137,10 +1145,14 @@ void UIVisoContentBrowser::sltTableSelectionChanged(const QItemSelection &select
void UIVisoContentBrowser::sltResetAction()
{
if (!rootItem() || !rootItem()->child(0))
UIFileSystemItem *pRoot = rootItem();
if (!pRoot)
return;
UIFileSystemItem *pChild = pRoot->child(0);
if (!pChild)
return;
goToStart();
rootItem()->child(0)->removeChildren();
pChild->removeChildren();
m_entryMap.clear();
if (m_pProxyModel)
m_pProxyModel->invalidate();

View file

@ -62,6 +62,7 @@ signals:
void sigTableSelectionChanged(bool fIsSelectionEmpty);
void sigISOContentImportedOrRemoved(bool fImportedr);
void sigVolumeIdParsed(const QString &strVoludId);
public:

View file

@ -374,7 +374,7 @@ void UIVisoCreatorWidget::setVisoFilePath(const QString& strPath)
{
if (m_strVisoFilePath == strPath)
return;
m_strVisoFilePath = strPath;
m_strVisoFilePath = QDir::fromNativeSeparators(QDir::cleanPath(strPath));
emit sigVisoFilePathChanged(m_strVisoFilePath);
}
@ -439,8 +439,12 @@ void UIVisoCreatorWidget::sltOpenAction()
QString strFileName = QIFileDialog::getOpenFileName(UIMediumTools::defaultFolderPathForType(UIMediumDeviceType_DVD),
"VISO files (*.viso)", pActive, UIVisoCreatorWidget::tr("Select a VISO file to load"));
if (!strFileName.isEmpty() && m_pVISOContentBrowser)
{
setVisoFilePath(QFileInfo(strFileName).absolutePath());
setVisoName(QFileInfo(strFileName).baseName());
m_pVISOContentBrowser->parseVisoFileContent(strFileName);
}
}
void UIVisoCreatorWidget::sltSaveAsAction()
{
@ -485,6 +489,11 @@ void UIVisoCreatorWidget::sltISOContentImportedOrRemoved(bool fImported)
m_pRemoveISOAction->setEnabled(fImported);
}
void UIVisoCreatorWidget::sltVisoVolumeIdParsed(const QString &strVolumeId)
{
setVisoName(strVolumeId);
}
void UIVisoCreatorWidget::sltSettingsChanged()
{
AssertReturnVoid(m_pSettingsWidget);
@ -591,6 +600,8 @@ void UIVisoCreatorWidget::prepareConnections()
this, &UIVisoCreatorWidget::sltContentBrowserTableSelectionChanged);
connect(m_pVISOContentBrowser, &UIVisoContentBrowser::sigISOContentImportedOrRemoved,
this, &UIVisoCreatorWidget::sltISOContentImportedOrRemoved);
connect(m_pVISOContentBrowser, &UIVisoContentBrowser::sigVolumeIdParsed,
this, &UIVisoCreatorWidget::sltVisoVolumeIdParsed);
}
if (m_pActionPreferences)
@ -987,7 +998,7 @@ bool UIVisoCreatorDialog::saveVISOFile()
stream << QString("%1 %2").arg("--iprt-iso-maker-file-marker-bourne-sh").arg(QUuid::createUuid().toString()) << "\n";
stream<< "--volume-id=" << UIVisoContentBrowser::sanitizePath(strVisoName) << "\n";
if (!strImportedISOPath.isEmpty())
stream << "--import-iso=" << strImportedISOPath << "\n";
stream << "--import-iso " << strImportedISOPath << "\n";
stream << VisoEntryList.join("\n");
if (!customOptions().isEmpty())
{

View file

@ -134,6 +134,7 @@ private slots:
void sltISOContentImportedOrRemoved(bool fImported);
void sltSettingsChanged();
void sltPanelContainerHidden();
void sltVisoVolumeIdParsed(const QString &strVolumeId);
private:

View file

@ -643,6 +643,9 @@ bool UIMachineSettingsDisplay::validate(QList<UIValidationMessage> &messages)
m_f3DAccelerationSupported = graphicsControllerTypeCurrent() == KGraphicsControllerType_VBoxSVGA
? UIGuestOSTypeHelpers::isWddmCompatibleOsType(m_strGuestOSTypeId)
: false;
/* Special handling for MacOS guests, 3D is NOT available at all: */
else if (m_strGuestOSTypeId.startsWith("MacOS"))
m_f3DAccelerationSupported = false;
/* For the rest of guest OS types 3D is available for VMSVGA only: */
else
m_f3DAccelerationSupported = graphicsControllerTypeCurrent() == KGraphicsControllerType_VMSVGA;

View file

@ -1744,10 +1744,17 @@ SUPR0DECL(bool) SUPR0FpuBegin(bool fCtxHook)
*/
Assert(fCtxHook || !RTThreadPreemptIsEnabled(NIL_RTTHREAD));
kernel_fpu_begin();
# if 0 /* Always do it for now for better test coverage. */
# if RTLNX_VER_MIN(6,15,0) /* fpregs_unlock may do more than just preempt_enable, so only when necessary now. */
if (fCtxHook)
# endif
{
# if RTLNX_VER_MIN(6,15,0)
if (!irqs_disabled())
fpregs_unlock();
# else
preempt_enable();
# endif
}
return false; /** @todo Not sure if we have license to use any extended state, or
* if we're limited to the SSE & x87 FPU. If it's the former,
* we should return @a true and the caller can skip
@ -1765,10 +1772,17 @@ SUPR0DECL(void) SUPR0FpuEnd(bool fCtxHook)
#if RTLNX_VER_MIN(4,19,0)
/* HACK ALERT! See SUPR0FpuBegin for an explanation of this. */
Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD));
# if 0 /* Always do it for now for better test coverage. */
# if RTLNX_VER_MIN(6,15,0) /* fpregs_unlock may do more than just preempt_enable, so only when necessary now. */
if (fCtxHook)
# endif
{
# if RTLNX_VER_MIN(6,15,0)
if (!irqs_disabled())
fpregs_lock();
# else
preempt_disable();
# endif
}
kernel_fpu_end();
#endif
}

View file

@ -42,7 +42,7 @@ Provider=%ORACLE%
;edit-DriverVer=08/26/2008,2.00.0000
DriverPackageType=KernelService
;cat CatalogFile=VBoxSup.cat
;PnpLockdown=1
PnpLockdown=1
[DestinationDirs]
DefaultDestDir = 12

View file

@ -43,6 +43,7 @@ Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
Provider = %ORACLE%
;edit-DriverVer=10/23/2014,1.0.1.0
PnpLockdown=1
[Manufacturer]

View file

@ -41,6 +41,7 @@ Class = NetService
ClassGUID = {4D36E974-E325-11CE-BFC1-08002BE10318}
Provider = %ORACLE%
;edit-DriverVer=10/23/2014,1.0.1.0
PnpLockdown=1
[Manufacturer]

View file

@ -41,7 +41,7 @@ ClassGUID={36FC9E60-C465-11CF-8056-444553540000}
provider=%ORACLE%
;edit-DriverVer=08/26/2008,2.00.0000
;cat CatalogFile=VBoxUSB.cat
;PnpLockdown=1
PnpLockdown=1
[SourceDisksNames]
1=%VBoxUSB_DiskDesc%,,,
@ -50,7 +50,7 @@ provider=%ORACLE%
VBoxUSB.sys = 1
[DestinationDirs]
DefaultDestDir = 10,System32\Drivers
DefaultDestDir = 12
[Manufacturer]
%ORACLE%=VBoxUSB@COMMA-NT-ARCH@

View file

@ -42,7 +42,7 @@ Provider=%ORACLE%
;edit-DriverVer=08/26/2008,2.00.0000
DriverPackageType=KernelService
;cat CatalogFile=VBoxUSBMon.cat
;PnpLockdown=1
PnpLockdown=1
[SourceDisksNames]
1=%VBoxUSBMon_DiskDesc%,

View file

@ -1,3 +1,4 @@
/* $Id: fuse-calls.h $ */
/** @file
* Stubs for dynamically loading libfuse/libosxfuse and the symbols which are needed by
* VirtualBox.

View file

@ -1,7 +1,6 @@
/* $Id: fuse.cpp $ */
/** @file
*
* Module to dynamically load libfuse and load all symbols
* Module to dynamically load libfuse/libosxfuse and load all symbols
* which are needed by vboximg-mount.
*/

View file

@ -1,6 +1,7 @@
/* $Id: fuse.h $ */
/** @file
* Module to dynamically load libfuse/libosxfuse and load all symbols which are needed by
* vboximg-mount.
* Module to dynamically load libfuse/libosxfuse and load all symbols
* which are needed by vboximg-mount.
*/
/*

View file

@ -1,5 +1,4 @@
/* $Id: vboximgCrypto.cpp $ */
/** @file
* vboximgCypto.cpp - Disk Image Flattening FUSE Program.
*/

View file

@ -1,5 +1,4 @@
/* $Id: vboximgCrypto.h $ */
/** @file
* vboximgCrypto.h
*/

View file

@ -1,5 +1,4 @@
/* $Id: vboximgMedia.h $ */
/** @file
* vboximgMedia.h
*/

View file

@ -1,6 +1,4 @@
/* $Id: vboximgOpts.h $ */
/** @file
* vboximgOpts.h
*/

View file

@ -115,6 +115,7 @@ VBOXMOD_EXT := ko
# build defs
EXTRA_CFLAGS += $(VBOXMOD_CFLAGS) $(addprefix -I,$(KERN_INCL) $(VBOXMOD_INCL)) $(VBOXMOD_0_KFLAGS) $(KDEBUG)
ccflags-y += $(EXTRA_CFLAGS)
$(VBOXMOD_0_TARGET)-y := $(VBOXMOD_OBJS)
obj-m += $(VBOXMOD_0_TARGET).o

View file

@ -8,6 +8,7 @@ fedora38 = FEDORA_38
fedora37 = FEDORA_37
fedora36 = FEDORA_36
fedora35 = FEDORA_35
el10 = EL_10
el9 = EL_9
el8 = EL_8
el7 = EL_7

View file

@ -136,29 +136,34 @@ mv virtualbox.xml $RPM_BUILD_ROOT/usr/share/mime/packages
old_path="$PATH"
PATH=${PATH#/opt/rh/devtoolset-4/root/usr/bin:}
%endif
%if "%BUILDREL%" == "openSUSE156"
# For openSUSE156 we need GCC 10+ to build Qt 6.8 related code. However,
# kernel modules need be built with older GCC.
VBOX_EXTRA_FLAGS="CC=gcc-7"
%endif
for d in /lib/modules/*; do
if [ -L $d/build ]; then
rm -f /tmp/vboxdrv-Module.symvers
./src/vboxhost/build_in_tmp \
--save-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxdrv \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT $VBOX_EXTRA_FLAGS -j4 \
%INSTMOD%
./src/vboxhost/build_in_tmp \
--use-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxnetflt \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT $VBOX_EXTRA_FLAGS -j4 \
%INSTMOD%
./src/vboxhost/build_in_tmp \
--use-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxnetadp \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT $VBOX_EXTRA_FLAGS -j4 \
%INSTMOD%
if [ -e `pwd`/src/vboxhost/vboxpci ]; then
./src/vboxhost/build_in_tmp \
--use-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxpci \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT -j4 \
KBUILD_VERBOSE= KERN_VER=$(basename $d) INSTALL_MODULE_PATH=$RPM_BUILD_ROOT $VBOX_EXTRA_FLAGS -j4 \
%INSTMOD%
fi
fi
@ -168,6 +173,9 @@ done
PATH="$old_path"
unset old_path
%endif
%if "%BUILDREL%" == "openSUSE156"
unset VBOX_EXTRA_FLAGS
%endif
rm -r src
%endif
for i in additions/VBoxGuestAdditions.iso; do

View file

@ -124,10 +124,10 @@ ifneq ($(MAKECMDGOALS),clean)
$(error Cannot detect package distribution (rpmrel=$(rpmrel)))
endif
ifeq ($(filter-out el5 el6 el7 el8 el9 fedora18 fedora19 fedora20 fedora21 fedora22 fedora24 fedora25 fedora26 fedora29 fedora31 fedora32 fedora33 fedora35 fedora36 fedora40,$(rpmrel)),)
ifeq ($(filter-out el5 el6 el7 el8 el9 el10 fedora18 fedora19 fedora20 fedora21 fedora22 fedora24 fedora25 fedora26 fedora29 fedora31 fedora32 fedora33 fedora35 fedora36 fedora40,$(rpmrel)),)
rpmspec := rpm_redhat
endif
ifeq ($(filter-out openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114 openSUSE123 openSUSE131 openSUSE132 openSUSE150 openSUSE153 openSUSETW,$(rpmrel)),)
ifeq ($(filter-out openSUSE110 openSUSE111 openSUSE112 openSUSE113 openSUSE114 openSUSE123 openSUSE131 openSUSE132 openSUSE150 openSUSE153 openSUSE156 openSUSETW,$(rpmrel)),)
rpmspec := rpm_suse
endif
ifeq ($(rpmspec),)
@ -182,7 +182,7 @@ cfg_flags := $(if $(NOQT),--disable-qt,) \
$(if $(NOWINE),,--setup-wine) \
$(if $(VNC),--enable-vnc,) \
$(if $(PATH_OUT_BASE),--out-base-dir=$(PATH_OUT_BASE),) \
--disable-extpack
--disable-extpack --disable-vmmraw --build-libssl --disable-java
bld_flags := LOCALCFG=$(instlin)/rpm/LocalConfig.kmk \
PATH_OUT=$(builddir) \

View file

@ -100,9 +100,10 @@ fi
KERN_VER=`uname -r`
# Prepend PATH for building UEK7 on OL8 distribution.
# Prepend PATH for building UEK on OL8/9 distributions.
case "$KERN_VER" in
5.15.0-*.el8uek*) PATH="/opt/rh/gcc-toolset-11/root/usr/bin:$PATH";;
6.12.0-*.el9uek*)PATH="/opt/rh/gcc-toolset-14/root/usr/bin:$PATH";;
esac
if test -e "${MODULE_SRC}/vboxpci"; then

View file

@ -102,9 +102,10 @@ checkdep_ips_python()
# python 2.7: S11 FCS -> S11.4 SRU56 [removed in S11.4 SRU57]
# python 3.4: S11.3 FCS -> S11.4 SRU26 [removed in S11.4 SRU27]
# python 3.5: S11.4 FCS -> S11.4 SRU29 [removed in S11.4 SRU30]
# python 3.7: S11.4 SRU4 -> TBD
# python 3.7: S11.4 SRU4 -> S11.4 SRU71 [removed in S11.4 SRU72]
# python 3.9: S11.4 SRU30 -> TBD
# python 3.11: S11.4 SRU54 -> TBD
# python 3.13: S11.4 SRU78 -> TBD
if test "$UPDATE" -lt 3 || test "$UPDATE" -gt 4; then # S11 FCS - S11.2 SRU15 or anything before S11 FCS
PKG_MISSING_IPS="$PKG_MISSING_IPS runtime/python-26 or runtime/python-27"
elif test "$UPDATE" -eq 3 && test "$SRU" -le 19; then # S11.3 FCS - S11.3 SRU19
@ -121,10 +122,12 @@ checkdep_ips_python()
PKG_MISSING_IPS="$PKG_MISSING_IPS runtime/python-27 or runtime/python-37 or runtime/python-39"
elif test "$UPDATE" -eq 4 && test "$SRU" -le 56; then # S11.4 SRU54 - S11.4 SRU56
PKG_MISSING_IPS="$PKG_MISSING_IPS runtime/python-27 or runtime/python-37 or runtime/python-39 or runtime/python-311"
elif test "$UPDATE" -eq 4 && test "$SRU" -gt 56; then # S11.4 SRU57 - S11.4 SRU<latest>
elif test "$UPDATE" -eq 4 && test "$SRU" -le 71; then # S11.4 SRU57 - S11.4 SRU71
PKG_MISSING_IPS="$PKG_MISSING_IPS runtime/python-37 or runtime/python-39 or runtime/python-311"
elif test "$UPDATE" -eq 4 && test "$SRU" -gt 71; then # S11.4 SRU72 - S11.4 SRU<latest>
PKG_MISSING_IPS="$PKG_MISSING_IPS runtime/python-39 or runtime/python-311 or runtime/python-313"
else # Fall through just in case.
PKG_MISSING_IPS="$PKG_MISSING_IPS runtime/python-37 or runtime/python-39 or runtime/python-311"
PKG_MISSING_IPS="$PKG_MISSING_IPS runtime/python-39 or runtime/python-311 or runtime/python-313"
fi
return 1
@ -239,7 +242,7 @@ if test -x "$BIN_PKG"; then
checkdep_ips "x11/library/mesa"
checkdep_ips "x11/library/toolkit/libxt"
checkdep_ips "x11/library/xcb-util"
checkdep_ips_python "runtime/python-26" "runtime/python-27" "runtime/python-34" "runtime/python-35" "runtime/python-37" "runtime/python-39" "runtime/python-311"
checkdep_ips_python "runtime/python-26" "runtime/python-27" "runtime/python-34" "runtime/python-35" "runtime/python-37" "runtime/python-39" "runtime/python-311" "runtime/python-313"
checkdep_ips_either "system/library/gcc/gcc-c++-runtime" "system/library/gcc/gcc-c++-runtime-9"
checkdep_ips_either "system/library/gcc/gcc-c-runtime" "system/library/gcc/gcc-c-runtime-9"
else

View file

@ -944,7 +944,7 @@ install_python_bindings()
else
errorprint "Failed to install bindings for Python $PYTHON_VER"
fi
rm "$CONFIG_DIR/python-$CONFIG_FILES"
rm -f "$CONFIG_DIR/python-$CONFIG_FILES"
# Remove files created by Python API setup.
rm -rf "$MY_PYTHON_INSTALLER_PATH/build"

View file

@ -32,6 +32,7 @@ ClassGuid = {4d36e97d-e325-11ce-bfc1-08002be10318}
CatalogFile = VBoxExtPackPuel.cat
Provider = %ORACLE%
;edit-DriverVer = 08/26/2008,2.00.0000
PnpLockdown=1
[SourceDisksNames]
1=%VBoxExtPackPuel.DskDesc%,"",,

View file

@ -32,6 +32,7 @@ ClassGuid = {4d36e97d-e325-11ce-bfc1-08002be10318}
CatalogFile = VMMR0.cat
Provider = %ORACLE%
;edit-DriverVer = 08/26/2008,2.00.0000
PnpLockdown=1
[SourceDisksNames]
1=%VBoxVMM.DskDesc%,"",,

View file

@ -1160,7 +1160,7 @@
<!-- Property which defines if we need to show the customization dialog or not.
We only show the dialog on new installs to let the users choose the components to install. -->
<Property Id="VBOX_SHOW_CUSTOMIZE_DLG" Value="((PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED) OR ((NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)))" />
<Property Id="VBOX_SHOW_CUSTOMIZE_DLG" Value="((PREVIOUSVERSIONDETECTED OR NEWERVERSIONDETECTED) OR ((NOT PREVIOUSVERSIONDETECTED) AND (NOT NEWERVERSIONDETECTED)))" />
<?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
<!-- Property which defines whether the license dialog will be shown or not. -->
<Property Id="VBOX_SHOW_LICENSE_DLG" Value="1" />
@ -1202,8 +1202,8 @@
<Publish Dialog="VBoxCheckSerialDlg" Control="Back" Event="NewDialog" Value="VBoxLicenseAgreementDlg" Condition="VBOX_SHOW_LICENSE_DLG" />
<Publish Dialog="VBoxCheckSerialDlg" Control="Back" Event="NewDialog" Value="VBoxWelcomeDlg" Condition="NOT VBOX_SHOW_LICENSE_DLG" />
<Publish Dialog="VBoxCheckSerialDlg" Control="Next" Event="DoAction" Value="ca_CheckSerial" Order="1" />
<Publish Dialog="VBoxCheckSerialDlg" Control="Next" Event="NewDialog" Value="VBoxCustomizeDlg" Condition="(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED) AND (VBOX_SERIAL_IS_VALID=&quot;1&quot;)" />
<Publish Dialog="VBoxCheckSerialDlg" Control="Next" Event="NewDialog" Value="VBoxCustomizeDlg" Condition="(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED) AND (VBOX_SERIAL_IS_VALID=&quot;1&quot;)" />
<Publish Dialog="VBoxCheckSerialDlg" Control="Next" Event="NewDialog" Value="VBoxCustomizeDlg" Condition="(PREVIOUSVERSIONDETECTED OR NEWERVERSIONDETECTED) AND (VBOX_SERIAL_IS_VALID=&quot;1&quot;)" />
<Publish Dialog="VBoxCheckSerialDlg" Control="Next" Event="NewDialog" Value="VBoxCustomizeDlg" Condition="(NOT PREVIOUSVERSIONDETECTED) AND (NOT NEWERVERSIONDETECTED) AND (VBOX_SERIAL_IS_VALID=&quot;1&quot;)" />
<Publish Dialog="VBoxCheckSerialDlg" Control="Next" Event="NewDialog" Value="VBoxWrongSerialDlg" Condition="VBOX_SERIAL_IS_VALID=&quot;0&quot;" />
<Publish Dialog="VBoxWrongSerialDlg" Control="Back" Event="NewDialog" Value="VBoxCheckSerialDlg" />

View file

@ -130,8 +130,8 @@
Maximum="9.9.99" IncludeMaximum="yes"
OnlyDetect="no" />
<!-- Flag is set if the install will trigger an upgrade of an existing install -->
<UpgradeVersion Property="PREVIOUSVERSIONSINSTALLED" Minimum="1.0.0.0" Maximum="$(var.Property_Version)" IncludeMaximum="no" />
<!-- Detect if an older version (than this version) of VirtualBox already is installed. -->
<UpgradeVersion Property="PREVIOUSVERSIONDETECTED" Minimum="1.0.0.0" Maximum="$(var.Property_Version)" IncludeMaximum="no" />
</Upgrade>

View file

@ -3380,14 +3380,6 @@ DECLCALLBACK(int) ConsoleVRDPServer::ClipboardServiceExtension(void *pvExtension
}
} break;
case VBOX_CLIPBOARD_EXT_FN_FORMAT_REPORT_TO_GUEST:
{
/* We need to handle this case here, to act as a no-op.
*
* If not being handled, this function otherwise would return VERR_NOT_SUPPORTED,
* which in turn then will invoke the host backend, messing up the VRDE clipboard handling. */
} break;
case VBOX_CLIPBOARD_EXT_FN_DATA_READ:
{
/* The clipboard service expects that the pvData buffer will be filled

View file

@ -581,7 +581,7 @@ int GuestDirectory::i_onDirNotify(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRL
case GUEST_DIR_NOTIFYTYPE_LIST:
{
ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mParms >= 4, ("mParms=%u\n", pSvcCbData->mParms),
ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mParms == 5, ("mParms=%u\n", pSvcCbData->mParms),
vrc = VERR_WRONG_PARAMETER_COUNT);
ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mpaParms[idx].type == VBOX_HGCM_SVC_PARM_32BIT,
("type=%u\n", pSvcCbData->mpaParms[idx].type),
@ -599,8 +599,6 @@ int GuestDirectory::i_onDirNotify(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRL
/*
* Fetch buffer with packed directory entries.
*/
ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mParms == 5, ("mParms=%u\n", pSvcCbData->mParms),
vrc = VERR_WRONG_PARAMETER_COUNT);
ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mpaParms[idx].type == VBOX_HGCM_SVC_PARM_PTR,
("type=%u\n", pSvcCbData->mpaParms[idx].type),
vrc = VERR_WRONG_PARAMETER_TYPE);
@ -608,7 +606,6 @@ int GuestDirectory::i_onDirNotify(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRL
uint32_t cbBuf;
vrc = HGCMSvcGetPv(&pSvcCbData->mpaParms[idx], &pvBuf, &cbBuf);
AssertRCBreak(vrc);
AssertBreakStmt(cbBuf >= sizeof(GSTCTLDIRENTRYEX), vrc = VERR_INVALID_PARAMETER);
dataCb.u.list.paEntries = (PCALLBACKDATA_DIR_ENTRY *)RTMemAllocZ(dataCb.u.list.cEntries * sizeof(PCALLBACKDATA_DIR_ENTRY));
AssertPtrBreakStmt(dataCb.u.list.paEntries, vrc = VERR_NO_MEMORY);

View file

@ -415,6 +415,7 @@ static DECLCALLBACK(int) recordingCodecVPXEncode(PRECORDINGCODEC pCodec, PRECORD
case RECORDINGFRAME_TYPE_CURSOR_SHAPE:
{
RecordingVideoFrameFree(pCodec->Video.VPX.pCursorShape);
pCodec->Video.VPX.pCursorShape = RecordingVideoFrameDup(&pFrame->u.CursorShape);
AssertPtr(pCodec->Video.VPX.pCursorShape);

View file

@ -29,11 +29,13 @@
/*********************************************************************************************************************************
* Header Files *
*********************************************************************************************************************************/
#include <VBox/com/com.h>
#include <VBox/com/array.h>
#include <VBox/com/string.h>
#include <iprt/mem.h>
#include <iprt/rand.h>
#include <iprt/stream.h>
#include <iprt/string.h>
#include <iprt/test.h>
#include <iprt/uni.h>
@ -47,8 +49,21 @@ int main()
{
RTTestBanner(hTest);
/* Sizes / Pre-allocations. */
HRESULT hrc = com::Initialize();
if (FAILED(hrc))
{
RTPrintf("ERROR: failed to initialize COM, hrc=%Rhrc\n", hrc);
return RTEXITCODE_FAILURE;
}
/* Some simple push-to-front test to catch some off-by-one errors. */
com::SafeArray<int> aInt;
aInt.push_front(42);
/* Test NULL'ing. */
aInt.setNull();
/* Sizes / Pre-allocations. */
RTTESTI_CHECK(aInt.size() == 0);
com::SafeArray<int> aInt2(42);
@ -89,6 +104,54 @@ int main()
RTTESTI_CHECK_MSG(aInt[i] == aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1],
("Got %d, expected %d\n", aInt[i], aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1]));
/* Push to back first, then push to front. */
com::SafeArray<int> aInt4;
for (size_t i = 0; i < RT_ELEMENTS(aPushToBack); i++)
{
RTTESTI_CHECK(aInt4.push_back(aPushToBack[i]));
RTTESTI_CHECK(aInt4.size() == i + 1);
RTTESTI_CHECK(aInt4[i] == aPushToBack[i]);
}
for (size_t i = 0; i < RT_ELEMENTS(aPushToBack); i++)
RTTESTI_CHECK_MSG(aInt4[i] == aPushToBack[i], ("Got %d, expected %d\n", aInt4[i], aPushToBack[i]));
for (size_t i = 0; i < RT_ELEMENTS(aPushToFront); i++)
{
RTTESTI_CHECK(aInt4.push_front(aPushToFront[i]));
RTTESTI_CHECK(aInt4.size() == i + 1 + RT_ELEMENTS(aPushToBack));
RTTESTI_CHECK(aInt4[0] == aPushToFront[i]);
}
for (size_t i = 0; i < RT_ELEMENTS(aPushToFront); i++)
RTTESTI_CHECK_MSG(aInt4[i] == aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1],
("Got %d, expected %d\n", aInt4[i], aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1]));
aInt4.setNull();
/* Push to front first, then push to back. */
com::SafeArray<int> aInt5;
for (size_t i = 0; i < RT_ELEMENTS(aPushToFront); i++)
{
RTTESTI_CHECK(aInt5.push_front(aPushToFront[i]));
RTTESTI_CHECK(aInt5.size() == i + 1);
RTTESTI_CHECK(aInt5[0] == aPushToFront[i]);
}
for (size_t i = 0; i < RT_ELEMENTS(aPushToFront); i++)
RTTESTI_CHECK_MSG(aInt5[i] == aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1],
("Got %d, expected %d\n", aInt5[i], aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1]));
/* Push to back. */
for (size_t i = 0; i < RT_ELEMENTS(aPushToBack); i++)
{
RTTESTI_CHECK(aInt5.push_back(aPushToBack[i]));
RTTESTI_CHECK(aInt5.size() == i + 1 + RT_ELEMENTS(aPushToFront));
RTTESTI_CHECK(aInt5[i + RT_ELEMENTS(aPushToFront)] == aPushToBack[i]);
}
for (size_t i = 0; i < RT_ELEMENTS(aPushToBack); i++)
RTTESTI_CHECK_MSG(aInt5[i + RT_ELEMENTS(aPushToFront)] == aPushToBack[i],
("Got %d, expected %d\n", aInt5[i], aPushToBack[i]));
aInt5.setNull();
/* A bit more data. */
aInt.setNull();
for (size_t i = 0; i < RTRandU32Ex(_4K, _64M); i++)

View file

@ -120,13 +120,11 @@ else
endif
VBOX_PATH_GSOAP_BIN := $(strip $(VBOX_PATH_GSOAP_BIN))
if "$(VBOX_PATH_GSOAP_BIN)" == ""
VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP)/bin
if "$(KBUILD_HOST)" == "darwin"
VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/macosx
else if "$(KBUILD_HOST)" == "win"
VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/win32
if "$(KBUILD_HOST).$(KBUILD_HOST_ARCH)" == "win.arm64"
# Reuse amd64 binaries
VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP)/bin/win.amd64
else
VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP_BIN)/$(KBUILD_HOST).x86
VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP)/bin/$(KBUILD_HOST).$(KBUILD_HOST_ARCH)
endif
if !exists($(VBOX_PATH_GSOAP_BIN))
VBOX_PATH_GSOAP_BIN := $(VBOX_PATH_GSOAP)/bin

View file

@ -81,6 +81,8 @@ typedef struct RTSCRIPTLEXINT
RTSTRCACHE hStrCacheId;
/** String literal string cache. */
RTSTRCACHE hStrCacheStringLit;
/** Comment string cache. */
RTSTRCACHE hStrCacheComments;
/** Status code from the reader. */
int rcRdr;
/** Internal error info. */
@ -108,8 +110,10 @@ typedef RTSCRIPTLEXINT *PRTSCRIPTLEXINT;
#define RTSCRIPT_LEX_INT_F_STR_CACHE_ID_FREE RT_BIT_32(0)
/** Free the string literal string cache literal on destruction. */
#define RTSCRIPT_LEX_INT_F_STR_CACHE_STR_LIT_FREE RT_BIT_32(1)
/** Free the comments string cache literal on destruction. */
#define RTSCRIPT_LEX_INT_F_STR_CACHE_COMMENTS_FREE RT_BIT_32(2)
/** End of stream reached. */
#define RTSCRIPT_LEX_INT_F_EOS RT_BIT_32(2)
#define RTSCRIPT_LEX_INT_F_EOS RT_BIT_32(3)
/*********************************************************************************************************************************
@ -266,11 +270,11 @@ DECLINLINE(bool) rtScriptLexLocateExactMatchConsume(PRTSCRIPTLEXINT pThis, char
}
DECLINLINE(bool) rtScriptLexIsNewlineConsume(PRTSCRIPTLEXINT pThis, char ch)
DECLINLINE(bool) rtScriptLexIsNewlineConsumeEx(PRTSCRIPTLEXINT pThis, char ch, unsigned *pidx)
{
const char **papszNl = pThis->pCfg->pszWhitespace ? pThis->pCfg->papszNewline : g_aszNlDef;
const char **papszNl = pThis->pCfg->papszNewline ? pThis->pCfg->papszNewline : g_aszNlDef;
bool fMatched = rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszNl, NULL);
bool fMatched = rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszNl, pidx);
if (fMatched)
{
pThis->Pos.iLine++;
@ -281,6 +285,33 @@ DECLINLINE(bool) rtScriptLexIsNewlineConsume(PRTSCRIPTLEXINT pThis, char ch)
}
DECLINLINE(bool) rtScriptLexIsNewlineConsume(PRTSCRIPTLEXINT pThis, char ch)
{
return rtScriptLexIsNewlineConsumeEx(pThis, ch, NULL);
}
/**
* Checks whether the character is the beginning of a multi line comment.
*
* @returns Flag whether a comment was detected.
* @param hScriptLex The lexer state.
* @param ch The character to check for.
* @param pidxMatch Where to store the index of the matching substring if found,
* optional.
* @note This consumes the start of the single line comment.
*/
DECLINLINE(bool) rtScriptLexIsMultiLineComment(PRTSCRIPTLEXINT pThis, char ch, unsigned *pidxMatch)
{
const char **papszCommentMultiStart = pThis->pCfg->papszCommentMultiStart;
if ( papszCommentMultiStart
&& rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszCommentMultiStart, pidxMatch))
return true;
return false;
}
/**
* Checks whether the character is the beginning of a multi line comment, skipping the whole
* comment if necessary.
@ -291,12 +322,8 @@ DECLINLINE(bool) rtScriptLexIsNewlineConsume(PRTSCRIPTLEXINT pThis, char ch)
*/
DECLINLINE(bool) rtScriptLexIsMultiLineCommentConsume(PRTSCRIPTLEXINT pThis, char ch)
{
const char **papszCommentMultiStart = pThis->pCfg->papszCommentMultiStart;
unsigned idxComment = 0;
if ( papszCommentMultiStart
&& rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszCommentMultiStart,
&idxComment))
if (rtScriptLexIsMultiLineComment(pThis, ch, &idxComment))
{
/* Look for the matching closing lexeme in the input consuming everything along the way. */
const char *pszClosing = pThis->pCfg->papszCommentMultiEnd[idxComment];
@ -325,6 +352,27 @@ DECLINLINE(bool) rtScriptLexIsMultiLineCommentConsume(PRTSCRIPTLEXINT pThis, cha
}
/**
* Checks whether the character is the beginning of a single line comment.
*
* @returns Flag whether a comment was detected.
* @param hScriptLex The lexer state.
* @param ch The character to check for.
* @param pidxMatch Where to store the index of the matching substring if found,
* optional.
* @note This consumes the start of the single line comment.
*/
DECLINLINE(bool) rtScriptLexIsSingleLineComment(PRTSCRIPTLEXINT pThis, char ch, unsigned *pidxMatch)
{
const char **papszCommentSingleStart = pThis->pCfg->papszCommentSingleStart;
if ( papszCommentSingleStart
&& rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszCommentSingleStart, pidxMatch))
return true;
return false;
}
/**
* Checks whether the character is the beginning of a single line comment, skipping the whole
* comment if necessary.
@ -335,11 +383,7 @@ DECLINLINE(bool) rtScriptLexIsMultiLineCommentConsume(PRTSCRIPTLEXINT pThis, cha
*/
DECLINLINE(bool) rtScriptLexIsSingleLineCommentConsume(PRTSCRIPTLEXINT pThis, char ch)
{
const char **papszCommentSingleStart = pThis->pCfg->papszCommentSingleStart;
if ( papszCommentSingleStart
&& rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszCommentSingleStart,
NULL))
if (rtScriptLexIsSingleLineComment(pThis, ch, NULL))
{
for (;;)
{
@ -374,13 +418,14 @@ static int rtScriptLexFillBuffer(PRTSCRIPTLEXINT pThis)
AssertReturn(!(pThis->fFlags & RTSCRIPT_LEX_INT_F_EOS), VERR_INVALID_STATE);
/* If there is input left to process move it to the front and fill the remainder. */
if (pThis->pchCur != NULL)
if ( pThis->pchCur != NULL
&& pThis->pchCur != &pThis->achBuf[pThis->cchBuf])
{
cchToRead = pThis->pchCur - &pThis->achBuf[0];
/* Move the rest to the front. */
memmove(&pThis->achBuf[0], pThis->pchCur, pThis->cchBuf - cchToRead);
pchRead = (char *)pThis->pchCur + 1;
memset(pchRead, 0, cchToRead);
size_t const cchLeft = pThis->cchBuf - cchToRead;
memmove(&pThis->achBuf[0], pThis->pchCur, cchLeft);
pchRead = &pThis->achBuf[0] + cchLeft;
}
if (cchToRead)
@ -394,6 +439,8 @@ static int rtScriptLexFillBuffer(PRTSCRIPTLEXINT pThis)
pThis->offBufRead += cchRead;
if (rc == VINF_EOF)
pThis->fFlags |= RTSCRIPT_LEX_INT_F_EOS;
if (cchRead < cchToRead)
memset(pchRead + cchRead, 0, cchToRead - cchRead);
rc = VINF_SUCCESS;
}
else
@ -421,19 +468,11 @@ static void rtScriptLexProduceTokEos(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN pT
}
/**
* Produce an error token with the given error message.
*
* @returns IPRT status code.
* @param pThis The lexer state.
* @param pTok The token to fill.
* @param rc The status code to use in the message.
* @param pszMsg The format string for the error message.
* @param ... Arguments to the format string.
*/
static int rtScriptLexProduceTokError(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN pTok,
RTDECL(int) RTScriptLexProduceTokError(RTSCRIPTLEX hScriptLex, PRTSCRIPTLEXTOKEN pTok,
int rc, const char *pszMsg, ...)
{
PRTSCRIPTLEXINT pThis = hScriptLex;
va_list va;
va_start(va, pszMsg);
@ -449,6 +488,218 @@ static int rtScriptLexProduceTokError(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN p
}
RTDECL(int) RTScriptLexProduceTokIde(RTSCRIPTLEX hScriptLex, PRTSCRIPTLEXTOKEN pTok, const char *pszIde, size_t cchIde)
{
PRTSCRIPTLEXINT pThis = hScriptLex;
/* Insert into string cache. */
pTok->enmType = RTSCRIPTLEXTOKTYPE_IDENTIFIER;
pTok->Type.Id.pszIde = RTStrCacheEnterN(pThis->hStrCacheId, pszIde, cchIde);
if (RT_UNLIKELY(!pTok->Type.Id.pszIde))
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_NO_STR_MEMORY, "Lexer: Out of memory inserting identifier into string cache");
pTok->PosEnd = pThis->Pos;
return VINF_SUCCESS;
}
/**
* Creates a single line comment token.
*
* @returns Flag whether a matching rule was found.
* @param pThis The lexer state.
* @param idxComment The index into the single line comment token start array.
* @param pTok The token to fill.
*/
static void rtScriptLexProduceTokFromSingleLineComment(PRTSCRIPTLEXINT pThis, unsigned idxComment, PRTSCRIPTLEXTOKEN pTok)
{
const char *pszCommentSingleStart = pThis->pCfg->papszCommentSingleStart[idxComment];
AssertPtr(pszCommentSingleStart);
pTok->PosStart = pThis->Pos;
/** @todo Optimize */
size_t cchTmp = 512;
char *pszTmp = (char *)RTMemAlloc(cchTmp);
if (pszTmp)
{
size_t cchComment = 0;
while (*pszCommentSingleStart != '\0')
pszTmp[cchComment++] = *pszCommentSingleStart++;
for (;;)
{
char chTmp = RTScriptLexGetCh(pThis);
if ( chTmp == '\0'
|| rtScriptLexIsNewlineConsume(pThis, chTmp))
{
pszTmp[cchComment++] = '\0';
break;
}
if (cchComment == cchTmp - 1)
{
char *pszNew = (char *)RTMemRealloc(pszTmp, cchTmp + 512);
if (!pszNew)
{
RTMemFree(pszTmp);
pszTmp = NULL;
RTScriptLexProduceTokError(pThis, pTok, VERR_NO_STR_MEMORY, "Lexer: Out of memory allocating temporary memory for a single line comment");
break;
}
cchTmp += 512;
pszTmp = pszNew;
}
pszTmp[cchComment++] = chTmp;
RTScriptLexConsumeCh(pThis);
}
if (pszTmp)
{
pTok->enmType = RTSCRIPTLEXTOKTYPE_COMMENT_SINGLE_LINE;
pTok->PosEnd = pThis->Pos;
pTok->Type.Comment.pszComment = RTStrCacheEnterN(pThis->hStrCacheId, pszTmp, cchComment);
pTok->Type.Comment.cchComment = cchComment;
if (RT_UNLIKELY(!pTok->Type.Comment.pszComment))
RTScriptLexProduceTokError(pThis, pTok, VERR_NO_STR_MEMORY, "Lexer: Out of memory inserting comment into comment cache");
RTMemFree(pszTmp);
}
}
else
RTScriptLexProduceTokError(pThis, pTok, VERR_NO_MEMORY, "Lexer: Out of memory allocating temporary memory for a single line comment");
}
/**
* Ensures there is enough space in the given buffer for the given amount of bytes,
* extending the buffer or creating an error token if this fails.
*
* @returns Flag whether there is enough space in the buffer.
* @param pThis The lexer state.
* @param ppchTmp Pointer to the pointer for the character buffer being checked.
* On successful return this might contain a different pointer if
* re-allocation was required.
* @param pcchTmp On input the size of the buffer in characters, on return the new
* size of the buffer if re-allocation was required.
* @param cchCur How much of the current buffer is used.
* @param cchAdd How many additional characters are required.
* @param pTok The token to fill in if re-allocating the buffer failed.
*/
DECLINLINE(bool) rtScriptLexEnsureTmpBufSpace(PRTSCRIPTLEXINT pThis, char **ppchTmp, size_t *pcchTmp,
size_t cchCur, size_t cchAdd, PRTSCRIPTLEXTOKEN pTok)
{
if (RT_LIKELY(cchCur + cchAdd + 1 <= *pcchTmp)) /* Always keep room for the zero terminator. */
return true;
size_t cchNew = *pcchTmp + _1K;
char *pchNew = (char *)RTMemRealloc(*ppchTmp, cchNew);
if (!pchNew)
{
RTMemFree(*ppchTmp);
*ppchTmp = NULL;
RTScriptLexProduceTokError(pThis, pTok, VERR_NO_STR_MEMORY, "Lexer: Out of memory allocating temporary memory for a multi line comment");
return false;
}
*ppchTmp = pchNew;
*pcchTmp = cchNew;
return true;
}
/**
* Creates a multi line comment token.
*
* @returns Flag whether a matching rule was found.
* @param pThis The lexer state.
* @param idxComment The index into the single line comment token start array.
* @param pTok The token to fill.
*/
static void rtScriptLexProduceTokFromMultiLineComment(PRTSCRIPTLEXINT pThis, unsigned idxComment, PRTSCRIPTLEXTOKEN pTok)
{
const char *pszCommentMultiStart = pThis->pCfg->papszCommentMultiStart[idxComment];
AssertPtr(pszCommentMultiStart);
pTok->PosStart = pThis->Pos;
/** @todo Optimize */
size_t cchTmp = _1K;
char *pszTmp = (char *)RTMemAlloc(cchTmp);
if (pszTmp)
{
/* Look for the matching closing lexeme in the input consuming everything along the way. */
const char *pszClosing = pThis->pCfg->papszCommentMultiEnd[idxComment];
size_t cchComment = 0;
while (*pszCommentMultiStart != '\0')
pszTmp[cchComment++] = *pszCommentMultiStart++;
for (;;)
{
char chTmp = RTScriptLexGetCh(pThis);
/* Check for new lines explicetly to advance the position information and copy it over. */
unsigned idxNewLine = 0;
if (rtScriptLexIsNewlineConsumeEx(pThis, chTmp, &idxNewLine))
{
const char *pszNl = pThis->pCfg->papszNewline
? pThis->pCfg->papszNewline[idxNewLine]
: g_aszNlDef[idxNewLine];
if (!rtScriptLexEnsureTmpBufSpace(pThis, &pszTmp, &cchTmp, cchComment,
strlen(pszNl), pTok))
break;
while (*pszNl != '\0')
pszTmp[cchComment++] = *pszNl++;
continue;
}
/* Check for the closing lexeme. */
if (rtScriptLexMatchStrConsume(pThis, chTmp, pszClosing, NULL))
{
/* Copy over the closing comment lexeme. */
if (rtScriptLexEnsureTmpBufSpace(pThis, &pszTmp, &cchTmp, cchComment,
strlen(pszClosing), pTok))
{
while (*pszClosing != '\0')
pszTmp[cchComment++] = *pszClosing++;
pszTmp[cchComment++] = '\0';
}
break;
}
if (chTmp == '\0')
break; /* End of stream before closing lexeme. */
if (!rtScriptLexEnsureTmpBufSpace(pThis, &pszTmp, &cchTmp, cchComment,
strlen(pszClosing), pTok))
break;
pszTmp[cchComment++] = chTmp;
RTScriptLexConsumeCh(pThis);
}
if (pszTmp)
{
pTok->enmType = RTSCRIPTLEXTOKTYPE_COMMENT_MULTI_LINE;
pTok->PosEnd = pThis->Pos;
pTok->Type.Comment.pszComment = RTStrCacheEnterN(pThis->hStrCacheId, pszTmp, cchComment);
pTok->Type.Comment.cchComment = cchComment;
if (RT_UNLIKELY(!pTok->Type.Comment.pszComment))
RTScriptLexProduceTokError(pThis, pTok, VERR_NO_STR_MEMORY, "Lexer: Out of memory inserting comment into comment cache");
RTMemFree(pszTmp);
}
}
else
RTScriptLexProduceTokError(pThis, pTok, VERR_NO_MEMORY, "Lexer: Out of memory allocating temporary memory for a multi line comment");
}
/**
* Create the token from the exact match.
*
@ -475,7 +726,7 @@ static void rtScriptLexProduceTokFromExactMatch(PRTSCRIPTLEXINT pThis, PRTSCRIPT
pTok->Type.Punctuator.pPunctuator = pMatch;
break;
default:
rtScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER,
RTScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER,
"Lexer: The match contains an invalid token type: %d\n",
pTok->enmType);
}
@ -531,8 +782,15 @@ static int rtScriptLexProduceToken(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN pTok
char ch = RTScriptLexGetCh(pThis);
PCRTSCRIPTLEXTOKMATCH pMatch = NULL;
unsigned idxComment = 0;
if (ch == '\0')
rtScriptLexProduceTokEos(pThis, pTok);
else if ( (pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS)
&& rtScriptLexIsSingleLineComment(pThis, ch, &idxComment))
rtScriptLexProduceTokFromSingleLineComment(pThis, idxComment, pTok);
else if ( (pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS)
&& rtScriptLexIsMultiLineComment(pThis, ch, &idxComment))
rtScriptLexProduceTokFromMultiLineComment(pThis, idxComment, pTok);
else if (rtScriptLexLocateExactMatchConsume(pThis, ch, &pMatch))
rtScriptLexProduceTokFromExactMatch(pThis, pTok, pMatch);
else if (!rtScriptLexProduceTokFromRules(pThis, ch, pTok))
@ -540,7 +798,7 @@ static int rtScriptLexProduceToken(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN pTok
if (pThis->pCfg->pfnProdDef)
pThis->rcRdr = pThis->pCfg->pfnProdDef(pThis, ch, pTok, pThis->pCfg->pvProdDefUser);
else
rtScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER,
RTScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER,
"Lexer: Invalid character found in input: %c\n",
ch);
}
@ -573,12 +831,16 @@ static int rtScriptLexPopulate(PRTSCRIPTLEXINT pThis)
RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEXRDR pfnReader,
PFNRTSCRIPTLEXDTOR pfnDtor, void *pvUser,
size_t cchBuf, PRTSTRCACHE phStrCacheId, PRTSTRCACHE phStrCacheStringLit,
PCRTSCRIPTLEXCFG pCfg)
PRTSTRCACHE phStrCacheComments, PCRTSCRIPTLEXCFG pCfg)
{
AssertPtrReturn(phScriptLex, VERR_INVALID_POINTER);
AssertPtrReturn(pfnReader, VERR_INVALID_POINTER);
AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
/* Case insensitivity with internal lower or upper case conversion is mutually exclusive. */
AssertReturn( (pCfg->fFlags & (RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_LOWER | RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_UPPER))
!= (RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_LOWER | RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_UPPER), VERR_INVALID_PARAMETER);
if (!cchBuf)
cchBuf = _16K;
int rc = VINF_SUCCESS;
@ -602,6 +864,10 @@ RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEX
pThis->pchCur = NULL;
pThis->hStrCacheId = NULL;
pThis->hStrCacheStringLit = NULL;
pThis->hStrCacheComments = NULL;
if (pCfg->fFlags & RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS)
rc = RTStrCacheCreate(&pThis->hStrCacheComments, "LEX-Comments");
rc = RTStrCacheCreate(&pThis->hStrCacheId, "LEX-Ide");
if (RT_SUCCESS(rc))
@ -624,6 +890,14 @@ RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEX
else
pThis->fFlags |= RTSCRIPT_LEX_INT_F_STR_CACHE_STR_LIT_FREE;
if (pCfg->fFlags & RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS)
{
if (phStrCacheComments)
*phStrCacheComments = pThis->hStrCacheComments;
else
pThis->fFlags |= RTSCRIPT_LEX_INT_F_STR_CACHE_COMMENTS_FREE;
}
return VINF_SUCCESS;
}
@ -633,6 +907,8 @@ RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEX
RTStrCacheDestroy(pThis->hStrCacheId);
}
if (pThis->hStrCacheComments)
RTStrCacheDestroy(pThis->hStrCacheComments);
RTMemFree(pThis);
}
else
@ -667,10 +943,10 @@ static DECLCALLBACK(int) rtScriptLexReaderStr(RTSCRIPTLEX hScriptLex, size_t off
RTDECL(int) RTScriptLexCreateFromString(PRTSCRIPTLEX phScriptLex, const char *pszSrc, PRTSTRCACHE phStrCacheId,
PRTSTRCACHE phStrCacheStringLit, PCRTSCRIPTLEXCFG pCfg)
PRTSTRCACHE phStrCacheStringLit, PRTSTRCACHE phStrCacheComments, PCRTSCRIPTLEXCFG pCfg)
{
return RTScriptLexCreateFromReader(phScriptLex, rtScriptLexReaderStr, NULL, (void *)pszSrc, 0,
phStrCacheId, phStrCacheStringLit, pCfg);
phStrCacheId, phStrCacheStringLit, phStrCacheComments, pCfg);
}
@ -700,14 +976,14 @@ static DECLCALLBACK(void) rtScriptLexDtorFile(RTSCRIPTLEX hScriptLex, void *pvUs
RTDECL(int) RTScriptLexCreateFromFile(PRTSCRIPTLEX phScriptLex, const char *pszFilename, PRTSTRCACHE phStrCacheId,
PRTSTRCACHE phStrCacheStringLit, PCRTSCRIPTLEXCFG pCfg)
PRTSTRCACHE phStrCacheStringLit, PRTSTRCACHE phStrCacheComments, PCRTSCRIPTLEXCFG pCfg)
{
RTFILE hFile;
int rc = RTFileOpen(&hFile, pszFilename, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN);
if (RT_SUCCESS(rc))
{
rc = RTScriptLexCreateFromReader(phScriptLex, rtScriptLexReaderFile, rtScriptLexDtorFile, (void *)hFile, 0,
phStrCacheId, phStrCacheStringLit, pCfg);
phStrCacheId, phStrCacheStringLit, phStrCacheComments, pCfg);
if (RT_FAILURE(rc))
RTFileClose(hFile);
}
@ -728,6 +1004,8 @@ RTDECL(void) RTScriptLexDestroy(RTSCRIPTLEX hScriptLex)
RTStrCacheDestroy(pThis->hStrCacheId);
if (pThis->fFlags & RTSCRIPT_LEX_INT_F_STR_CACHE_STR_LIT_FREE)
RTStrCacheDestroy(pThis->hStrCacheStringLit);
if (pThis->fFlags & RTSCRIPT_LEX_INT_F_STR_CACHE_COMMENTS_FREE)
RTStrCacheDestroy(pThis->hStrCacheComments);
if (pThis->pszStrLit)
RTStrFree(pThis->pszStrLit);
@ -832,6 +1110,10 @@ RTDECL(char) RTScriptLexPeekChEx(RTSCRIPTLEX hScriptLex, unsigned idx, uint32_t
PRTSCRIPTLEXINT pThis = hScriptLex;
AssertPtrReturn(pThis, '\0');
/* Try to fill up the input buffer if peeking would overflow it. */
if (pThis->pchCur + idx >= &pThis->achBuf[pThis->cchBuf])
rtScriptLexFillBuffer(pThis);
/* Just return the character if it is in the current buffer. */
char ch = '\0';
if (RT_LIKELY(pThis->pchCur + idx < &pThis->achBuf[pThis->cchBuf]))
@ -843,9 +1125,13 @@ RTDECL(char) RTScriptLexPeekChEx(RTSCRIPTLEX hScriptLex, unsigned idx, uint32_t
AssertReleaseFailed();
}
if ( (pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE)
&& !(fFlags & RTSCRIPT_LEX_CONV_F_NOTHING))
if (!(fFlags & RTSCRIPT_LEX_CONV_F_NOTHING))
{
if (pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_LOWER)
ch = RT_C_TO_LOWER(ch);
else if (pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_UPPER)
ch = RT_C_TO_UPPER(ch);
}
return ch;
}
@ -879,9 +1165,12 @@ RTDECL(void) RTScriptLexSkipWhitespace(RTSCRIPTLEX hScriptLex)
const char *pszWs = pThis->pCfg->pszWhitespace ? pThis->pCfg->pszWhitespace : g_szWsDef;
if ( rtScriptLexLocateChInStrConsume(pThis, ch, pszWs)
|| rtScriptLexIsNewlineConsume(pThis, ch)
|| rtScriptLexIsMultiLineCommentConsume(pThis, ch)
|| rtScriptLexIsSingleLineCommentConsume(pThis, ch))
|| rtScriptLexIsNewlineConsume(pThis, ch))
continue;
if ( !(pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS)
&& ( rtScriptLexIsMultiLineCommentConsume(pThis, ch)
|| rtScriptLexIsSingleLineCommentConsume(pThis, ch)))
continue;
/* All white space skipped, next is some real content. */
@ -913,7 +1202,7 @@ RTDECL(int) RTScriptLexScanNumber(RTSCRIPTLEX hScriptLex, uint8_t uBase, bool fA
{
/* Some hex prefix? */
char chNext = RTScriptLexPeekCh(hScriptLex, 1);
if (chNext == 'x')
if (chNext == 'x' || chNext == 'X')
{
uBase = 16;
RTScriptLexConsumeCh(hScriptLex);
@ -928,7 +1217,9 @@ RTDECL(int) RTScriptLexScanNumber(RTSCRIPTLEX hScriptLex, uint8_t uBase, bool fA
for (;;)
{
if ( (ch < '0' || ch > '9')
&& (ch < 'a' || ch > 'f' || uBase == 10))
&& ( ( !(ch >= 'a' && ch <= 'f')
&& !(ch >= 'A' && ch <= 'F'))
|| uBase == 10))
{
if (pTok->Type.Number.enmType == RTSCRIPTLEXTOKNUMTYPE_INTEGER)
pTok->Type.Number.Type.i64 = -(int64_t)u64;
@ -946,6 +1237,11 @@ RTDECL(int) RTScriptLexScanNumber(RTSCRIPTLEX hScriptLex, uint8_t uBase, bool fA
Assert(uBase == 16);
u64 = (u64 << 4) + 10 + (ch - 'a');
}
else if (ch >= 'A' && ch <= 'F')
{
Assert(uBase == 16);
u64 = (u64 << 4) + 10 + (ch - 'A');
}
ch = RTScriptLexConsumeCh(hScriptLex);
}
@ -973,13 +1269,13 @@ RTDECL(int) RTScriptLexScanIdentifier(RTSCRIPTLEX hScriptLex, char ch,
if ( idx == sizeof(aszIde) - 1
&& rtScriptLexLocateChInStrConsume(hScriptLex, ch, pszCharSet))
return rtScriptLexProduceTokError(hScriptLex, pTok, VERR_BUFFER_OVERFLOW, "Lexer: Identifier exceeds the allowed length");
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_BUFFER_OVERFLOW, "Lexer: Identifier exceeds the allowed length");
/* Insert into string cache. */
pTok->enmType = RTSCRIPTLEXTOKTYPE_IDENTIFIER;
pTok->Type.Id.pszIde = RTStrCacheEnterN(pThis->hStrCacheId, &aszIde[0], idx);
if (RT_UNLIKELY(!pTok->Type.Id.pszIde))
return rtScriptLexProduceTokError(hScriptLex, pTok, VERR_NO_STR_MEMORY, "Lexer: Out of memory inserting identifier into string cache");
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_NO_STR_MEMORY, "Lexer: Out of memory inserting identifier into string cache");
pTok->PosEnd = pThis->Pos;
return VINF_SUCCESS;
@ -1004,7 +1300,7 @@ static int rtScriptLexScanStringLiteralChAdd(PRTSCRIPTLEXINT pThis, char ch, uin
{
/* Increase memory. */
size_t cchMaxNew = pThis->cchStrLitMax + 64;
char *pszNew = NULL;
char *pszNew = pThis->pszStrLit;
rc = RTStrRealloc(&pszNew, cchMaxNew * sizeof(char));
if (RT_SUCCESS(rc))
{
@ -1033,29 +1329,31 @@ RTDECL(int) RTScriptLexScanStringLiteralC(RTSCRIPTLEX hScriptLex, char ch,
uint32_t idxChCur = 0;
int rc = rtScriptLexScanStringLiteralChAdd(pThis, '\0', idxChCur);
if (RT_FAILURE(rc))
return rtScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
return RTScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
ch = RTScriptLexGetCh(hScriptLex);
ch = RTScriptLexGetChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
for (;;)
{
if (ch == '\0')
return rtScriptLexProduceTokError(hScriptLex, pTok, VERR_EOF, "Lexer: End of stream before closing string literal terminal");
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_EOF, "Lexer: End of stream before closing string literal terminal");
else if (ch == '\"')
{
RTScriptLexConsumeCh(hScriptLex);
/* End of string, add it to the string literal cache and build the token. */
pTok->enmType = RTSCRIPTLEXTOKTYPE_STRINGLIT;
pTok->Type.StringLit.cchString = idxChCur;
pTok->Type.StringLit.pszString = RTStrCacheEnterN(pThis->hStrCacheStringLit, pThis->pszStrLit, idxChCur);
if (RT_UNLIKELY(!pTok->Type.StringLit.pszString))
return rtScriptLexProduceTokError(hScriptLex, pTok, VERR_NO_STR_MEMORY, "Lexer: Error adding string literal to the cache");
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_NO_STR_MEMORY, "Lexer: Error adding string literal to the cache");
else
break;
}
else if (ch == '\\')
{
/* Start of escape sequence. */
RTScriptLexConsumeCh(hScriptLex);
ch = RTScriptLexGetCh(hScriptLex);
RTScriptLexConsumeChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
ch = RTScriptLexGetChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
switch (ch)
{
case 'a': /* Alert (Bell) */
@ -1103,7 +1401,7 @@ RTDECL(int) RTScriptLexScanStringLiteralC(RTSCRIPTLEX hScriptLex, char ch,
case 'U': /* Unicode point */
default:
/* Not supported for now. */
return rtScriptLexProduceTokError(hScriptLex, pTok, VERR_NOT_SUPPORTED, "Lexer: Invalid/unsupported escape sequence");
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_NOT_SUPPORTED, "Lexer: Invalid/unsupported escape sequence");
}
}
@ -1111,7 +1409,7 @@ RTDECL(int) RTScriptLexScanStringLiteralC(RTSCRIPTLEX hScriptLex, char ch,
if (RT_SUCCESS(rc))
idxChCur++;
else
return rtScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
return RTScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
ch = RTScriptLexConsumeChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
}
@ -1131,13 +1429,13 @@ RTDECL(int) RTScriptLexScanStringLiteralPascal(RTSCRIPTLEX hScriptLex, char ch,
uint32_t idxChCur = 0;
int rc = rtScriptLexScanStringLiteralChAdd(pThis, '\0', idxChCur);
if (RT_FAILURE(rc))
return rtScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
return RTScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
ch = RTScriptLexGetChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
for (;;)
{
if (ch == '\0')
return rtScriptLexProduceTokError(hScriptLex, pTok, VERR_EOF, "Lexer: End of stream before closing string literal terminal");
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_EOF, "Lexer: End of stream before closing string literal terminal");
else if (ch == '\'')
{
/*
@ -1152,7 +1450,7 @@ RTDECL(int) RTScriptLexScanStringLiteralPascal(RTSCRIPTLEX hScriptLex, char ch,
pTok->Type.StringLit.cchString = idxChCur;
pTok->Type.StringLit.pszString = RTStrCacheEnterN(pThis->hStrCacheStringLit, pThis->pszStrLit, idxChCur);
if (RT_UNLIKELY(!pTok->Type.StringLit.pszString))
return rtScriptLexProduceTokError(hScriptLex, pTok, VERR_NO_STR_MEMORY, "Lexer: Error adding string literal to the cache");
return RTScriptLexProduceTokError(hScriptLex, pTok, VERR_NO_STR_MEMORY, "Lexer: Error adding string literal to the cache");
else
break;
}
@ -1163,7 +1461,7 @@ RTDECL(int) RTScriptLexScanStringLiteralPascal(RTSCRIPTLEX hScriptLex, char ch,
if (RT_SUCCESS(rc))
idxChCur++;
else
return rtScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
return RTScriptLexProduceTokError(hScriptLex, pTok, rc, "Lexer: Error adding character to string literal");
ch = RTScriptLexConsumeChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
}

View file

@ -62,6 +62,18 @@
# define PAGE_READONLY_EXEC PAGE_READONLY
#endif
#if RTLNX_VER_MIN(2,6,0)
# ifdef __GFP_REPEAT
# define MY_GFP_REPEAT __GFP_REPEAT
# elif defined (__GFP_RETRY_MAYFAIL) /* Renamed in commit dcda9b04713c3f6ff0875652924844fae28286ea . */
# define MY_GFP_REPEAT __GFP_RETRY_MAYFAIL
# else /* This is to notice when the flags are renamed/moved around again. */
# error "Was this flag renamed again?"
# endif
# else
# define MY_GFP_REPEAT 0
#endif
/** @def IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
* Whether we use alloc_vm_area (3.2+) for executable memory.
* This is a must for 5.8+, but we enable it all the way back to 3.2.x for
@ -411,10 +423,8 @@ static int rtR0MemObjLinuxAllocPages(PRTR0MEMOBJLNX *ppMemLnx, RTR0MEMOBJTYPE en
if (cPages > 255)
{
# ifdef __GFP_REPEAT
/* Try hard to allocate the memory, but the allocation attempt might fail. */
fFlagsLnx |= __GFP_REPEAT;
# endif
fFlagsLnx |= MY_GFP_REPEAT;
# ifdef __GFP_NOMEMALLOC
/* Introduced with Linux 2.6.12: Don't use emergency reserves */
fFlagsLnx |= __GFP_NOMEMALLOC;
@ -989,13 +999,13 @@ DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb,
/* Try to avoid GFP_DMA. GFM_DMA32 was introduced with Linux 2.6.15. */
#if (defined(RT_ARCH_AMD64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32)
/* ZONE_DMA32: 0-4GB */
rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_DMA32,
rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_KERNEL | GFP_DMA32,
false /* non-contiguous */, fExecutable, VERR_NO_LOW_MEMORY, pszTag);
if (RT_FAILURE(rc))
#endif
#ifdef RT_ARCH_AMD64
/* ZONE_DMA: 0-16MB */
rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_DMA,
rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_LOW, cb, PAGE_SIZE, GFP_KERNEL | GFP_DMA,
false /* non-contiguous */, fExecutable, VERR_NO_LOW_MEMORY, pszTag);
#else
# ifdef CONFIG_X86_PAE

View file

@ -422,7 +422,11 @@ static void rtTimerLnxStopSubTimer(PRTTIMERLNXSUBTIMER pSubTimer, bool fHighRes)
}
else
#endif
# if RTLNX_VER_MIN(6,15,0)
timer_delete(&pSubTimer->u.Std.LnxTimer);
#else
del_timer(&pSubTimer->u.Std.LnxTimer);
#endif
rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED);
}
@ -470,7 +474,11 @@ static void rtTimerLnxDestroyIt(PRTTIMER pTimer)
hrtimer_cancel(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer);
else
#endif
# if RTLNX_VER_MIN(6,15,0)
timer_delete_sync(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
#else
del_timer_sync(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
#endif
}
/*
@ -1626,8 +1634,13 @@ RTDECL(int) RTTimerCreateEx(PRTTIMER *ppTimer, uint64_t u64NanoInterval, uint32_
#ifdef RTTIMER_LINUX_WITH_HRTIMER
if (pTimer->fHighRes)
{
#if RTLNX_VER_MIN(6,15,0)
hrtimer_setup(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer,
rtTimerLinuxHrCallback, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
#else
hrtimer_init(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
pTimer->aSubTimers[iCpu].u.Hr.LnxTimer.function = rtTimerLinuxHrCallback;
#endif
}
else
#endif

View file

@ -97,7 +97,7 @@ DECLHIDDEN(int) rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle, ui
}
const char *pszDlError = dlerror();
RTErrInfoSet(pErrInfo, VERR_FILE_NOT_FOUND, pszDlError);
RTErrInfoSet(pErrInfo, VERR_FILE_NOT_FOUND, RT_VALID_PTR(pszDlError) ? pszDlError : "unknown dlopen error");
LogRel(("rtldrNativeLoad: dlopen('%s', RTLD_NOW | RTLD_LOCAL) failed: %s\n", pszFilename, pszDlError));
return VERR_FILE_NOT_FOUND;
}

View file

@ -152,6 +152,7 @@
OPENSSL_sk_pop_free
OPENSSL_sk_value
PEM_read_bio_DHparams
PEM_read_bio_Parameters
RAND_load_file
RAND_seed
RAND_status
@ -166,6 +167,7 @@
SSL_CTX_get_cert_store
;exported above: SSL_CTX_load_verify_locations
;exported above: SSL_CTX_new
SSL_CTX_set0_tmp_dh_pkey
SSL_CTX_set_client_CA_list
SSL_CTX_set_default_passwd_cb
SSL_CTX_set_default_passwd_cb_userdata

View file

@ -1871,7 +1871,7 @@ static void xmlParserBaseGenericError(void *pCtx, const char *pszMsg, ...) RT_NO
va_end(args);
}
#if LIBXML_VERSION >= 21206
#if LIBXML_VERSION >= 21205
static void xmlStructuredErrorFunc(void *userData, const xmlError *error) RT_NOTHROW_DEF
{
NOREF(userData);
@ -1893,7 +1893,7 @@ XmlParserBase::XmlParserBase()
throw std::bad_alloc();
/* per-thread so it must be here */
xmlSetGenericErrorFunc(NULL, xmlParserBaseGenericError);
#if LIBXML_VERSION >= 21206
#if LIBXML_VERSION >= 21205
xmlSetStructuredErrorFunc(NULL, xmlStructuredErrorFunc);
#else
xmlSetStructuredErrorFunc(NULL, xmlParserBaseStructuredError);

View file

@ -75,6 +75,16 @@ static DECLCALLBACK(int) vmmR3ReservedVTableEntry(void)
}
#ifndef VBOX_WITH_DEBUGGER
/** Stub */
DBGDECL(int) DBGCCreate(PUVM pUVM, PCDBGCIO pIo, unsigned fFlags)
{
RT_NOREF(pUVM, pIo, fFlags);
return VERR_NOT_IMPLEMENTED;
}
#endif
VMMR3DECL(PCVMMR3VTABLE) VMMR3GetVTable(void)
{
return &g_VMMR3VTable;

View file

@ -0,0 +1,7 @@
<?xml version = '1.0' encoding = 'UTF-8'?>
<BusinessInfoDesign class="oracle.dbtools.crest.model.businessinfo.BusinessInfoDesign" name="Business Information" id="AC352001-3FCC-F844-94E1-59B2CC5ECF63">
<createdBy>bird</createdBy>
<createdTime>2012-08-20 21:58:45 UTC</createdTime>
<ownerDesignName>TestManagerDatabase</ownerDesignName>
<shouldBeOpen>false</shouldBeOpen>
</BusinessInfoDesign>

View file

@ -0,0 +1,7 @@
<?xml version = '1.0' encoding = 'UTF-8'?>
<ProcessModel class="oracle.dbtools.crest.model.design.process.ProcessModel" name="Process Model" id="B8A699A3-D4EE-EEEE-EA69-30AAE2347CF5">
<createdBy>bird</createdBy>
<createdTime>2012-08-20 21:58:45 UTC</createdTime>
<ownerDesignName>TestManagerDatabase</ownerDesignName>
<shouldBeOpen>false</shouldBeOpen>
</ProcessModel>

View file

@ -109,7 +109,7 @@ if !defined(VBOX_ONLY_SDK) \
&& (!defined(VBOX_ONLY_ADDITIONS) || !defined(VBOX_ONLY_ADDITIONS_WITHOUT_RTISOMAKER)) \
&& (!defined(VBOX_ONLY_EXTPACKS) || defined(VBOX_NEED_EXTPACK_OPENSSL) || defined(VBOX_WITH_BLD_RTSIGNTOOL_SIGNING) || !defined(VBOX_ONLY_EXTPACKS_USE_IMPLIBS)) \
&& ("$(SDK_VBoxOpenSslStatic_INCS)" == "$(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)" || defined(VBOX_NEED_EXTPACK_OPENSSL))
include $(PATH_SUB_CURRENT)/openssl-3.3.2/Makefile.kmk
include $(PATH_SUB_CURRENT)/openssl-3.4.1/Makefile.kmk
endif
@ -133,8 +133,8 @@ endif
# liblzma is used by the IPRT compression code and the iPXE ROM tool.
if defined(VBOX_WITH_LIBLZMA) \
&& !defined(VBOX_ONLY_SDK) \
&& "$(SDK_VBoxLibLzma_INCS)" == "$(PATH_ROOT)/src/libs/liblzma-5.4.1/api"
include $(PATH_SUB_CURRENT)/liblzma-5.4.1/Makefile.kmk
&& "$(SDK_VBoxLibLzma_INCS)" == "$(PATH_ROOT)/src/libs/liblzma-5.8.1/api"
include $(PATH_SUB_CURRENT)/liblzma-5.8.1/Makefile.kmk
endif

View file

@ -229,26 +229,19 @@ endif
#
# Template for building XPCOM executables for running at build time.
#
# It extends the BLDPROG template in config.kmk but overrides CFLAGS
# and CXXFLAGS completely at the moment.
#
TEMPLATE_XPComBldProg = XPCOM Build programs executables
TEMPLATE_XPComBldProg_EXTENDS = VBoxAdvBldProg
TEMPLATE_XPComBldProg_DEFS.$(KBUILD_HOST) = $(TEMPLATE_VBoxAdvBldProg_DEFS.$(KBUILD_HOST)) $(TEMPLATE_XPComExe_DEFS.$(KBUILD_HOST))
TEMPLATE_XPComBldProg_DEFS.x86 = $(TEMPLATE_VBoxAdvBldProg_DEFS.x86) $(TEMPLATE_XPComExe_DEFS.x86)
TEMPLATE_XPComBldProg_DEFS.amd64 = $(TEMPLATE_VBoxAdvBldProg_DEFS.amd64) $(TEMPLATE_XPComExe_DEFS.amd64)
TEMPLATE_XPComBldProg_DEFS.arm64 = $(TEMPLATE_VBoxAdvBldProg_DEFS.arm64) $(TEMPLATE_XPComExe_DEFS.arm64)
TEMPLATE_XPComBldProg_CFLAGS += -std=c99
TEMPLATE_XPComBldProg_INCS = \
$(VBOX_PATH_SDK)/bindings/xpcom/include \
$(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
$(VBOX_PATH_SDK)/bindings/xpcom/include/string \
$(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
$(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd
TEMPLATE_XPComBldProg_CFLAGS = $(filter-out $(VBOX_GCC_PEDANTIC_C), $(TEMPLATE_VBoxAdvBldProg_CFLAGS)) \
$(VBOX_GCC_Wno-int-to-pointer-cast) $(VBOX_GCC_Wno-pointer-to-int-cast) $(VBOX_GCC_NON_PEDANTIC_C)
TEMPLATE_XPComBldProg_CXXFLAGS.darwin = $(TEMPLATE_VBoxAdvBldProg_CXXFLAGS.darwin) -fpascal-strings -fshort-wchar -fno-common -fno-rtti
TEMPLATE_XPComBldProg_CXXFLAGS.solaris = $(TEMPLATE_VBoxAdvBldProg_CXXFLAGS.solaris) -fno-omit-frame-pointer # for now anyway.
TEMPLATE_XPComBldProg_LDFLAGS.darwin = $(TEMPLATE_VBoxAdvBldProg_LDFLAGS.darwin) -fpascal-strings -fshort-wchar -fno-rtti -fno-exceptions
TEMPLATE_XPComBldProg_ORDERDEPS = $(foreach hdrinst, $(filter %-HEADERS, $(INSTALLS)), $($(hdrinst)_1_TARGET))
TEMPLATE_XPComBldProg_LIBS.darwin = \
iconv

View file

@ -304,53 +304,17 @@ xpidl_TEMPLATE = XPComBldProg
xpidl_DEFS = EXPORT_XPT_API
## @todo This assumes HOST == TARGET.
xpidl_INST = $(INST_BIN)
## Obsolete hack: MacPorts is 32-bit on 10.5 and 64-bit on 10.6. Set your KBUILD_HOST_ARCH env.vars. accordingly.
#if "$(KBUILD_HOST).$(KBUILD_HOST_ARCH)" == "darwin.amd64" && defined(VBOX_MACOS_10_5_WORKAROUND)
# xpidl_BLD_TRG_ARCH = x86
# ## @todo kBuild ticket 84 workarounds:
# xpidl_DEFS.x86 = $(TEMPLATE_XPComBldProg_DEFS.x86)
# xpidl_CFLAGS.x86 = $(TEMPLATE_XPComBldProg_CFLAGS.x86)
# xpidl_CXXFLAGS.x86 = $(TEMPLATE_XPComBldProg_CXXFLAGS.x86)
# xpidl_LDFLAGS.x86 = $(TEMPLATE_XPComBldProg_LDFLAGS.x86)
#endif
ifdef VBOX_WITH_JAVA_SUPPORT_IN_XPIDL
xpidl_DEFS += VBOX_XPIDL_EMULATE_GENJIFACES VBOX_XPIDL_EMULATE_GENJIFACES_DIFF
endif
xpidl_SOURCES = \
xpcom/typelib/xpidl/xpidl.c \
xpcom/typelib/xpidl/xpidl_idl.c \
xpcom/typelib/xpidl/xpidl_util.c \
xpcom/typelib/xpidl/xpidl_header.c \
xpcom/typelib/xpidl/xpidl_typelib.c \
xpcom/typelib/xpidl/xpidl_doc.c \
xpcom/typelib/xpidl/xpidl_java.c \
xpcom/typelib/xpt/src/xpt_arena.c \
xpcom/typelib/xpt/src/xpt_struct.c \
xpcom/typelib/xpt/src/xpt_xdr.c
xpcom/typelib/xpt/src/xpt_xdr.c \
../../VBox/Runtime/common/script/scriptlex.cpp
# We do these ONCE.
libIDL_config_cflags := $(shell $(VBOX_LIBIDL_CONFIG) --cflags)
libIDL_config_libs := $(shell $(VBOX_LIBIDL_CONFIG) --libs)
xpidl_CFLAGS = \
$(libIDL_config_cflags)
if1of ($(KBUILD_HOST), linux solaris)
xpidl_LDFLAGS = \
$(filter-out -l%,$(libIDL_config_libs))
xpidl_LIBS.$(KBUILD_HOST) += \
$(subst -l,,$(filter -l%,$(libIDL_config_libs)))
else
ifeq ($(KBUILD_HOST),darwin)
# Need to put the SDK /usr/lib before the libIDL path to make it pick the system iconv
xpidl_LDFLAGS = \
-L$(VBOX_PATH_MACOSX_SDK)/usr/lib \
$(libIDL_config_libs)
else
xpidl_LDFLAGS = \
$(libIDL_config_libs)
endif
endif
xpidl_LDFLAGS.linux = \
$(VBOX_LD_as_needed)
#
# The XPT linker.

View file

@ -91,11 +91,7 @@ INSTALLS += VBoxJXpcom-inst-jar
VBOX_JXPCOM_JAR = $(VBoxJXpcom-inst-jar_0_OUTDIR)/vboxjxpcom.jar
VBOX_JXPCOM_NSERROR = $(VBOX_JXPCOM_GEN)/java/XPCOMError.java
ifndef VBOX_WITH_JAVA_SUPPORT_IN_XPIDL
VBOX_JXPCOM_GEN = $(VBOX_JXPCOM_TARGET)/jxpcomgen
else
VBOX_JXPCOM_GEN = $(VBOX_JXPCOM_TARGET)/jxpcomgen-idl
endif
VBoxJXpcom-inst-jar_INST = $(INST_SDK)bindings/xpcom/java/
VBoxJXpcom-inst-jar_MODE = a+r,u+w
@ -138,11 +134,9 @@ $(VBOX_JXPCOM_NSERROR): $(VBOX_PATH_XPCOM_SRC)/xpcom/base/nsError.h $(VBOX_JXPCO
$(call MSG_L1,Generating $@)
$(QUIET)perl $(VBOX_JXPCOM_SRC)/tools/gen-nsError.pl < $< > $@
ifndef VBOX_WITH_JAVA_SUPPORT_IN_XPIDL
#
# Generate .java interface files from .xidl
#
$(VBOX_JXPCOM_GEN)/jxpcomgen.list: \
$(VBOX_XIDL_FILE) \
$(VBOX_FILESPLIT) \
@ -155,24 +149,6 @@ ifndef VBOX_WITH_JAVA_SUPPORT_IN_XPIDL
$(QUIET)$(VBOX_FILESPLIT) $(VBOX_JXPCOM_GEN)/java/interfaces/merged.file $(VBOX_JXPCOM_GEN)/java/interfaces
$(QUIET)echo $(VBOX_JXPCOM_GEN)/java/interfaces/*.java > $@
else # VBOX_WITH_JAVA_SUPPORT_IN_XPIDL
#
# Generate .java interface files from the XPCOM and VirtualBox IDL files.
#
# Note! There is not a 1:1 relationship between input and output files here, unfortunately.
# Note! VBOX_JXPCOM_NSERROR shares the output directory with us.
#
$(VBOX_JXPCOM_GEN)/jxpcomgen.list: \
$(VBOX_PATH_SDK)/bindings/xpcom/idl/VirtualBox_XPCOM.idl \
$$(addprefix $(VBOX_PATH_XPCOM_SRC)/,$$(XPCOM_IDLFILES)) \
$(VBOX_XPIDL) \
| $(VBOX_JXPCOM_GEN)/java/
$(call MSG_L1,Generating XPCOM Java interface files from IDL)
$(QUIET)$(RM) -f $(filter-out %/XPCOMError.java, $(wildcard $(VBOX_JXPCOM_GEN)/java/*.java))
$(foreach idl, $(VBOX_PATH_SDK)/bindings/xpcom/idl/VirtualBox_XPCOM.idl $(addprefix $(VBOX_PATH_XPCOM_SRC)/,$(XPCOM_IDLFILES))\
, $(NLTAB)$(QUIET)$(VBOX_XPIDL) -m java $(XPIDL_INCS) -e $(VBOX_JXPCOM_GEN)/java/$(basename $(notdir $(idl))).java $(idl) )
$(QUIET)echo $(VBOX_JXPCOM_GEN)/java/*.java > $@
endif # VBOX_WITH_JAVA_SUPPORT_IN_XPIDL
$(VBOX_JXPCOM_GEN)/jxpcomglue.list: \
$(VBOX_XIDL_FILE) \

View file

@ -100,22 +100,22 @@ interface nsIClassInfo : nsISupports
/**
* Bitflags for 'flags' attribute.
*/
const PRUint32 SINGLETON = 1 << 0;
const PRUint32 THREADSAFE = 1 << 1;
const PRUint32 MAIN_THREAD_ONLY = 1 << 2;
const PRUint32 DOM_OBJECT = 1 << 3;
const PRUint32 PLUGIN_OBJECT = 1 << 4;
const PRUint32 EAGER_CLASSINFO = 1 << 5;
const PRUint32 SINGLETON = 0x01;
const PRUint32 THREADSAFE = 0x02;
const PRUint32 MAIN_THREAD_ONLY = 0x04;
const PRUint32 DOM_OBJECT = 0x08;
const PRUint32 PLUGIN_OBJECT = 0x10;
const PRUint32 EAGER_CLASSINFO = 0x20;
/**
* 'flags' attribute bitflag: whether objects of this type implement
* nsIContent.
*/
const PRUint32 CONTENT_NODE = 1 << 6;
const PRUint32 CONTENT_NODE = 0x40;
// The high order bit is RESERVED for consumers of these flags.
// No implementor of this interface should ever return flags
// with this bit set.
const PRUint32 RESERVED = 1 << 31;
const PRUint32 RESERVED = 0x80000000;
readonly attribute PRUint32 flags;

View file

@ -108,4 +108,4 @@ interface nsIComponentManager : nsISupports
#include "nsComponentManagerUtils.h"
#include "nsComponentManagerObsolete.h"
#endif
%} C++
%}

View file

@ -347,5 +347,5 @@ interface nsIComponentManagerObsolete : nsISupports
%{ C++
/* include after the class def'n, because it needs to see it. */
#include "nsComponentManagerUtils.h"
%} C++
%}

View file

@ -131,7 +131,7 @@ PRBool nsDll::Load(void)
#ifdef NS_BUILD_REFCNT_LOGGING
nsTraceRefcntImpl::SetActivityIsLegal(PR_FALSE);
#endif
#ifndef VBOX /* This is related to DEPENDENT_LIBS, which we've disabled. */
// Load any library dependencies
// The Component Loader Manager may hold onto some extra data
// set by either the native component loader or the native
@ -145,6 +145,7 @@ PRBool nsDll::Load(void)
if (!manager)
return PR_TRUE;
nsXPIDLCString extraData;
manager->GetOptionalData(m_dllSpec, nsnull, getter_Copies(extraData));
@ -220,12 +221,14 @@ PRBool nsDll::Load(void)
}
nsMemory::Free(buffer);
}
#endif /* !VBOX */
// load the component
nsCOMPtr<nsILocalFile> lf(do_QueryInterface(m_dllSpec));
NS_ASSERTION(lf, "nsIFile here must implement a nsILocalFile");
lf->Load(&m_hMod);
#ifndef VBOX /* This is related to DEPENDENT_LIBS, which we've disabled. */
// Unload any of library dependencies we loaded earlier. The assumption
// here is that the component will have a "internal" reference count to
// the dependency library we just loaded.
@ -236,6 +239,7 @@ PRBool nsDll::Load(void)
for (PRInt32 index = 0; index < arrayCount; index++)
RTLdrClose((RTLDRMOD)dependentLibArray.ElementAt(index));
}
#endif /* !VBOX */
#ifdef NS_BUILD_REFCNT_LOGGING
nsTraceRefcntImpl::SetActivityIsLegal(PR_TRUE);

View file

@ -1,16 +0,0 @@
Wed Dec 2 14:35:41 EST 1998
xpidl depends on Andrew Veliath and Elliot Lee's libIDL, a part of the
GNOME ORBit C ORB. We currently require libIDL >= 0.6.3, which in turn
requires glib >= 1.2.0.
libIDL builds for Linux and Win32 can be found, along with source
tarballs, at http://www.rpi.edu/~veliaa/libIDL/, and Win32 users will
need glib 1.2 and glib 1.2-dev from
http://user.sgic.fi/~tml/gimp/win32/. Source and Linux RPMs are also
available from ftp://ftp.mozilla.org/pub/mozilla/libraries, and Win32
binaries are included in the wintools.zip file at
ftp://ftp.mozilla.org/pub/mozilla/source/wintools.zip. A Mac project
is in progress, and should be appearing shortly.
glib tarballs and RPMs for Linux can be found through http://www.gtk.org.

View file

@ -45,8 +45,6 @@
static ModeData modes[] = {
{"header", "Generate C++ header", "h", xpidl_header_dispatch},
{"typelib", "Generate XPConnect typelib", "xpt", xpidl_typelib_dispatch},
{"doc", "Generate HTML documentation", "html", xpidl_doc_dispatch},
{"java", "Generate Java interface", "java", xpidl_java_dispatch},
{0, 0, 0, 0}
};
@ -61,11 +59,11 @@ FindMode(char *mode)
return NULL;
}
gboolean enable_debug = FALSE;
gboolean enable_warnings = FALSE;
gboolean verbose_mode = FALSE;
gboolean emit_typelib_annotations = FALSE;
gboolean explicit_output_filename = FALSE;
bool enable_debug = false;
bool enable_warnings = false;
bool verbose_mode = false;
bool emit_typelib_annotations = false;
bool explicit_output_filename = false;
/* The following globals are explained in xpt_struct.h */
PRUint8 major_version = XPT_MAJOR_VERSION;
@ -86,9 +84,9 @@ static char xpidl_usage_str[] =
static void
xpidl_usage(int argc, char *argv[])
{
int i;
RT_NOREF(argc);
fprintf(stderr, xpidl_usage_str, argv[0]);
for (i = 0; modes[i].mode; i++) {
for (int i = 0; modes[i].mode; i++) {
fprintf(stderr, " %-12s %-30s (.%s)\n", modes[i].mode,
modes[i].modeInfo, modes[i].suffix);
}
@ -99,18 +97,15 @@ int main(int argc, char *argv[])
RTR3InitExeNoArguments(0);
int i;
IncludePathEntry *inc, *inc_head, **inc_tail;
RTLISTANCHOR LstIncludePaths;
char *file_basename = NULL;
ModeData *mode = NULL;
gboolean create_old_typelib = FALSE;
/* turn this on for extra checking of our code */
/* IDL_check_cast_enable(TRUE); */
RTListInit(&LstIncludePaths);
inc_head = xpidl_malloc(sizeof *inc);
inc_head->directory = ".";
inc_head->next = NULL;
inc_tail = &inc_head->next;
PXPIDLINCLUDEDIR pInc = (PXPIDLINCLUDEDIR)xpidl_malloc(sizeof(*pInc));
pInc->pszPath = ".";
RTListAppend(&LstIncludePaths, &pInc->NdIncludes);
for (i = 1; i < argc; i++) {
if (argv[i][0] != '-')
@ -122,13 +117,13 @@ int main(int argc, char *argv[])
case 0: /* - is a legal input filename (stdin) */
goto done_options;
case 'a':
emit_typelib_annotations = TRUE;
emit_typelib_annotations = true;
break;
case 'w':
enable_warnings = TRUE;
enable_warnings = true;
break;
case 'v':
verbose_mode = TRUE;
verbose_mode = true;
break;
case 't':
{
@ -146,15 +141,6 @@ int main(int argc, char *argv[])
return 1;
}
/* Do not allow more than one "-t" definition */
if (create_old_typelib) {
fprintf(stderr,
"ERROR: -t argument used twice. "
"Cannot specify more than one version\n");
xpidl_usage(argc, argv);
return 1;
}
/*
* Assume that the argument after "-t" is the version number string
* and search for it in our internal list of acceptable version
@ -165,8 +151,6 @@ int main(int argc, char *argv[])
case XPT_VERSION_CURRENT:
break;
case XPT_VERSION_OLD:
create_old_typelib = TRUE;
break;
case XPT_VERSION_UNSUPPORTED:
fprintf(stderr, "ERROR: version \"%s\" not supported.\n",
argv[i]);
@ -187,20 +171,16 @@ int main(int argc, char *argv[])
xpidl_usage(argc, argv);
return 1;
}
inc = xpidl_malloc(sizeof *inc);
pInc = (PXPIDLINCLUDEDIR)xpidl_malloc(sizeof(*pInc));
if (argv[i][2] == '\0') {
/* is it the -I foo form? */
inc->directory = argv[++i];
pInc->pszPath = argv[++i];
} else {
/* must be the -Ifoo form. Don't preincrement i. */
inc->directory = argv[i] + 2;
pInc->pszPath = argv[i] + 2;
}
#ifdef DEBUG_shaver_includes
fprintf(stderr, "adding %s to include path\n", inc->directory);
#endif
inc->next = NULL;
*inc_tail = inc;
inc_tail = &inc->next;
RTListAppend(&LstIncludePaths, &pInc->NdIncludes);
break;
case 'o':
if (i == argc) {
@ -209,7 +189,7 @@ int main(int argc, char *argv[])
return 1;
}
file_basename = argv[++i];
explicit_output_filename = FALSE;
explicit_output_filename = false;
break;
case 'e':
if (i == argc) {
@ -218,7 +198,7 @@ int main(int argc, char *argv[])
return 1;
}
file_basename = argv[++i];
explicit_output_filename = TRUE;
explicit_output_filename = true;
break;
case 'm':
if (i + 1 == argc) {
@ -261,8 +241,12 @@ int main(int argc, char *argv[])
* Don't try to process multiple files, given that we don't handle -o
* multiply.
*/
if (xpidl_process_idl(argv[i], inc_head, file_basename, mode))
int rc = xpidl_process_idl(argv[i], &LstIncludePaths, file_basename, mode);
if (RT_SUCCESS(rc))
return 0;
/** @todo Free include paths. */
printf("Failed to process IDL file\n");
return 1;
}

View file

@ -42,100 +42,278 @@
#ifndef __xpidl_h
#define __xpidl_h
#include <iprt/errcore.h>
#include <iprt/list.h>
#include <iprt/script.h>
#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
#include <string.h> /* After glib.h to avoid warnings about shadowing 'index'. */
#ifndef XP_MAC
#include <libIDL/IDL.h>
#else
#include <IDL.h>
#endif
#include <string.h>
#include <xpt_struct.h>
#define XPIDL_WARNING(x) IDL_tree_warning x
/**
* An include path.
*/
typedef struct XPIDLINCLUDEDIR
{
/** Node for the list of include paths. */
RTLISTNODE NdIncludes;
/** The zero terminated include path. */
const char *pszPath;
} XPIDLINCLUDEDIR;
/** Pointer to an include path. */
typedef XPIDLINCLUDEDIR *PXPIDLINCLUDEDIR;
/** Pointer to a const include path. */
typedef const XPIDLINCLUDEDIR *PCXPIDLINCLUDEDIR;
/**
* The input stream.
*/
typedef struct XPIDLINPUT
{
/** Node for the list of inputs. */
RTLISTNODE NdInput;
/** Node for the list of include. */
RTLISTNODE NdInclude;
/** The list of includes this input generated. */
RTLISTANCHOR LstIncludes;
/** The basename for this input. */
char *pszBasename;
/** The filename for this input. */
char *pszFilename;
/** The lexer instance for this input. */
RTSCRIPTLEX hIdlLex;
} XPIDLINPUT;
/** Pointer to an input stream. */
typedef XPIDLINPUT *PXPIDLINPUT;
/** Pointer to a const input stream. */
typedef const XPIDLINPUT *PCXPIDLINPUT;
/**
* IDL node type.
*/
typedef enum XPIDLNDTYPE
{
kXpidlNdType_Invalid = 0,
kXpidlNdType_RawBlock,
kXpidlNdType_Typedef,
kXpidlNdType_BaseType,
kXpidlNdType_Identifier,
kXpidlNdType_Native,
kXpidlNdType_Interface_Forward_Decl,
kXpidlNdType_Interface_Def,
kXpidlNdType_Attribute,
kXpidlNdType_Method,
kXpidlNdType_Parameter,
kXpidlNdType_Const
} XPIDLNDTYPE;
/**
* IDL base type.
*/
typedef enum XPIDLTYPE
{
kXpidlType_Invalid = 0,
kXpidlType_Void,
kXpidlType_Boolean,
kXpidlType_Octet,
kXpidlType_Char,
kXpidlType_Wide_Char,
kXpidlType_Short,
kXpidlType_Long,
kXpidlType_Long_Long,
kXpidlType_Unsigned_Short,
kXpidlType_Unsigned_Long,
kXpidlType_Unsigned_Long_Long,
kXpidlType_String,
kXpidlType_Wide_String,
kXpidlType_Double,
kXpidlType_Float,
} XPIDLTYPE;
/**
* IDL direction.
*/
typedef enum XPIDLDIRECTION
{
kXpidlDirection_Invalid = 0,
kXpidlDirection_In,
kXpidlDirection_InOut,
kXpidlDirection_Out
} XPIDLDIRECTION;
/**
* A node attribute.
*/
typedef struct XPIDLATTR
{
/** The attribute name. */
const char *pszName;
/** The value assigned if any. */
const char *pszVal;
} XPIDLATTR;
/** Pointer to an attribute. */
typedef XPIDLATTR *PXPIDLATTR;
/** Pointer to a const attribute. */
typedef const XPIDLATTR *PCXPIDLATTR;
/** Pointer to an IDL node. */
typedef struct XPIDLNODE *PXPIDLNODE;
/** Pointer to a const IDL node. */
typedef const struct XPIDLNODE *PCXPIDLNODE;
/**
* IDL node.
*/
typedef struct XPIDLNODE
{
/** Node for the list this node is in. */
RTLISTNODE NdLst;
/** The parent node (if any). */
PCXPIDLNODE pParent;
/** The input stream this node was generated from (via #include's). */
PCXPIDLINPUT pInput;
/** The type this node references (for identifiers and the inheritance for interfaces only). */
PCXPIDLNODE pNdTypeRef;
/** The node type. */
XPIDLNDTYPE enmType;
/** Node type dependent data. */
union
{
struct
{
const char *pszRaw;
size_t cchRaw;
} RawBlock;
struct
{
PCXPIDLNODE pNodeTypeSpec;
const char *pszName;
} Typedef;
XPIDLTYPE enmBaseType;
const char *pszIde;
struct
{
const char *pszName;
const char *pszNative;
} Native;
const char *pszIfFwdName;
struct
{
const char *pszIfName;
const char *pszIfInherit;
RTLISTANCHOR LstBody;
} If;
struct
{
bool fReadonly;
PCXPIDLNODE pNdTypeSpec;
const char *pszName;
} Attribute;
struct
{
PCXPIDLNODE pNdTypeSpecRet;
const char *pszName;
RTLISTANCHOR LstParams;
} Method;
struct
{
PCXPIDLNODE pNdTypeSpec;
const char *pszName;
XPIDLDIRECTION enmDir;
} Param;
struct
{
PCXPIDLNODE pNdTypeSpec;
const char *pszName;
uint64_t u64Const; /* Only allowing numbers for now. */
} Const;
} u;
/** Number of entries in the attribute array. */
uint32_t cAttrs;
/** Node attributes array - variable in size. */
XPIDLATTR aAttrs[1];
} XPIDLNODE;
/**
* The IDL parsing state.
*/
typedef struct XPIDLPARSE
{
/** List of input files. */
RTLISTANCHOR LstInputs;
/** The list of XPIDL nodes from the root. */
RTLISTANCHOR LstNodes;
/** Extended error info. */
RTERRINFOSTATIC ErrInfo;
/** Current attributes parsed. */
XPIDLATTR aAttrs[32];
/** Number of entries in the attribute array. */
uint32_t cAttrs;
} XPIDLPARSE;
/** Pointer to an IDL parsing state. */
typedef XPIDLPARSE *PXPIDLPARSE;
/** Pointer to a const IDL parsing state. */
typedef const XPIDLPARSE *PCXPIDLPARSE;
/*
* Internal operation flags.
*/
extern gboolean enable_debug;
extern gboolean enable_warnings;
extern gboolean verbose_mode;
extern gboolean emit_typelib_annotations;
extern gboolean explicit_output_filename;
extern bool enable_debug;
extern bool enable_warnings;
extern bool verbose_mode;
extern bool emit_typelib_annotations;
extern bool explicit_output_filename;
extern PRUint8 major_version;
extern PRUint8 minor_version;
typedef struct TreeState TreeState;
/*
* A function to handle an IDL_tree type.
/**
* Dispatch callback.
*
* @returns IPRT status code.
* @param pFile The file to output to.
* @param pInput The original input file to generate for.
* @param pParse The parsing state.
* @param pErrInfo Error information.
*/
typedef gboolean (*nodeHandler)(TreeState *);
typedef DECLCALLBACKTYPE(int, FNXPIDLDISPATCH,(FILE *pFile, PCXPIDLINPUT pInput, PCXPIDLPARSE pParse, PRTERRINFO pErrInfo));
/** Pointer to a dispatch callback. */
typedef FNXPIDLDISPATCH *PFNXPIDLDISPATCH;
/*
* Struct containing functions to define the behavior of a given output mode.
*/
typedef struct backend {
nodeHandler *dispatch_table; /* nodeHandlers table, indexed by node type. */
nodeHandler emit_prolog; /* called at beginning of output generation. */
nodeHandler emit_epilog; /* called at end. */
} backend;
/* Function that produces a struct of output-generation functions */
typedef backend *(*backendFactory)();
extern backend *xpidl_header_dispatch(void);
extern backend *xpidl_typelib_dispatch(void);
extern backend *xpidl_doc_dispatch(void);
extern backend *xpidl_java_dispatch(void);
DECL_HIDDEN_CALLBACK(int) xpidl_header_dispatch(FILE *pFile, PCXPIDLINPUT pInput, PCXPIDLPARSE pParse, PRTERRINFO pErrInfo);
DECL_HIDDEN_CALLBACK(int) xpidl_typelib_dispatch(FILE *pFile, PCXPIDLINPUT pInput, PCXPIDLPARSE pParse, PRTERRINFO pErrInfo);
typedef struct ModeData {
char *mode;
char *modeInfo;
char *suffix;
backendFactory factory;
PFNXPIDLDISPATCH dispatch;
} ModeData;
typedef struct IncludePathEntry {
char *directory;
struct IncludePathEntry *next;
} IncludePathEntry;
struct TreeState {
FILE *file;
/* Maybe supplied by -o. Not related to (g_)basename from string.h or glib */
char *basename;
IDL_ns ns;
IDL_tree tree;
GSList *base_includes;
nodeHandler *dispatch;
void *priv; /* mode-private data */
#ifdef VBOX_XPIDL_EMULATE_GENJIFACES
char *real_outname;
#endif
};
/*
* Process an IDL file, generating InterfaceInfo, documentation and headers as
* appropriate.
*/
int
xpidl_process_idl(char *filename, IncludePathEntry *include_path,
xpidl_process_idl(char *filename, PRTLISTANCHOR pLstIncludePaths,
char *file_basename, ModeData *mode);
/*
* Iterate over an IDLN_LIST -- why is this not part of libIDL?
*/
void
xpidl_list_foreach(IDL_tree p, IDL_tree_func foreach, gpointer user_data);
/*
* Wrapper whines to stderr then exits after null return from malloc or strdup.
*/
@ -152,20 +330,6 @@ xpidl_strdup(const char *s);
char *
xpidl_basename(const char * path);
/*
* Process an XPIDL node and its kids, if any.
*/
gboolean
xpidl_process_node(TreeState *state);
/*
* Write a newline folllowed by an indented, one-line comment containing IDL
* source decompiled from state->tree.
*/
void
xpidl_write_comment(TreeState *state, int indent);
/*
* Functions for parsing and printing UUIDs.
@ -180,81 +344,86 @@ xpidl_write_comment(TreeState *state, int indent);
* Print an iid to into a supplied buffer; the buffer should be at least
* UUID_LENGTH bytes.
*/
gboolean
bool
xpidl_sprint_iid(nsID *iid, char iidbuf[]);
/*
* Parse a uuid string into an nsID struct. We cannot link against libxpcom,
* so we re-implement nsID::Parse here.
*/
gboolean
bool
xpidl_parse_iid(nsID *id, const char *str);
DECLHIDDEN(PCXPIDLATTR) xpidlNodeAttrFind(PCXPIDLNODE pNd, const char *pszAttr);
DECLHIDDEN(int) xpidlIdlError(PRTERRINFO pErrInfo, PCXPIDLNODE pNd, int rc, const char *pszFmt, ...);
/* Try to common a little node-handling stuff. */
/* is this node from an aggregate type (interface)? */
#define UP_IS_AGGREGATE(node) \
(IDL_NODE_UP(node) && \
(IDL_NODE_TYPE(IDL_NODE_UP(node)) == IDLN_INTERFACE || \
IDL_NODE_TYPE(IDL_NODE_UP(node)) == IDLN_FORWARD_DCL))
#define UP_IS_NATIVE(node) \
(IDL_NODE_UP(node) && \
IDL_NODE_TYPE(IDL_NODE_UP(node)) == IDLN_NATIVE)
DECLINLINE(bool) xpidlNdIsStringType(PCXPIDLNODE pNd)
{
return pNd->enmType == kXpidlNdType_BaseType
&& ( pNd->u.enmBaseType == kXpidlType_String
|| pNd->u.enmBaseType == kXpidlType_Wide_String);
}
/* is this node from an aggregate type (interface)? */
#define UP_IS_AGGREGATE(a_pNd) \
( a_pNd->pNdTypeRef \
&& ( a_pNd->pNdTypeRef->enmType == kXpidlNdType_Interface_Forward_Decl \
|| a_pNd->pNdTypeRef->enmType == kXpidlNdType_Interface_Def))
#define UP_IS_NATIVE(a_pNd) \
( a_pNd->pNdTypeRef \
&& a_pNd->pNdTypeRef->enmType == kXpidlNdType_Native)
/* is this type output in the form "<foo> *"? */
#define STARRED_TYPE(node) (IDL_NODE_TYPE(node) == IDLN_TYPE_STRING || \
IDL_NODE_TYPE(node) == IDLN_TYPE_WIDE_STRING || \
(IDL_NODE_TYPE(node) == IDLN_IDENT && \
UP_IS_AGGREGATE(node)))
#define STARRED_TYPE(a_pNd) (xpidlNdIsStringType(a_pNd) || \
(a_pNd->enmType == kXpidlNdType_Identifier && \
UP_IS_AGGREGATE(a_pNd)))
#define DIPPER_TYPE(a_pNd) \
(xpidlNodeAttrFind(a_pNd, "domstring") != NULL || \
xpidlNodeAttrFind(a_pNd, "utf8string") != NULL || \
xpidlNodeAttrFind(a_pNd, "cstring") != NULL || \
xpidlNodeAttrFind(a_pNd, "astring") != NULL)
#define DIPPER_TYPE(node) \
(NULL != IDL_tree_property_get(node, "domstring") || \
NULL != IDL_tree_property_get(node, "utf8string") || \
NULL != IDL_tree_property_get(node, "cstring") || \
NULL != IDL_tree_property_get(node, "astring"))
/*
* Find the underlying type of an identifier typedef. Returns NULL
* (and doesn't complain) on failure.
*/
IDL_tree /* IDL_TYPE_DCL */
find_underlying_type(IDL_tree typedef_ident);
DECLHIDDEN(PCXPIDLNODE) find_underlying_type(PCXPIDLNODE pNd);
/*
* Verifies the interface declaration
*/
DECLHIDDEN(int) verify_interface_declaration(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
/*
* Check that const declarations match their stated sign and are of the
* appropriate types.
*/
gboolean
verify_const_declaration(IDL_tree const_tree);
DECLHIDDEN(int) verify_const_declaration(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
/*
* Check that scriptable attributes in scriptable interfaces actually are.
*/
gboolean
verify_attribute_declaration(IDL_tree method_tree);
DECLHIDDEN(int) verify_attribute_declaration(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
/*
* Perform various validation checks on methods.
*/
gboolean
verify_method_declaration(IDL_tree method_tree);
/*
* Verifies the interface declaration
*/
gboolean
verify_interface_declaration(IDL_tree method_tree);
DECLHIDDEN(int) verify_method_declaration(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
/*
* Verify that a native declaration has an associated C++ expression, i.e. that
* it's of the form native <idl-name>(<c++-name>)
*/
gboolean
check_native(TreeState *state);
void
printlist(FILE *outfile, GSList *slist);
DECLHIDDEN(int) check_native(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
#endif /* __xpidl_h */

View file

@ -1,312 +0,0 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "xpidl.h"
/*
* Generates documentation from javadoc-style comments in XPIDL files.
*/
static gboolean
doc_prolog(TreeState *state)
{
fprintf(state->file, "<html>\n");
fprintf(state->file, "<head>\n");
fprintf(state->file,
"<!-- this file is generated from %s.idl -->\n",
state->basename);
fprintf(state->file, "<title>documentation for %s.idl interfaces</title>\n",
state->basename);
fprintf(state->file, "</head>\n\n");
fprintf(state->file, "<body>\n");
return TRUE;
}
static gboolean
doc_epilog(TreeState *state)
{
fprintf(state->file, "</body>\n");
fprintf(state->file, "</html>\n");
return TRUE;
}
static gboolean
doc_list(TreeState *state)
{
IDL_tree iter;
for (iter = state->tree; iter; iter = IDL_LIST(iter).next) {
state->tree = IDL_LIST(iter).data;
if (!xpidl_process_node(state))
return FALSE;
}
return TRUE;
}
static gboolean
print_list(FILE *outfile, IDL_tree list)
{
if (list == NULL)
return TRUE;
fprintf(outfile, "<ul>\n");
while (list != NULL) {
fprintf(outfile, " <li>%s\n",
IDL_IDENT(IDL_LIST(list).data).str);
list = IDL_LIST(list).next;
}
fprintf(outfile, "</ul>\n");
return TRUE;
}
static gboolean
doc_interface(TreeState *state)
{
IDL_tree iface = state->tree;
IDL_tree iter;
IDL_tree orig;
char *classname = IDL_IDENT(IDL_INTERFACE(iface).ident).str;
GSList *doc_comments = IDL_IDENT(IDL_INTERFACE(iface).ident).comments;
fprintf(state->file, "interface %s<br>\n", classname);
/* Much more could happen at this step. */
/*
* If parsing doc comments, you might need to take some care with line
* endings, as the xpidl frontend will return comments containing of /r,
* /n, /r/n depending on the platform. It's best to leave out platform
* #defines and just treat them all as equivalent.
*/
if (doc_comments != NULL) {
fprintf(state->file, "doc comments:<br>\n");
fprintf(state->file, "<pre>\n");
printlist(state->file, doc_comments);
fprintf(state->file, "</pre>\n");
fprintf(state->file, "<br>\n");
}
/* inherits from */
/*
* Note that we accept multiple inheritance here (for e.g. gnome idl)
* even though the header backend (specific to mozilla idl) rejects it.
*/
if ((iter = IDL_INTERFACE(iface).inheritance_spec)) {
fprintf(state->file, "%s inherits from:<br>\n", classname);
print_list(state->file, iter);
fprintf(state->file, "<br>\n");
}
/*
* Call xpidl_process_node to recur through list of declarations in
* interface body; another option would be to explicitly iterate through
* the list. xpidl_process_node currently requires twiddling the state to
* get the right node; I'll fix that soon to just take the node. Makes it
* easier to follow what's going on, I think...
*/
orig = state->tree;
state->tree = IDL_INTERFACE(iface).body;
if (state->tree && !xpidl_process_node(state))
return FALSE;
state->tree = orig;
return TRUE;
}
/*
* Copied from xpidl_header.c. You'll probably want to change it; if you can
* use it verbatim or abstract it, we could move it to xpidl_util.c and share
* it from there.
*/
static gboolean
write_type(IDL_tree type_tree, FILE *outfile)
{
if (!type_tree) {
fputs("void", outfile);
return TRUE;
}
switch (IDL_NODE_TYPE(type_tree)) {
case IDLN_TYPE_INTEGER: {
gboolean sign = IDL_TYPE_INTEGER(type_tree).f_signed;
switch (IDL_TYPE_INTEGER(type_tree).f_type) {
case IDL_INTEGER_TYPE_SHORT:
fputs(sign ? "PRInt16" : "PRUint16", outfile);
break;
case IDL_INTEGER_TYPE_LONG:
fputs(sign ? "PRInt32" : "PRUint32", outfile);
break;
case IDL_INTEGER_TYPE_LONGLONG:
fputs(sign ? "PRInt64" : "PRUint64", outfile);
break;
default:
g_error("Unknown integer type %d\n",
IDL_TYPE_INTEGER(type_tree).f_type);
return FALSE;
}
break;
}
case IDLN_TYPE_CHAR:
fputs("char", outfile);
break;
case IDLN_TYPE_WIDE_CHAR:
fputs("PRUnichar", outfile); /* wchar_t? */
break;
case IDLN_TYPE_WIDE_STRING:
fputs("PRUnichar *", outfile);
break;
case IDLN_TYPE_STRING:
fputs("char *", outfile);
break;
case IDLN_TYPE_BOOLEAN:
fputs("PRBool", outfile);
break;
case IDLN_TYPE_OCTET:
fputs("PRUint8", outfile);
break;
case IDLN_TYPE_FLOAT:
switch (IDL_TYPE_FLOAT(type_tree).f_type) {
case IDL_FLOAT_TYPE_FLOAT:
fputs("float", outfile);
break;
case IDL_FLOAT_TYPE_DOUBLE:
fputs("double", outfile);
break;
/* XXX 'long double' just ignored, or what? */
default:
fprintf(outfile, "unknown_type_%d", IDL_NODE_TYPE(type_tree));
break;
}
break;
case IDLN_IDENT:
if (UP_IS_NATIVE(type_tree)) {
fputs(IDL_NATIVE(IDL_NODE_UP(type_tree)).user_type, outfile);
if (IDL_tree_property_get(type_tree, "ptr")) {
fputs(" *", outfile);
} else if (IDL_tree_property_get(type_tree, "ref")) {
fputs(" &", outfile);
}
} else {
fputs(IDL_IDENT(type_tree).str, outfile);
}
if (UP_IS_AGGREGATE(type_tree))
fputs(" *", outfile);
break;
default:
fprintf(outfile, "unknown_type_%d", IDL_NODE_TYPE(type_tree));
break;
}
return TRUE;
}
/* handle ATTR_DCL (attribute declaration) nodes */
static gboolean
doc_attribute_declaration(TreeState *state)
{
IDL_tree attr = state->tree;
if (!verify_attribute_declaration(attr))
return FALSE;
/*
* Attribute idents can also take doc comments. They're ignored here;
* should they be?
*/
if (IDL_ATTR_DCL(attr).f_readonly)
fprintf(state->file, "readonly ");
fprintf(state->file, "attribute ");
if (!write_type(IDL_ATTR_DCL(attr).param_type_spec, state->file))
return FALSE;
fprintf(state->file, "\n");
print_list(state->file, IDL_ATTR_DCL(attr).simple_declarations);
fprintf(state->file, "<br>\n");
return TRUE;
}
/* handle OP_DCL (method declaration) nodes */
static gboolean
doc_method_declaration(TreeState *state)
{
/*
* Doc comment for attributes also applies here.
*/
/*
* Look at 'write_method_signature' in xpidl_header.c for an example of how
* to navigate parse trees for methods. For here, I just print the method
* name.
*/
fprintf(state->file,
"method %s<br>\n",
IDL_IDENT(IDL_OP_DCL(state->tree).ident).str);
return TRUE;
}
backend *
xpidl_doc_dispatch(void)
{
static backend result;
static nodeHandler table[IDLN_LAST];
static gboolean initialized = FALSE;
result.emit_prolog = doc_prolog;
result.emit_epilog = doc_epilog;
if (!initialized) {
/* Initialize non-NULL elements */
/* I just handle a few... many still to be filled in! */
table[IDLN_LIST] = doc_list;
table[IDLN_INTERFACE] = doc_interface;
table[IDLN_ATTR_DCL] = doc_attribute_declaration;
table[IDLN_OP_DCL] = doc_method_declaration;
initialized = TRUE;
}
result.dispatch_table = table;
return &result;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more