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 # Enable Java<->JAX-WS bridge
VBOX_WITH_JWS ?= 1 VBOX_WITH_JWS ?= 1
endif 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, # Build against multiple Python versions present in the system (only up to 3.2,
# unless VBOX_WITH_ONLY_PYTHON_LIMITED_API is overridden). # unless VBOX_WITH_ONLY_PYTHON_LIMITED_API is overridden).
VBOX_WITH_MULTIVERSION_PYTHON ?= 1 VBOX_WITH_MULTIVERSION_PYTHON ?= 1
@ -2649,7 +2647,7 @@ else
endif endif
# Makeself for the linux installers. # 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. # Microsoft HTML Help Workshop.
VBOX_PATH_HTML_HELP_WORKSHOP ?= $(KBUILD_DEVTOOLS)/win.x86/HTML_Help_Workshop/v1.3/ 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/xpcom \
$(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \ $(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
$(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd $(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 endif
# The X11 LIBPATH. (The amd64 hack is for RHEL4.) # The X11 LIBPATH. (The amd64 hack is for RHEL4.)
@ -4230,9 +4219,11 @@ ifdef VBOX_SIGNING_MODE
VBOX_CCS_CLIENT_JAR := $(firstword $(rsort \ VBOX_CCS_CLIENT_JAR := $(firstword $(rsort \
$(wildcard $(KBUILD_DEVTOOLS)/common/ccs/v*/Client.jar)) \ $(wildcard $(KBUILD_DEVTOOLS)/common/ccs/v*/Client.jar)) \
$(KBUILD_DEVTOOLS)/common/ccs/notfound/Client.jar ) $(KBUILD_DEVTOOLS)/common/ccs/notfound/Client.jar )
VBOX_CCS_USER ?= virtualbox_grp VBOX_CCS_USER ?= virtualbox_grp
VBOX_CCS_GLOBAL_UID ?= non-of-your-business 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. # Corp Code Signing command line.
# @param $1 Signing method: solaris_elf, solaris_pkg, driver (microsoft), ... # @param $1 Signing method: solaris_elf, solaris_pkg, driver (microsoft), ...
@ -4241,7 +4232,7 @@ ifdef VBOX_SIGNING_MODE
# @param $4 Additional options. # @param $4 Additional options.
VBOX_CCS_SIGN_CMD = $(VBOX_RETRY) $(VBOX_JAVA) -Xmx256m -jar "$(VBOX_CCS_CLIENT_JAR)" \ 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)" \ 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 -sign_method "$1" -file_to_sign "$2" -signed_location "$(if $3,$3,$(call VBOX_DIRX,$2))" $4
ifeq ($(KBUILD_HOST),win) 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). # @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)" \ 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)" \ 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))" -file_to_notarize "$1" -bundle_id "$2" -download_location "$(if $3,$3,$(call VBOX_DIRX,$1))"
## Sign an application bundle, framework or kernel extension. ## Sign an application bundle, framework or kernel extension.
@ -5162,7 +5153,7 @@ endif
# openssl # openssl
SDK_VBoxOpenSslStatic := OpenSSL - Only for VBoxRT and/or statically linked programs. 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_INCS ?= $(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)
SDK_VBoxOpenSslStatic_ORDERDEPS ?= $(crypto-headers_1_TARGET) SDK_VBoxOpenSslStatic_ORDERDEPS ?= $(crypto-headers_1_TARGET)
if !defined(VBOX_ONLY_SDK) \ if !defined(VBOX_ONLY_SDK) \
@ -5176,7 +5167,7 @@ SDK_VBoxOpenSslStatic_LIBS ?= \
$(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB) $(PATH_STAGE_LIB)/VBox-libcrypto$(VBOX_SUFF_LIB)
SDK_VBoxOpenSslStatic-x86 := OpenSSL/x86 - Only for VBoxRT and/or statically linked programs. 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_INCS ?= $(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)
SDK_VBoxOpenSslStatic-x86_ORDERDEPS ?= $(crypto-headers_1_TARGET) SDK_VBoxOpenSslStatic-x86_ORDERDEPS ?= $(crypto-headers_1_TARGET)
if ("$(SDK_VBoxOpenSslStatic_INCS)" == "$(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)") if ("$(SDK_VBoxOpenSslStatic_INCS)" == "$(SDK_VBoxOpenSslStatic_VBOX_DEFAULT_INCS)")
@ -5280,7 +5271,7 @@ endif
ifdef VBOX_WITH_LIBLZMA ifdef VBOX_WITH_LIBLZMA
SDK_VBoxLibLzma := liblzma for dll linking. 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_INCS ?= $(SDK_VBoxLibLzma_DEFAULT_INCS)
SDK_VBoxLibLzma_LIBS ?= $(PATH_STAGE_LIB)/VBox-liblzma$(VBOX_SUFF_LIB) SDK_VBoxLibLzma_LIBS ?= $(PATH_STAGE_LIB)/VBox-liblzma$(VBOX_SUFF_LIB)
@ -9287,7 +9278,7 @@ endif
SVN ?= svn$(HOSTSUFF_EXE) SVN ?= svn$(HOSTSUFF_EXE)
VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk
ifndef VBOX_SVN_REV 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_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)) 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)),) 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 # 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 # new build. The define is available in every source file. Only even build numbers
# will be published, odd numbers are set during development. # 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. # This can be overridden in LocalConfig.kmk or elsewhere.
# For the convention, see checks near the end of Config.kmk. # For the convention, see checks near the end of Config.kmk.
VBOX_BUILD_PUBLISHER = VBOX_BUILD_PUBLISHER =
@ -45,4 +45,4 @@ VBOX_VERSION_PRERELEASE =
VBOX_RELEASE_EXACT_MATCH = VBOX_RELEASE_EXACT_MATCH =
# Fallback revision when there is no other source. See Config.kmk. # 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_PYTHON=1
WITH_JAVA=1 WITH_JAVA=1
WITH_VMMRAW=1 WITH_VMMRAW=1
WITH_LIBIDL=1
WITH_QT6=1 WITH_QT6=1
WITH_SDL=1 WITH_SDL=1
WITH_SDL_TTF=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 # Check for libdevmapper, needed by the VBoxVolInfo
# #
@ -2632,7 +2601,6 @@ elif [ "$OS" = "haiku" ]; then
WITH_PULSE=0 WITH_PULSE=0
WITH_DBUS=0 WITH_DBUS=0
WITH_KMODS=0 WITH_KMODS=0
WITH_LIBIDL=0
WITH_XPCOM=0 WITH_XPCOM=0
BUILD_LIBXSLT=1 BUILD_LIBXSLT=1
BUILD_LIBXML2=1 BUILD_LIBXML2=1
@ -3024,7 +2992,6 @@ fi
if [ $ONLY_ADDITIONS -eq 0 ]; then if [ $ONLY_ADDITIONS -eq 0 ]; then
[ "$OS" != "darwin" ] && check_pthread [ "$OS" != "darwin" ] && check_pthread
check_libxml2 check_libxml2
[ $WITH_LIBIDL -eq 1 ] && check_libidl
check_z check_z
check_lzf check_lzf
check_ssl 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. <!-- 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. --> 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> <sect1>
<title>Version 7.1.8 (2025-04-15)</title> <title>Version 7.1.8 (2025-04-15)</title>

View file

@ -833,14 +833,21 @@ public:
if (!ensureCapacity(size() + 1)) if (!ensureCapacity(size() + 1))
return false; return false;
for (size_t i = size(); i > 0; --i)
{
#ifdef VBOX_WITH_XPCOM #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]); SafeArray::Copy(m.arr[i - 1], m.arr[i]);
#else #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]); SafeArray::Copy(m.raw[i - 1], m.raw[i]);
#endif #endif
}
#ifdef VBOX_WITH_XPCOM #ifdef VBOX_WITH_XPCOM
SafeArray::Copy(aElement, m.arr[0]); SafeArray::Copy(aElement, m.arr[0]);

View file

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

View file

@ -97,6 +97,10 @@ typedef enum RTSCRIPTLEXTOKTYPE
RTSCRIPTLEXTOKTYPE_KEYWORD, RTSCRIPTLEXTOKTYPE_KEYWORD,
/** Some punctuator. */ /** Some punctuator. */
RTSCRIPTLEXTOKTYPE_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. */ /** Special error token, conveying an error message from the lexer. */
RTSCRIPTLEXTOKTYPE_ERROR, RTSCRIPTLEXTOKTYPE_ERROR,
/** End of stream token. */ /** End of stream token. */
@ -211,6 +215,14 @@ typedef struct RTSCRIPTLEXTOKEN
/** Pointer to the matched punctuator descriptor. */ /** Pointer to the matched punctuator descriptor. */
PCRTSCRIPTLEXTOKMATCH pPunctuator; PCRTSCRIPTLEXTOKMATCH pPunctuator;
} Punctuator; } 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. */ /** Error. */
struct struct
{ {
@ -308,10 +320,15 @@ typedef RTSCRIPTLEXCFG *PRTSCRIPTLEXCFG;
typedef const RTSCRIPTLEXCFG *PCRTSCRIPTLEXCFG; typedef const RTSCRIPTLEXCFG *PCRTSCRIPTLEXCFG;
/** Default lexer config flags. */ /** Default lexer config flags. */
#define RTSCRIPT_LEX_CFG_F_DEFAULT 0 #define RTSCRIPT_LEX_CFG_F_DEFAULT 0
/** Case insensitive lexing, keywords and so on must be used lowercase to match /** Case insensitive lexing, keywords and so on must be used lowercase to match
* as the lexer will convert everything to lowercase internally. */ * 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). */ /** 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. * scanned string literals on success, optional.
* If not NULL the string cache must be freed by the caller when not used * If not NULL the string cache must be freed by the caller when not used
* anymore. * 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. * @param pCfg The lexer config to use for identifying the different tokens.
*/ */
RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEXRDR pfnReader, RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEXRDR pfnReader,
PFNRTSCRIPTLEXDTOR pfnDtor, void *pvUser, PFNRTSCRIPTLEXDTOR pfnDtor, void *pvUser,
size_t cchBuf, PRTSTRCACHE phStrCacheId, PRTSTRCACHE phStrCacheStringLit, 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. * scanned string literals on success, optional.
* If not NULL the string cache must be freed by the caller when not used * If not NULL the string cache must be freed by the caller when not used
* anymore. * 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. * @param pCfg The lexer config to use for identifying the different tokens.
*/ */
RTDECL(int) RTScriptLexCreateFromString(PRTSCRIPTLEX phScriptLex, const char *pszSrc, PRTSTRCACHE phStrCacheId, 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. * scanned string literals on success, optional.
* If not NULL the string cache must be freed by the caller when not used * If not NULL the string cache must be freed by the caller when not used
* anymore. * 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. * @param pCfg The lexer config to use for identifying the different tokens.
*/ */
RTDECL(int) RTScriptLexCreateFromFile(PRTSCRIPTLEX phScriptLex, const char *pszFilename, PRTSTRCACHE phStrCacheId, 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); 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 DriverPackageType=PlugAndPlay
;edit-DriverVer=08/26/2008,2.00.0000 ;edit-DriverVer=08/26/2008,2.00.0000
;cat CatalogFile=VBoxGuest.cat ;cat CatalogFile=VBoxGuest.cat
;PnpLockdown=1 PnpLockdown=1
[SourceDisksNames] [SourceDisksNames]
1 = %VBoxGuest_MediaDesc%,,, 1 = %VBoxGuest_MediaDesc%,,,

View file

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

View file

@ -433,6 +433,8 @@ int vbox_framebuffer_init(struct drm_device *dev,
#endif #endif
struct drm_gem_object *obj); 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); int vbox_fbdev_init(struct drm_device *dev);
void vbox_fbdev_fini(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); 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 #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 drm_fb_helper_surface_size *sizes)
{ {
struct vbox_fbdev *fbdev = struct vbox_fbdev *fbdev =
@ -413,9 +413,11 @@ static int vboxfb_create(struct drm_fb_helper *helper,
return 0; return 0;
} }
#if RTLNX_VER_MAX(6,15,0)
static struct drm_fb_helper_funcs vbox_fb_helper_funcs = { static struct drm_fb_helper_funcs vbox_fb_helper_funcs = {
.fb_probe = vboxfb_create, .fb_probe = vboxfb_create,
}; };
#endif
#if RTLNX_VER_MAX(4,3,0) && !RTLNX_RHEL_MAJ_PREREQ(7,3) #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) 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; vbox->fbdev = fbdev;
spin_lock_init(&fbdev->dirty_lock); 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); drm_fb_helper_prepare(dev, &fbdev->helper, 32, &vbox_fb_helper_funcs);
#elif RTLNX_VER_MIN(3,17,0) || RTLNX_RHEL_MIN(7,2) #elif RTLNX_VER_MIN(3,17,0) || RTLNX_RHEL_MIN(7,2)
drm_fb_helper_prepare(dev, &fbdev->helper, &vbox_fb_helper_funcs); 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; return num_modes;
} }
#if RTLNX_VER_MAX(3,14,0) && !RTLNX_RHEL_MAJ_PREREQ(7,1) #if RTLNX_VER_MIN(6,15,0)
static int vbox_mode_valid(struct drm_connector *connector, 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 #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 #endif
struct drm_display_mode *mode)
{ {
return MODE_OK; return MODE_OK;
} }

View file

@ -49,18 +49,20 @@ struct sg_table *vbox_gem_prime_get_sg_table(struct drm_gem_object *obj)
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
#if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2) #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_gem_object *vbox_gem_prime_import_sg_table(
struct drm_device *dev, size_t size, struct sg_table *table) struct drm_device *dev, size_t size, struct sg_table *table)
#else # else
struct drm_gem_object *vbox_gem_prime_import_sg_table( struct drm_gem_object *vbox_gem_prime_import_sg_table(
struct drm_device *dev, struct dma_buf_attachment *attach, struct drm_device *dev, struct dma_buf_attachment *attach,
struct sg_table *table) struct sg_table *table)
#endif # endif
{ {
WARN_ONCE(1, "not implemented"); WARN_ONCE(1, "not implemented");
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
#endif
void *vbox_gem_prime_vmap(struct drm_gem_object *obj) void *vbox_gem_prime_vmap(struct drm_gem_object *obj)
{ {

View file

@ -1,7 +1,7 @@
#! /bin/sh #! /bin/sh
# $Id: vboxadd.sh $ # $Id: vboxadd.sh $
## @file ## @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 export KERN_VER
info "Building the modules for kernel $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 case "$KERN_VER" in
5.15.0-*.el8uek*) PATH="/opt/rh/gcc-toolset-11/root/usr/bin:$PATH";; 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 esac
# Detect if kernel was built with clang. # Detect if kernel was built with clang.
@ -1041,6 +1042,8 @@ check_status_kernel()
# Do not spoil $?. # Do not spoil $?.
true true
fi fi
else
false
fi fi
# Module vboxvideo is optional and expected to be loaded only when VM is # 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 * @param mode file mode
* @returns 0 on success, Linux error code otherwise * @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) 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) #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) 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) static int vbsf_inode_mkdir(struct inode *parent, struct dentry *dentry, int mode)
#endif #endif
{ {
int rc;
TRACE(); TRACE();
AssertMsg(!(mode & S_IFMT) || (mode & S_IFMT) == S_IFDIR, ("0%o\n", mode)); AssertMsg(!(mode & S_IFMT) || (mode & S_IFMT) == S_IFDIR, ("0%o\n", mode));
return vbsf_create_worker(parent, dentry, (mode & ~S_IFMT) | S_IFDIR,
SHFL_CF_ACT_CREATE_IF_NEW rc = vbsf_create_worker(parent, dentry, (mode & ~S_IFMT) | S_IFDIR,
| SHFL_CF_ACT_FAIL_IF_EXISTS SHFL_CF_ACT_CREATE_IF_NEW
| SHFL_CF_ACCESS_READWRITE | SHFL_CF_ACT_FAIL_IF_EXISTS
| SHFL_CF_DIRECTORY, | SHFL_CF_ACCESS_READWRITE
false /*fStashHandle*/, false /*fDoLookup*/, NULL /*phHandle*/, NULL /*fCreated*/); | 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,11 +3695,12 @@ static int vbsf_readpage(struct file *file, struct page *page)
* Needed for mmap and writes when the file is mmapped in a shared+writeable * Needed for mmap and writes when the file is mmapped in a shared+writeable
* fashion. * fashion.
*/ */
#if RTLNX_VER_MIN(2,5,52) #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) static int vbsf_writepage(struct page *page, struct writeback_control *wbc)
#else # else
static int vbsf_writepage(struct page *page) static int vbsf_writepage(struct page *page)
#endif # endif
{ {
struct address_space *mapping = page->mapping; struct address_space *mapping = page->mapping;
struct inode *inode = mapping->host; struct inode *inode = mapping->host;
@ -3742,11 +3743,11 @@ static int vbsf_writepage(struct page *page)
&& offEndOfWrite > i_size_read(inode)) && offEndOfWrite > i_size_read(inode))
i_size_write(inode, offEndOfWrite); i_size_write(inode, offEndOfWrite);
#if RTLNX_VER_MAX(6,12,0) # if RTLNX_VER_MAX(6,12,0)
/* Update and unlock the page. */ /* Update and unlock the page. */
if (PageError(page)) if (PageError(page))
ClearPageError(page); ClearPageError(page);
#endif # endif
SetPageUptodate(page); SetPageUptodate(page);
unlock_page(page); unlock_page(page);
@ -3768,12 +3769,13 @@ static int vbsf_writepage(struct page *page)
printk("vbsf_writepage: no writable handle for %s..\n", sf_i->path->String.ach); printk("vbsf_writepage: no writable handle for %s..\n", sf_i->path->String.ach);
err = -EIO; err = -EIO;
} }
#if RTLNX_VER_MAX(6,12,0) # if RTLNX_VER_MAX(6,12,0)
SetPageError(page); SetPageError(page);
#endif # endif
unlock_page(page); unlock_page(page);
return err; return err;
} }
#endif /* < 6.16.0 */
#if RTLNX_VER_MIN(2,6,24) #if RTLNX_VER_MIN(2,6,24)
@ -3905,7 +3907,9 @@ struct address_space_operations vbsf_reg_aops = {
#else #else
.readpage = vbsf_readpage, .readpage = vbsf_readpage,
#endif #endif
#if RTLNX_VER_MAX(6,16,0)
.writepage = vbsf_writepage, .writepage = vbsf_writepage,
#endif
/** @todo Need .writepages if we want msync performance... */ /** @todo Need .writepages if we want msync performance... */
#if RTLNX_VER_MIN(5,18,0) || RTLNX_RHEL_RANGE(9,2, 9,99) #if RTLNX_VER_MIN(5,18,0) || RTLNX_RHEL_RANGE(9,2, 9,99)
.dirty_folio = filemap_dirty_folio, .dirty_folio = filemap_dirty_folio,

View file

@ -3168,8 +3168,8 @@ static int drvAudioStreamPreBufComitting(PDRVAUDIO pThis, PDRVAUDIOSTREAM pStrea
uint32_t cbPreBufWritten = 0; uint32_t cbPreBufWritten = 0;
rc = pThis->pHostDrvAudio->pfnStreamPlay(pThis->pHostDrvAudio, pStreamEx->pBackend, &pStreamEx->Out.pbPreBuf[off], rc = pThis->pHostDrvAudio->pfnStreamPlay(pThis->pHostDrvAudio, pStreamEx->pBackend, &pStreamEx->Out.pbPreBuf[off],
cbToWrite, &cbPreBufWritten); cbToWrite, &cbPreBufWritten);
AssertRCBreak(rc); if ( RT_FAILURE(rc)
if (!cbPreBufWritten) || !cbPreBufWritten)
break; break;
AssertStmt(cbPreBufWritten <= cbToWrite, cbPreBufWritten = cbToWrite); AssertStmt(cbPreBufWritten <= cbToWrite, cbPreBufWritten = cbToWrite);
off = (off + cbPreBufWritten) % cbAlloc; 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. */ /** Support for AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY: -1=unknown, 0=no, 1=yes. */
int8_t fSupportsSrcDefaultQuality; int8_t fSupportsSrcDefaultQuality;
#endif #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). */ /** List of cached configurations (DRVHOSTAUDIOWASCACHEDEVCFG). */
RTLISTANCHOR ConfigList; RTLISTANCHOR ConfigList;
/** The device ID length in RTUTF16 units. */ /** 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 /** Semaphore for signalling that cache purge is done and that the destructor
* can do cleanups. */ * can do cleanups. */
RTSEMEVENTMULTI hEvtCachePurge; RTSEMEVENTMULTI hEvtCachePurge;
/** Total number of device config entire for capturing. /** Total number of device config entries for capturing.
* This includes in-use ones. */ * This includes in-use ones. */
uint32_t volatile cCacheEntriesIn; 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. */ * This includes in-use ones. */
uint32_t volatile cCacheEntriesOut; uint32_t volatile cCacheEntriesOut;
@ -577,7 +581,7 @@ public:
* of a device role, so we try avoiding that by only caring about eMultimedia. * of a device role, so we try avoiding that by only caring about eMultimedia.
* *
* See @bugref{10844} */ * See @bugref{10844} */
&& (enmRole == eMultimedia) && enmRole == eMultimedia
) )
{ {
pIEnumerator = m_pDrvWas->pIEnumerator; pIEnumerator = m_pDrvWas->pIEnumerator;
@ -1158,6 +1162,7 @@ static int drvHostAudioWasCacheLookupOrCreateConfig(PDRVHOSTAUDIOWAS pThis, PDRV
PCPDMAUDIOSTREAMCFG pCfgReq, bool fUseCache, bool fOnWorker, PCPDMAUDIOSTREAMCFG pCfgReq, bool fUseCache, bool fOnWorker,
PDRVHOSTAUDIOWASCACHEDEVCFG *ppDevCfg) PDRVHOSTAUDIOWASCACHEDEVCFG *ppDevCfg)
{ {
Assert(!pDevEntry->fStale);
PDRVHOSTAUDIOWASCACHEDEVCFG pDevCfg; 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 * Looks up the given device + config combo in the cache, creating a new entry
* if missing. * if missing.
@ -1256,13 +1295,12 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
{ {
*ppDevCfg = NULL; *ppDevCfg = NULL;
LogRel2(("WasAPI: Looking up or creating cache entry (caching is set to %s, iface %p)\n", LogRel(("WasAPI: Looking up or creating cache entry (caching is set to %s, iface %p, %s init)\n",
pThis->fCacheEnabled ? "enabled" : "disabled", pIDevice)); pThis->fCacheEnabled ? "enabled" : "disabled", pIDevice, fOnWorker ? "on worker" : "async"));
/* /*
* Get the device ID so we can perform the lookup. * Get the device ID so we can perform the lookup.
*/ */
int rc = VERR_AUDIO_STREAM_COULD_NOT_CREATE;
LPWSTR pwszDevId = NULL; LPWSTR pwszDevId = NULL;
HRESULT hrc = pIDevice->GetId(&pwszDevId); HRESULT hrc = pIDevice->GetId(&pwszDevId);
if (SUCCEEDED(hrc)) if (SUCCEEDED(hrc))
@ -1295,13 +1333,12 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
{ {
LogRel2(("WasAPI: Checking for cached device '%ls' ...\n", pwszDevId)); 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); \ LogRel2(a_LogRel2What); \
LogRel(("WasAPI: Stale or invalid audio interface '%ls' detected!\n", pDevEntry->wszDevId)); \ LogRel(("WasAPI: Stale or invalid audio interface '%ls' detected!\n", pDevEntry->wszDevId)); \
rc = VERR_AUDIO_STREAM_NOT_READY; \ pDevEntry->fStale = true; \
break; \ } while (0)
}
/* /*
* The cache has two levels, so first the device entry. * The cache has two levels, so first the device entry.
*/ */
@ -1311,43 +1348,55 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
{ {
if ( pDevEntry->cwcDevId == cwcDevId if ( pDevEntry->cwcDevId == cwcDevId
&& pDevEntry->enmDir == pCfgReq->enmDir && pDevEntry->enmDir == pCfgReq->enmDir
&& RTUtf16Cmp(pDevEntry->wszDevId, pwszDevId) == 0) && !pDevEntry->fStale
&& memcmp(pDevEntry->wszDevId, pwszDevId, cwcDevId * sizeof(RTUTF16)) == 0)
{ {
/* /*
* Cache hit. * Cache hit.
* First we need to check if the cached device interface is in a working (active) shape.
*/
AssertPtrBreakStmt(pDevEntry->pIDevice, rc = VERR_AUDIO_STREAM_NOT_READY); /* Paranoia. */
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",
pDevEntry->wszDevId, drvHostAudioWasMMDeviceStateToString(dwState)));
}
else
DEVICE_STALE_OR_INVALID_BREAK(("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. * 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 * This is needed when switching audio interfaces and the device interface
* AUDCLNT_E_DEVICE_INVALIDATED. See @bugref{10503} * becomes invalid via AUDCLNT_E_DEVICE_INVALIDATED. See @bugref{10503}.
*/ */
if (pDevEntry->pIDevice != pIDevice) if (pDevEntry->pIDevice != pIDevice)
DEVICE_STALE_OR_INVALID_BREAK(("WasAPI: Cache hit for device '%ls': Stale interface detected (new: %p, old: %p)\n", DEVICE_STALE_OR_INVALID(("WasAPI: Cache hit for device '%ls': Stale interface detected (new: %p, old: %p)\n",
pDevEntry->wszDevId, pIDevice, pDevEntry->pIDevice)); 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(("WasAPI: Cache hit for device '%ls': Is in non-active state (state is %s)\n",
pDevEntry->wszDevId, drvHostAudioWasMMDeviceStateToString(dwState)));
}
else
DEVICE_STALE_OR_INVALID(("WasAPI: Cache hit for device '%ls': Unable to retrieve state (hr=%#x)\n",
pDevEntry->wszDevId, hrc));
#endif
}
LogRel2(("WasAPI: Cache hit for device '%ls' (iface %p)\n", pwszDevId, pIDevice)); LogRelFunc(("WasAPI: fOnWorker=%RTbool, fStaleDevice=%RTbool\n", fOnWorker, pDevEntry->fStale));
CoTaskMemFree(pwszDevId); if (!pDevEntry->fStale)
pwszDevId = NULL; {
LogRel2(("WasAPI: Cache hit for device '%ls' (iface %p)\n", pwszDevId, pIDevice));
return drvHostAudioWasCacheLookupOrCreateConfig(pThis, pDevEntry, pCfgReq, CoTaskMemFree(pwszDevId);
true /* fUseCache */, fOnWorker, ppDevCfg); pwszDevId = NULL;
return drvHostAudioWasCacheLookupOrCreateConfig(pThis, pDevEntry, pCfgReq,
true /* fUseCache */, fOnWorker, ppDevCfg);
}
} }
} }
RTCritSectLeave(&pThis->CritSectCache); RTCritSectLeave(&pThis->CritSectCache);
@ -1355,27 +1404,11 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
if (!pDevEntry) if (!pDevEntry)
LogRel2(("WasAPI: Cache miss for device '%ls' (iface %p)\n", pwszDevId, pIDevice)); LogRel2(("WasAPI: Cache miss for device '%ls' (iface %p)\n", pwszDevId, pIDevice));
#undef DEVICE_STALE_OR_INVALID_BREAK #undef DEVICE_STALE_OR_INVALID
} }
/* /* Note: An active device marked as being stale will be removed from the cache
* If we got a stale or somehow other invalid cache entry, remove it first. after the device switch has been completed. */
*/
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;
}
/* /*
* Device not in the cache (anymore), (re-)add it. * 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) RTListForEach(&pThis->CacheHead, pDevEntry2, DRVHOSTAUDIOWASCACHEDEV, ListEntry)
{ {
if ( pDevEntry2->cwcDevId == cwcDevId if ( pDevEntry2->cwcDevId == cwcDevId
&& !pDevEntry->fStale
/* Note: We have to compare the device interface here as well, as a cached device entry might /* 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->pIDevice == pIDevice
&& pDevEntry2->enmDir == pCfgReq->enmDir && pDevEntry2->enmDir == pCfgReq->enmDir
&& RTUtf16Cmp(pDevEntry2->wszDevId, pDevEntry->wszDevId) == 0) && memcmp(pDevEntry2->wszDevId, pDevEntry->wszDevId, cwcDevId * sizeof(RTUTF16)) == 0)
{ {
pIDevice->Release(); pIDevice->Release();
RTMemFree(pDevEntry); RTMemFree(pDevEntry);
@ -1440,7 +1475,7 @@ static int drvHostAudioWasCacheLookupOrCreate(PDRVHOSTAUDIOWAS pThis, IMMDevice
} }
else else
LogRelMax(64, ("WasAPI: GetId failed (lookup): %Rhrc\n", hrc)); 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. */ /* Put the old config back into the cache. */
drvHostAudioWasCachePutBack(pThis, pDevCfgOld); 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) )); 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) switch (uUser)
{ {
case DRVHOSTAUDIOWAS_DO_PURGE_CACHE: case DRVHOSTAUDIOWAS_DO_PURGE_CACHE:
LogFlowFunc(("DRVHOSTAUDIOWAS_DO_PURGE_CACHE\n"));
Assert(pStream == NULL); Assert(pStream == NULL);
Assert(pvUser == NULL); Assert(pvUser == NULL);
Assert(pThis->fCacheEnabled); Assert(pThis->fCacheEnabled);
@ -2048,6 +2095,7 @@ static DECLCALLBACK(void) drvHostAudioWasHA_DoOnWorkerThread(PPDMIHOSTAUDIO pInt
break; break;
case DRVHOSTAUDIOWAS_DO_PRUNE_CACHE: case DRVHOSTAUDIOWAS_DO_PRUNE_CACHE:
LogFlowFunc(("DRVHOSTAUDIOWAS_DO_PRUNE_CACHE\n"));
Assert(pStream == NULL); Assert(pStream == NULL);
Assert(pvUser == NULL); Assert(pvUser == NULL);
Assert(pThis->fCacheEnabled); Assert(pThis->fCacheEnabled);
@ -2055,6 +2103,7 @@ static DECLCALLBACK(void) drvHostAudioWasHA_DoOnWorkerThread(PPDMIHOSTAUDIO pInt
break; break;
case DRVHOSTAUDIOWAS_DO_STREAM_DEV_SWITCH: case DRVHOSTAUDIOWAS_DO_STREAM_DEV_SWITCH:
LogFlowFunc(("DRVHOSTAUDIOWAS_DO_STREAM_DEV_SWITCH\n"));
AssertPtr(pStream); AssertPtr(pStream);
AssertPtr(pvUser); AssertPtr(pvUser);
drvHostAudioWasDoStreamDevSwitch(pThis, (PDRVHOSTAUDIOWASSTREAM)pStream, (PDRVHOSTAUDIOWASCACHEDEVCFG)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 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+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 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 mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5d
pop bp ; 5d ; 0xc0a62 vgabios.c:243 pop bp ; 5d ; 0xc0a62 vgabios.c:243
pop bx ; 5b ; 0xc0a63 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 mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc0e40 vgabios.c:557
xor bh, bh ; 30 ff ; 0xc0e43 xor bh, bh ; 30 ff ; 0xc0e43
sal bx, 003h ; c1 e3 03 ; 0xc0e45 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 jne short 00e7fh ; 75 30 ; 0xc0e4d
mov ax, di ; 89 f8 ; 0xc0e4f vgabios.c:559 mov ax, di ; 89 f8 ; 0xc0e4f vgabios.c:559
mul word [bp-014h] ; f7 66 ec ; 0xc0e51 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, dx ; 01 d7 ; 0xc0e6b
add di, di ; 01 ff ; 0xc0e6d add di, di ; 01 ff ; 0xc0e6d
add di, cx ; 01 cf ; 0xc0e6f 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 mov ax, word [es:di] ; 26 8b 05 ; 0xc0e75
push SS ; 16 ; 0xc0e78 vgabios.c:58 push SS ; 16 ; 0xc0e78 vgabios.c:58
pop ES ; 07 ; 0xc0e79 pop ES ; 07 ; 0xc0e79
mov word [es:si], ax ; 26 89 04 ; 0xc0e7a mov word [es:si], ax ; 26 89 04 ; 0xc0e7a
jmp short 00dffh ; eb 80 ; 0xc0e7d vgabios.c:561 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 cmp bl, 005h ; 80 fb 05 ; 0xc0e83
je short 00ed6h ; 74 4e ; 0xc0e86 je short 00ed6h ; 74 4e ; 0xc0e86
cmp bl, 002h ; 80 fb 02 ; 0xc0e88 cmp bl, 002h ; 80 fb 02 ; 0xc0e88
@ -2129,18 +2129,18 @@ vga_get_font_info: ; 0xc0f16 LB 0x83
retn 00002h ; c2 02 00 ; 0xc0f6f retn 00002h ; c2 02 00 ; 0xc0f6f
mov bx, 0010ch ; bb 0c 01 ; 0xc0f72 vgabios.c:67 mov bx, 0010ch ; bb 0c 01 ; 0xc0f72 vgabios.c:67
jmp short 00f30h ; eb b9 ; 0xc0f75 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 mov ax, ds ; 8c d8 ; 0xc0f7a
jmp short 00f3bh ; eb bd ; 0xc0f7c vgabios.c:602 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 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 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 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 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 00f7ah ; eb e3 ; 0xc0f95
jmp short 00f6ch ; eb d3 ; 0xc0f97 vgabios.c:622 jmp short 00f6ch ; eb d3 ; 0xc0f97 vgabios.c:622
; disGetNextSymbol 0xc0f99 LB 0x3599 -> off=0x0 cb=0000000000000166 uValue=00000000000c0f99 'vga_read_pixel' ; 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 mov bl, al ; 88 c3 ; 0xc0fc1 vgabios.c:645
xor bh, bh ; 30 ff ; 0xc0fc3 xor bh, bh ; 30 ff ; 0xc0fc3
sal bx, 003h ; c1 e3 03 ; 0xc0fc5 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 jne short 00fd2h ; 75 03 ; 0xc0fcd
jmp near 010f8h ; e9 26 01 ; 0xc0fcf vgabios.c:646 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 cmp ch, 003h ; 80 fd 03 ; 0xc0fd6
jc short 00feah ; 72 0f ; 0xc0fd9 jc short 00feah ; 72 0f ; 0xc0fd9
jbe short 00ff2h ; 76 15 ; 0xc0fdb 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 inc byte [bp-006h] ; fe 46 fa ; 0xc1058 vgabios.c:661
jmp short 0102ch ; eb cf ; 0xc105b jmp short 0102ch ; eb cf ; 0xc105b
jmp near 010f0h ; e9 90 00 ; 0xc105d 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 xor ch, ch ; 30 ed ; 0xc1064
mov bx, strict word 00004h ; bb 04 00 ; 0xc1066 mov bx, strict word 00004h ; bb 04 00 ; 0xc1066
sub bx, cx ; 29 cb ; 0xc1069 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 mov bl, ah ; 88 e3 ; 0xc108c vgabios.c:668
xor bh, bh ; 30 ff ; 0xc108e xor bh, bh ; 30 ff ; 0xc108e
sal bx, 003h ; c1 e3 03 ; 0xc1090 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 jne short 010b5h ; 75 1b ; 0xc1098
mov cx, si ; 89 f1 ; 0xc109a vgabios.c:669 mov cx, si ; 89 f1 ; 0xc109a vgabios.c:669
xor ch, ch ; 30 ed ; 0xc109c xor ch, ch ; 30 ed ; 0xc109c
@ -2610,7 +2610,7 @@ biosfn_set_active_page: ; 0xc1322 LB 0xd8
xor bh, bh ; 30 ff ; 0xc135b xor bh, bh ; 30 ff ; 0xc135b
mov si, bx ; 89 de ; 0xc135d mov si, bx ; 89 de ; 0xc135d
sal si, 003h ; c1 e6 03 ; 0xc135f 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 jne short 013a8h ; 75 3f ; 0xc1367
mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1369 vgabios.c:57 mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1369 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc136c 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 lea ax, [di+001h] ; 8d 45 01 ; 0xc13a0
mul word [bp-00ch] ; f7 66 f4 ; 0xc13a3 mul word [bp-00ch] ; f7 66 f4 ; 0xc13a3
jmp short 013b7h ; eb 0f ; 0xc13a6 vgabios.c:860 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 sal bx, 006h ; c1 e3 06 ; 0xc13ac
mov al, cl ; 88 c8 ; 0xc13af mov al, cl ; 88 c8 ; 0xc13af
xor ah, ah ; 30 e4 ; 0xc13b1 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 bx, ax ; 89 c3 ; 0xc13b7
mov si, strict word 00063h ; be 63 00 ; 0xc13b9 vgabios.c:57 mov si, strict word 00063h ; be 63 00 ; 0xc13b9 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc13bc mov ax, strict word 00040h ; b8 40 00 ; 0xc13bc
@ -2686,7 +2686,7 @@ find_vpti: ; 0xc13fa LB 0x45
xor bh, bh ; 30 ff ; 0xc1401 xor bh, bh ; 30 ff ; 0xc1401
mov si, bx ; 89 de ; 0xc1403 mov si, bx ; 89 de ; 0xc1403
sal si, 003h ; c1 e6 03 ; 0xc1405 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 jne short 01435h ; 75 26 ; 0xc140d
mov si, 00089h ; be 89 00 ; 0xc140f vgabios.c:47 mov si, 00089h ; be 89 00 ; 0xc140f vgabios.c:47
mov ax, strict word 00040h ; b8 40 00 ; 0xc1412 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 mov al, byte [es:si] ; 26 8a 04 ; 0xc1417
test AL, strict byte 010h ; a8 10 ; 0xc141a vgabios.c:923 test AL, strict byte 010h ; a8 10 ; 0xc141a vgabios.c:923
je short 01424h ; 74 06 ; 0xc141c 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 jmp short 01432h ; eb 0e ; 0xc1422 vgabios.c:925
test AL, strict byte 080h ; a8 80 ; 0xc1424 test AL, strict byte 080h ; a8 80 ; 0xc1424
je short 0142eh ; 74 06 ; 0xc1426 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 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 cbw ; 98 ; 0xc1432
jmp short 0143bh ; eb 06 ; 0xc1433 vgabios.c:929 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 xor ah, ah ; 30 e4 ; 0xc1439
pop bp ; 5d ; 0xc143b vgabios.c:933 pop bp ; 5d ; 0xc143b vgabios.c:933
pop si ; 5e ; 0xc143c pop si ; 5e ; 0xc143c
@ -2765,13 +2765,13 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
jne short 01501h ; 75 46 ; 0xc14b9 jne short 01501h ; 75 46 ; 0xc14b9
mov di, cx ; 89 cf ; 0xc14bb vgabios.c:999 mov di, cx ; 89 cf ; 0xc14bb vgabios.c:999
sal di, 003h ; c1 e7 03 ; 0xc14bd 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 mov dx, 003c6h ; ba c6 03 ; 0xc14c4
out DX, AL ; ee ; 0xc14c7 out DX, AL ; ee ; 0xc14c7
xor al, al ; 30 c0 ; 0xc14c8 vgabios.c:1002 xor al, al ; 30 c0 ; 0xc14c8 vgabios.c:1002
mov dx, 003c8h ; ba c8 03 ; 0xc14ca mov dx, 003c8h ; ba c8 03 ; 0xc14ca
out DX, AL ; ee ; 0xc14cd 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 cmp cl, 001h ; 80 f9 01 ; 0xc14d2
jc short 014e8h ; 72 11 ; 0xc14d5 jc short 014e8h ; 72 11 ; 0xc14d5
jbe short 014f3h ; 76 1a ; 0xc14d7 jbe short 014f3h ; 76 1a ; 0xc14d7
@ -2783,24 +2783,24 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
jmp near 0190ah ; e9 22 04 ; 0xc14e5 jmp near 0190ah ; e9 22 04 ; 0xc14e5
test cl, cl ; 84 c9 ; 0xc14e8 test cl, cl ; 84 c9 ; 0xc14e8
jne short 01509h ; 75 1d ; 0xc14ea 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 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 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 short 01509h ; eb 08 ; 0xc14ff vgabios.c:1014
jmp near 01578h ; e9 74 00 ; 0xc1501 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 mov al, byte [bp-012h] ; 8a 46 ee ; 0xc1509 vgabios.c:1020
xor ah, ah ; 30 e4 ; 0xc150c xor ah, ah ; 30 e4 ; 0xc150c
mov di, ax ; 89 c7 ; 0xc150e mov di, ax ; 89 c7 ; 0xc150e
sal di, 003h ; c1 e7 03 ; 0xc1510 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 jne short 01529h ; 75 0f ; 0xc1518
mov es, [bp-01eh] ; 8e 46 e2 ; 0xc151a vgabios.c:1022 mov es, [bp-01eh] ; 8e 46 e2 ; 0xc151a vgabios.c:1022
cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc151d cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc151d
jne short 01529h ; 75 05 ; 0xc1522 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 xor cx, cx ; 31 c9 ; 0xc1529 vgabios.c:1026
jmp short 0153ch ; eb 0f ; 0xc152b jmp short 0153ch ; eb 0f ; 0xc152b
xor al, al ; 30 c0 ; 0xc152d vgabios.c:1033 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 xor ah, ah ; 30 e4 ; 0xc153f
mov di, ax ; 89 c7 ; 0xc1541 mov di, ax ; 89 c7 ; 0xc1541
sal di, 003h ; c1 e7 03 ; 0xc1543 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 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 cmp cx, ax ; 39 c1 ; 0xc1550
jnbe short 0152dh ; 77 d9 ; 0xc1552 jnbe short 0152dh ; 77 d9 ; 0xc1552
imul di, cx, strict byte 00003h ; 6b f9 03 ; 0xc1554 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 xor ah, ah ; 30 e4 ; 0xc1647
mov di, ax ; 89 c7 ; 0xc1649 mov di, ax ; 89 c7 ; 0xc1649
sal di, 003h ; c1 e7 03 ; 0xc164b 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 jne short 0165ah ; 75 05 ; 0xc1653
mov cx, 003b4h ; b9 b4 03 ; 0xc1655 mov cx, 003b4h ; b9 b4 03 ; 0xc1655
jmp short 0165dh ; eb 03 ; 0xc1658 jmp short 0165dh ; eb 03 ; 0xc1658
@ -2970,9 +2970,9 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
xor ah, ah ; 30 e4 ; 0xc16a8 xor ah, ah ; 30 e4 ; 0xc16a8
mov di, ax ; 89 c7 ; 0xc16aa mov di, ax ; 89 c7 ; 0xc16aa
sal di, 003h ; c1 e7 03 ; 0xc16ac 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 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 cx, 04000h ; b9 00 40 ; 0xc16ba
mov ax, 00720h ; b8 20 07 ; 0xc16bd mov ax, 00720h ; b8 20 07 ; 0xc16bd
xor di, di ; 31 ff ; 0xc16c0 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 jmp short 01704h ; eb 3c ; 0xc16c6 vgabios.c:1104
cmp byte [bp-010h], 00dh ; 80 7e f0 0d ; 0xc16c8 vgabios.c:1106 cmp byte [bp-010h], 00dh ; 80 7e f0 0d ; 0xc16c8 vgabios.c:1106
jnc short 016dfh ; 73 11 ; 0xc16cc 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 mov cx, 04000h ; b9 00 40 ; 0xc16d2
xor al, al ; 30 c0 ; 0xc16d5 xor al, al ; 30 c0 ; 0xc16d5
xor di, di ; 31 ff ; 0xc16d7 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 word [bp-020h], ax ; 89 46 e0 ; 0xc16eb
mov AL, strict byte 00fh ; b0 0f ; 0xc16ee vgabios.c:1114 mov AL, strict byte 00fh ; b0 0f ; 0xc16ee vgabios.c:1114
out DX, AL ; ee ; 0xc16f0 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 mov cx, 08000h ; b9 00 80 ; 0xc16f5
xor ax, ax ; 31 c0 ; 0xc16f8 xor ax, ax ; 31 c0 ; 0xc16f8
xor di, di ; 31 ff ; 0xc16fa 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 cmp AL, strict byte 007h ; 3c 07 ; 0xc1779
jnbe short 017a2h ; 77 25 ; 0xc177b jnbe short 017a2h ; 77 25 ; 0xc177b
mov di, ax ; 89 c7 ; 0xc177d vgabios.c:1136 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 di, strict word 00065h ; bf 65 00 ; 0xc1783 vgabios.c:52
mov byte [es:di], al ; 26 88 05 ; 0xc1786 mov byte [es:di], al ; 26 88 05 ; 0xc1786
cmp byte [bp-010h], 006h ; 80 7e f0 06 ; 0xc1789 vgabios.c:1137 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 xor ah, ah ; 30 e4 ; 0xc17a5
mov di, ax ; 89 c7 ; 0xc17a7 mov di, ax ; 89 c7 ; 0xc17a7
sal di, 003h ; c1 e7 03 ; 0xc17a9 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 jne short 017bch ; 75 09 ; 0xc17b1
mov dx, strict word 00007h ; ba 07 00 ; 0xc17b3 vgabios.c:1143 mov dx, strict word 00007h ; ba 07 00 ; 0xc17b3 vgabios.c:1143
mov ax, strict word 00006h ; b8 06 00 ; 0xc17b6 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 xor ah, ah ; 30 e4 ; 0xc17d9
mov di, ax ; 89 c7 ; 0xc17db mov di, ax ; 89 c7 ; 0xc17db
sal di, 003h ; c1 e7 03 ; 0xc17dd 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 jne short 01851h ; 75 6a ; 0xc17e5
mov es, [bp-018h] ; 8e 46 e8 ; 0xc17e7 vgabios.c:1157 mov es, [bp-018h] ; 8e 46 e8 ; 0xc17e7 vgabios.c:1157
mov di, word [es:bx+008h] ; 26 8b 7f 08 ; 0xc17ea 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 ; 0xc1810
push strict byte 00000h ; 6a 00 ; 0xc1812 push strict byte 00000h ; 6a 00 ; 0xc1812
mov cx, 00100h ; b9 00 01 ; 0xc1814 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 mov dx, 0c000h ; ba 00 c0 ; 0xc181a
xor al, al ; 30 c0 ; 0xc181d xor al, al ; 30 c0 ; 0xc181d
call 02e1ah ; e8 f8 15 ; 0xc181f 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 ; 0xc1829
push strict byte 00000h ; 6a 00 ; 0xc182b push strict byte 00000h ; 6a 00 ; 0xc182b
mov cx, 00100h ; b9 00 01 ; 0xc182d 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 mov dx, 0c000h ; ba 00 c0 ; 0xc1833
xor al, al ; 30 c0 ; 0xc1836 xor al, al ; 30 c0 ; 0xc1836
call 02e1ah ; e8 df 15 ; 0xc1838 call 02e1ah ; e8 df 15 ; 0xc1838
@ -3124,7 +3124,7 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
jne short 01879h ; 75 38 ; 0xc183f jne short 01879h ; 75 38 ; 0xc183f
mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1841 vgabios.c:1166 mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1841 vgabios.c:1166
xor bx, bx ; 31 db ; 0xc1844 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 mov ax, 0c000h ; b8 00 c0 ; 0xc1849
call 02da5h ; e8 56 15 ; 0xc184c call 02da5h ; e8 56 15 ; 0xc184c
jmp short 01879h ; eb 28 ; 0xc184f vgabios.c:1167 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 ; 0xc1859
push strict byte 00000h ; 6a 00 ; 0xc185b push strict byte 00000h ; 6a 00 ; 0xc185b
mov cx, 00100h ; b9 00 01 ; 0xc185d 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 mov dx, 0c000h ; ba 00 c0 ; 0xc1863
xor al, al ; 30 c0 ; 0xc1866 xor al, al ; 30 c0 ; 0xc1866
call 02e1ah ; e8 af 15 ; 0xc1868 call 02e1ah ; e8 af 15 ; 0xc1868
mov cx, strict word 00010h ; b9 10 00 ; 0xc186b vgabios.c:1170 mov cx, strict word 00010h ; b9 10 00 ; 0xc186b vgabios.c:1170
xor bx, bx ; 31 db ; 0xc186e 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 mov ax, 0c000h ; b8 00 c0 ; 0xc1873
call 02da5h ; e8 2c 15 ; 0xc1876 call 02da5h ; e8 2c 15 ; 0xc1876
cmp word [bp-01ch], strict byte 00000h ; 83 7e e4 00 ; 0xc1879 vgabios.c:1172 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 AL, strict byte 003h ; b0 03 ; 0xc18cf
mov AH, strict byte 011h ; b4 11 ; 0xc18d1 mov AH, strict byte 011h ; b4 11 ; 0xc18d1
int 06dh ; cd 6d ; 0xc18d3 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 cx, ds ; 8c d9 ; 0xc18d8
mov ax, strict word 0001fh ; b8 1f 00 ; 0xc18da mov ax, strict word 0001fh ; b8 1f 00 ; 0xc18da
call 009f0h ; e8 10 f1 ; 0xc18dd call 009f0h ; e8 10 f1 ; 0xc18dd
@ -3192,14 +3192,14 @@ biosfn_set_video_mode: ; 0xc143f LB 0x4d5
je short 01900h ; 74 11 ; 0xc18ed je short 01900h ; 74 11 ; 0xc18ed
cmp AL, strict byte 008h ; 3c 08 ; 0xc18ef cmp AL, strict byte 008h ; 3c 08 ; 0xc18ef
jne short 0190ah ; 75 17 ; 0xc18f1 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 cx, ds ; 8c d9 ; 0xc18f6
mov ax, strict word 00043h ; b8 43 00 ; 0xc18f8 mov ax, strict word 00043h ; b8 43 00 ; 0xc18f8
call 009f0h ; e8 f2 f0 ; 0xc18fb call 009f0h ; e8 f2 f0 ; 0xc18fb
jmp short 0190ah ; eb 0a ; 0xc18fe vgabios.c:1204 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 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 jmp short 018f6h ; eb ec ; 0xc1908
lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc190a vgabios.c:1212 lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc190a vgabios.c:1212
pop di ; 5f ; 0xc190d pop di ; 5f ; 0xc190d
@ -3676,7 +3676,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc1d0d mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc1d0d
mul word [bp-016h] ; f7 66 ea ; 0xc1d10 mul word [bp-016h] ; f7 66 ea ; 0xc1d10
mov cx, ax ; 89 c1 ; 0xc1d13 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 jne short 01d65h ; 75 49 ; 0xc1d1a
add ax, ax ; 01 c0 ; 0xc1d1c vgabios.c:1345 add ax, ax ; 01 c0 ; 0xc1d1c vgabios.c:1345
or AL, strict byte 0ffh ; 0c ff ; 0xc1d1e 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 mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1d4e vgabios.c:1352
sal ax, 008h ; c1 e0 08 ; 0xc1d51 sal ax, 008h ; c1 e0 08 ; 0xc1d51
add ax, strict word 00020h ; 05 20 00 ; 0xc1d54 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 mov di, word [bp-020h] ; 8b 7e e0 ; 0xc1d5b
jcxz 01d62h ; e3 02 ; 0xc1d5e jcxz 01d62h ; e3 02 ; 0xc1d5e
rep stosw ; f3 ab ; 0xc1d60 rep stosw ; f3 ab ; 0xc1d60
@ -3742,7 +3742,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1dba mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1dba
xor bh, bh ; 30 ff ; 0xc1dbd xor bh, bh ; 30 ff ; 0xc1dbd
sal bx, 003h ; c1 e3 03 ; 0xc1dbf 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 mov ax, si ; 89 f0 ; 0xc1dc6
jcxz 01dcch ; e3 02 ; 0xc1dc8 jcxz 01dcch ; e3 02 ; 0xc1dc8
rep stosw ; f3 ab ; 0xc1dca rep stosw ; f3 ab ; 0xc1dca
@ -3761,7 +3761,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1deb mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1deb
xor bh, bh ; 30 ff ; 0xc1dee xor bh, bh ; 30 ff ; 0xc1dee
sal bx, 003h ; c1 e3 03 ; 0xc1df0 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 mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1df7
mul word [bp-01eh] ; f7 66 e2 ; 0xc1dfa mul word [bp-01eh] ; f7 66 e2 ; 0xc1dfa
add ax, word [bp-018h] ; 03 46 e8 ; 0xc1dfd 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 mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e67
xor bh, bh ; 30 ff ; 0xc1e6a xor bh, bh ; 30 ff ; 0xc1e6a
sal bx, 003h ; c1 e3 03 ; 0xc1e6c 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 mov ax, si ; 89 f0 ; 0xc1e73
jcxz 01e79h ; e3 02 ; 0xc1e75 jcxz 01e79h ; e3 02 ; 0xc1e75
rep stosw ; f3 ab ; 0xc1e77 rep stosw ; f3 ab ; 0xc1e77
@ -3833,7 +3833,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e9e mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e9e
xor bh, bh ; 30 ff ; 0xc1ea1 xor bh, bh ; 30 ff ; 0xc1ea1
sal bx, 003h ; c1 e3 03 ; 0xc1ea3 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 mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1eaa
mul word [bp-01eh] ; f7 66 e2 ; 0xc1ead mul word [bp-01eh] ; f7 66 e2 ; 0xc1ead
add ax, cx ; 01 c8 ; 0xc1eb0 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 dec word [bp-01ch] ; ff 4e e4 ; 0xc1ed2 vgabios.c:1373
jmp near 01e21h ; e9 49 ff ; 0xc1ed5 jmp near 01e21h ; e9 49 ff ; 0xc1ed5
mov si, word [bp-01ah] ; 8b 76 e6 ; 0xc1ed8 vgabios.c:1379 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 xor ah, ah ; 30 e4 ; 0xc1edf
mov si, ax ; 89 c6 ; 0xc1ee1 mov si, ax ; 89 c6 ; 0xc1ee1
sal si, 006h ; c1 e6 06 ; 0xc1ee3 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 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 cmp AL, strict byte 003h ; 3c 03 ; 0xc1ef1
jc short 01f01h ; 72 0c ; 0xc1ef3 jc short 01f01h ; 72 0c ; 0xc1ef3
jbe short 01f08h ; 76 11 ; 0xc1ef5 jbe short 01f08h ; 76 11 ; 0xc1ef5
@ -3907,7 +3907,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1f55 mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1f55
xor bh, bh ; 30 ff ; 0xc1f58 xor bh, bh ; 30 ff ; 0xc1f58
sal bx, 003h ; c1 e3 03 ; 0xc1f5a 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 cx, ax ; 89 c1 ; 0xc1f61
mov ax, dx ; 89 d0 ; 0xc1f63 mov ax, dx ; 89 d0 ; 0xc1f63
xor di, di ; 31 ff ; 0xc1f65 xor di, di ; 31 ff ; 0xc1f65
@ -4015,7 +4015,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
jc short 020afh ; 72 4e ; 0xc205f jc short 020afh ; 72 4e ; 0xc205f
dec word [bp-01ch] ; ff 4e e4 ; 0xc2061 vgabios.c:1409 dec word [bp-01ch] ; ff 4e e4 ; 0xc2061 vgabios.c:1409
jmp short 01ff9h ; eb 93 ; 0xc2064 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 mov byte [bp-014h], al ; 88 46 ec ; 0xc206a
cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc206d vgabios.c:1415 cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc206d vgabios.c:1415
jne short 020b2h ; 75 3f ; 0xc2071 jne short 020b2h ; 75 3f ; 0xc2071
@ -4039,7 +4039,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
mov cx, ax ; 89 c1 ; 0xc209e mov cx, ax ; 89 c1 ; 0xc209e
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc20a0 mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc20a0
xor ah, ah ; 30 e4 ; 0xc20a3 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 xor di, di ; 31 ff ; 0xc20a9
jcxz 020afh ; e3 02 ; 0xc20ab jcxz 020afh ; e3 02 ; 0xc20ab
rep stosb ; f3 aa ; 0xc20ad rep stosb ; f3 aa ; 0xc20ad
@ -4165,7 +4165,7 @@ biosfn_scroll: ; 0xc1c55 LB 0x688
sal cx, 003h ; c1 e1 03 ; 0xc21d8 sal cx, 003h ; c1 e1 03 ; 0xc21d8
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc21db mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc21db
xor ah, ah ; 30 e4 ; 0xc21de 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 xor di, di ; 31 ff ; 0xc21e4
jcxz 021eah ; e3 02 ; 0xc21e6 jcxz 021eah ; e3 02 ; 0xc21e6
rep stosb ; f3 aa ; 0xc21e8 rep stosb ; f3 aa ; 0xc21e8
@ -4392,7 +4392,7 @@ write_gfx_char_cga: ; 0xc23ee LB 0x112
mov bh, al ; 88 c7 ; 0xc23f4 mov bh, al ; 88 c7 ; 0xc23f4
mov ch, dl ; 88 d5 ; 0xc23f6 mov ch, dl ; 88 d5 ; 0xc23f6
mov al, bl ; 88 d8 ; 0xc23f8 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 xor ah, ah ; 30 e4 ; 0xc23fd vgabios.c:1542
mov dl, byte [bp+00ah] ; 8a 56 0a ; 0xc23ff mov dl, byte [bp+00ah] ; 8a 56 0a ; 0xc23ff
xor dh, dh ; 30 f6 ; 0xc2402 xor dh, dh ; 30 f6 ; 0xc2402
@ -4509,7 +4509,7 @@ write_gfx_char_lin: ; 0xc2500 LB 0x9b
mov bh, al ; 88 c7 ; 0xc2506 mov bh, al ; 88 c7 ; 0xc2506
mov ch, dl ; 88 d5 ; 0xc2508 mov ch, dl ; 88 d5 ; 0xc2508
mov al, cl ; 88 c8 ; 0xc250a 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 xor ah, ah ; 30 e4 ; 0xc250f vgabios.c:1606
mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2511 mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2511
xor dh, dh ; 30 f6 ; 0xc2514 xor dh, dh ; 30 f6 ; 0xc2514
@ -4624,7 +4624,7 @@ biosfn_write_char_attr: ; 0xc259b LB 0x187
xor bh, bh ; 30 ff ; 0xc260c xor bh, bh ; 30 ff ; 0xc260c
mov di, bx ; 89 df ; 0xc260e mov di, bx ; 89 df ; 0xc260e
sal di, 003h ; c1 e7 03 ; 0xc2610 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 jne short 02663h ; 75 49 ; 0xc2618
mul dx ; f7 e2 ; 0xc261a vgabios.c:1648 mul dx ; f7 e2 ; 0xc261a vgabios.c:1648
add ax, ax ; 01 c0 ; 0xc261c add ax, ax ; 01 c0 ; 0xc261c
@ -4651,17 +4651,17 @@ biosfn_write_char_attr: ; 0xc259b LB 0x187
add bx, ax ; 01 c3 ; 0xc264c add bx, ax ; 01 c3 ; 0xc264c
mov word [bp-020h], bx ; 89 5e e0 ; 0xc264e mov word [bp-020h], bx ; 89 5e e0 ; 0xc264e
mov ax, word [bp-020h] ; 8b 46 e0 ; 0xc2651 vgabios.c:1651 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 cx, si ; 89 f1 ; 0xc2658
mov di, dx ; 89 d7 ; 0xc265a mov di, dx ; 89 d7 ; 0xc265a
jcxz 02660h ; e3 02 ; 0xc265c jcxz 02660h ; e3 02 ; 0xc265c
rep stosw ; f3 ab ; 0xc265e rep stosw ; f3 ab ; 0xc265e
jmp near 0271bh ; e9 b8 00 ; 0xc2660 vgabios.c:1653 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 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 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 mov byte [bp-014h], al ; 88 46 ec ; 0xc2675
dec si ; 4e ; 0xc2678 vgabios.c:1658 dec si ; 4e ; 0xc2678 vgabios.c:1658
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2679 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 mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc267e vgabios.c:1660
xor bh, bh ; 30 ff ; 0xc2681 xor bh, bh ; 30 ff ; 0xc2681
sal bx, 003h ; c1 e3 03 ; 0xc2683 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 cmp bl, 003h ; 80 fb 03 ; 0xc268a
jc short 0269eh ; 72 0f ; 0xc268d jc short 0269eh ; 72 0f ; 0xc268d
jbe short 026a5h ; 76 14 ; 0xc268f 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 al, byte [bp-010h] ; 8a 46 f0 ; 0xc278f vgabios.c:1703
mov bx, ax ; 89 c3 ; 0xc2792 mov bx, ax ; 89 c3 ; 0xc2792
sal bx, 003h ; c1 e3 03 ; 0xc2794 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 jne short 027e0h ; 75 42 ; 0xc279c
mov ax, cx ; 89 c8 ; 0xc279e vgabios.c:1706 mov ax, cx ; 89 c8 ; 0xc279e vgabios.c:1706
mul dx ; f7 e2 ; 0xc27a0 mul dx ; f7 e2 ; 0xc27a0
@ -4808,19 +4808,19 @@ biosfn_write_char_only: ; 0xc2722 LB 0x181
xor ah, ah ; 30 e4 ; 0xc27cb xor ah, ah ; 30 e4 ; 0xc27cb
mov di, ax ; 89 c7 ; 0xc27cd mov di, ax ; 89 c7 ; 0xc27cd
sal di, 003h ; c1 e7 03 ; 0xc27cf 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 al, byte [bp-00ah] ; 8a 46 f6 ; 0xc27d6 vgabios.c:52
mov byte [es:bx], al ; 26 88 07 ; 0xc27d9 mov byte [es:bx], al ; 26 88 07 ; 0xc27d9
inc bx ; 43 ; 0xc27dc vgabios.c:1710 inc bx ; 43 ; 0xc27dc vgabios.c:1710
inc bx ; 43 ; 0xc27dd inc bx ; 43 ; 0xc27dd
jmp short 027c2h ; eb e2 ; 0xc27de vgabios.c:1711 jmp short 027c2h ; eb e2 ; 0xc27de vgabios.c:1711
mov di, ax ; 89 c7 ; 0xc27e0 vgabios.c:1716 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 mov di, ax ; 89 c7 ; 0xc27e6
sal di, 006h ; c1 e7 06 ; 0xc27e8 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 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 mov byte [bp-016h], al ; 88 46 ea ; 0xc27f6
dec si ; 4e ; 0xc27f9 vgabios.c:1718 dec si ; 4e ; 0xc27f9 vgabios.c:1718
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc27fa 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 mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc27ff vgabios.c:1720
xor bh, bh ; 30 ff ; 0xc2802 xor bh, bh ; 30 ff ; 0xc2802
sal bx, 003h ; c1 e3 03 ; 0xc2804 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 cmp bl, 003h ; 80 fb 03 ; 0xc280b
jc short 0281fh ; 72 0f ; 0xc280e jc short 0281fh ; 72 0f ; 0xc280e
jbe short 02826h ; 76 14 ; 0xc2810 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 mov bl, al ; 88 c3 ; 0xc28cb vgabios.c:1753
xor bh, bh ; 30 ff ; 0xc28cd xor bh, bh ; 30 ff ; 0xc28cd
sal bx, 003h ; c1 e3 03 ; 0xc28cf 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 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 cmp AL, strict byte 003h ; 3c 03 ; 0xc28dd
jc short 028edh ; 72 0c ; 0xc28df jc short 028edh ; 72 0c ; 0xc28df
jbe short 028f7h ; 76 14 ; 0xc28e1 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 mov ax, dx ; 89 d0 ; 0xc2968 vgabios.c:1775
shr ax, 1 ; d1 e8 ; 0xc296a shr ax, 1 ; d1 e8 ; 0xc296a
imul ax, ax, strict byte 00050h ; 6b c0 50 ; 0xc296c 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 jne short 0297eh ; 75 08 ; 0xc2974
mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2976 vgabios.c:1777 mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2976 vgabios.c:1777
shr bx, 002h ; c1 eb 02 ; 0xc2979 shr bx, 002h ; c1 eb 02 ; 0xc2979
@ -4997,7 +4997,7 @@ biosfn_write_pixel: ; 0xc28a3 LB 0x173
xor ah, ah ; 30 e4 ; 0xc2998 xor ah, ah ; 30 e4 ; 0xc2998
mov si, ax ; 89 c6 ; 0xc299a mov si, ax ; 89 c6 ; 0xc299a
sal si, 003h ; c1 e6 03 ; 0xc299c 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 jne short 029bfh ; 75 19 ; 0xc29a4
mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc29a6 vgabios.c:1787 mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc29a6 vgabios.c:1787
and AL, strict byte 003h ; 24 03 ; 0xc29a9 and AL, strict byte 003h ; 24 03 ; 0xc29a9
@ -5119,7 +5119,7 @@ biosfn_write_teletype: ; 0xc2a16 LB 0x258
xor ah, ah ; 30 e4 ; 0xc2ac2 xor ah, ah ; 30 e4 ; 0xc2ac2
mov bx, ax ; 89 c3 ; 0xc2ac4 mov bx, ax ; 89 c3 ; 0xc2ac4
sal bx, 003h ; c1 e3 03 ; 0xc2ac6 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 jne short 02b12h ; 75 42 ; 0xc2ace
mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2ad0 vgabios.c:1865 mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2ad0 vgabios.c:1865
mul word [bp-012h] ; f7 66 ee ; 0xc2ad3 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, dx ; 01 d0 ; 0xc2af3
add ax, ax ; 01 c0 ; 0xc2af5 add ax, ax ; 01 c0 ; 0xc2af5
add si, ax ; 01 c6 ; 0xc2af7 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 mov byte [es:si], ch ; 26 88 2c ; 0xc2afd vgabios.c:52
cmp cl, 003h ; 80 f9 03 ; 0xc2b00 vgabios.c:1870 cmp cl, 003h ; 80 f9 03 ; 0xc2b00 vgabios.c:1870
jne short 02b41h ; 75 3c ; 0xc2b03 jne short 02b41h ; 75 3c ; 0xc2b03
inc si ; 46 ; 0xc2b05 vgabios.c:1871 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 al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2b0a
mov byte [es:si], al ; 26 88 04 ; 0xc2b0d mov byte [es:si], al ; 26 88 04 ; 0xc2b0d
jmp short 02b41h ; eb 2f ; 0xc2b10 vgabios.c:1873 jmp short 02b41h ; eb 2f ; 0xc2b10 vgabios.c:1873
mov si, ax ; 89 c6 ; 0xc2b12 vgabios.c:1876 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 mov si, ax ; 89 c6 ; 0xc2b18
sal si, 006h ; c1 e6 06 ; 0xc2b1a sal si, 006h ; c1 e6 06 ; 0xc2b1a
mov dl, byte [si+04841h] ; 8a 94 41 48 ; 0xc2b1d mov dl, byte [si+04842h] ; 8a 94 42 48 ; 0xc2b1d
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2b21 vgabios.c:1877 mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc2b21 vgabios.c:1877
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2b25 vgabios.c:1878 mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2b25 vgabios.c:1878
cmp bl, 003h ; 80 fb 03 ; 0xc2b29 cmp bl, 003h ; 80 fb 03 ; 0xc2b29
jc short 02b3ch ; 72 0e ; 0xc2b2c jc short 02b3ch ; 72 0e ; 0xc2b2c
jbe short 02b43h ; 76 13 ; 0xc2b2e 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 mov cl, byte [bp-010h] ; 8a 4e f0 ; 0xc2bdc
db 0feh, 0c9h db 0feh, 0c9h
; dec cl ; fe c9 ; 0xc2bdf ; 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 jne short 02c32h ; 75 4a ; 0xc2be6
mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2be8 vgabios.c:1910 mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2be8 vgabios.c:1910
mul word [bp-012h] ; f7 66 ee ; 0xc2beb 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 ax, ax ; 01 c0 ; 0xc2c0e
add si, ax ; 01 c6 ; 0xc2c10 add si, ax ; 01 c6 ; 0xc2c10
inc si ; 46 ; 0xc2c12 vgabios.c:1911 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 mov dl, byte [es:si] ; 26 8a 14 ; 0xc2c17
push strict byte 00001h ; 6a 01 ; 0xc2c1a vgabios.c:1912 push strict byte 00001h ; 6a 01 ; 0xc2c1a vgabios.c:1912
mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2c1c 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 DL, strict byte 002h ; b2 02 ; 0xc2ecf vgabios.c:2033
mov bl, dl ; 88 d3 ; 0xc2ed1 vgabios.c:2034 mov bl, dl ; 88 d3 ; 0xc2ed1 vgabios.c:2034
xor bh, bh ; 30 ff ; 0xc2ed3 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 byte [bp+004h], al ; 88 46 04 ; 0xc2ed9
mov bx, 00085h ; bb 85 00 ; 0xc2edc vgabios.c:62 mov bx, 00085h ; bb 85 00 ; 0xc2edc vgabios.c:62
mov ax, strict word 00040h ; b8 40 00 ; 0xc2edf 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 al, bl ; 88 d8 ; 0xc2f25
mov cx, ax ; 89 c1 ; 0xc2f27 mov cx, ax ; 89 c1 ; 0xc2f27
mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2f29 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 mov dx, ds ; 8c da ; 0xc2f2f
call 02eafh ; e8 7b ff ; 0xc2f31 call 02eafh ; e8 7b ff ; 0xc2f31
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f34 vgabios.c:2054 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 al, bl ; 88 d8 ; 0xc2f47
mov cx, ax ; 89 c1 ; 0xc2f49 mov cx, ax ; 89 c1 ; 0xc2f49
mov bx, strict word 00008h ; bb 08 00 ; 0xc2f4b 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 mov dx, ds ; 8c da ; 0xc2f51
call 02eafh ; e8 59 ff ; 0xc2f53 call 02eafh ; e8 59 ff ; 0xc2f53
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f56 vgabios.c:2058 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 al, bl ; 88 d8 ; 0xc2f69
mov cx, ax ; 89 c1 ; 0xc2f6b mov cx, ax ; 89 c1 ; 0xc2f6b
mov bx, strict word 00010h ; bb 10 00 ; 0xc2f6d 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 mov dx, ds ; 8c da ; 0xc2f73
call 02eafh ; e8 37 ff ; 0xc2f75 call 02eafh ; e8 37 ff ; 0xc2f75
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f78 vgabios.c:2062 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 word [bp-00ah], ax ; 89 46 f6 ; 0xc307a vgabios.c:58
mov ax, ds ; 8c d8 ; 0xc307d vgabios.c:2150 mov ax, ds ; 8c d8 ; 0xc307d vgabios.c:2150
mov es, dx ; 8e c2 ; 0xc307f vgabios.c:72 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 mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc3086
lea di, [bx+004h] ; 8d 7f 04 ; 0xc308a vgabios.c:2155 lea di, [bx+004h] ; 8d 7f 04 ; 0xc308a vgabios.c:2155
mov cx, strict word 0001eh ; b9 1e 00 ; 0xc308d 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 mov bl, al ; 88 c3 ; 0xc382c
xor bh, bh ; 30 ff ; 0xc382e xor bh, bh ; 30 ff ; 0xc382e
sal bx, 003h ; c1 e3 03 ; 0xc3830 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 jne short 03826h ; 75 ed ; 0xc3837
mov ah, al ; 88 c4 ; 0xc3839 mov ah, al ; 88 c4 ; 0xc3839
mov al, ah ; 88 e0 ; 0xc383b vgabios.c:2438 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 push strict byte 00000h ; 6a 00 ; 0xc3afc
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3afe mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3afe
mov cx, 00100h ; b9 00 01 ; 0xc3b01 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 mov dx, 0c000h ; ba 00 c0 ; 0xc3b07
call 02e1ah ; e8 0d f3 ; 0xc3b0a call 02e1ah ; e8 0d f3 ; 0xc3b0a
jmp short 03b2ch ; eb 1d ; 0xc3b0d jmp short 03b2ch ; eb 1d ; 0xc3b0d
@ -6986,7 +6986,7 @@ int10_func: ; 0xc38d9 LB 0x49f
push strict byte 00000h ; 6a 00 ; 0xc3b17 push strict byte 00000h ; 6a 00 ; 0xc3b17
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b19 mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b19
mov cx, 00100h ; b9 00 01 ; 0xc3b1c 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 jmp short 03b07h ; eb e3 ; 0xc3b22
mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b24 vgabios.c:2629 mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b24 vgabios.c:2629
xor ah, ah ; 30 e4 ; 0xc3b27 xor ah, ah ; 30 e4 ; 0xc3b27
@ -6999,7 +6999,7 @@ int10_func: ; 0xc38d9 LB 0x49f
push strict byte 00000h ; 6a 00 ; 0xc3b37 push strict byte 00000h ; 6a 00 ; 0xc3b37
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b39 mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b39
mov cx, 00100h ; b9 00 01 ; 0xc3b3c 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 jmp short 03b07h ; eb c3 ; 0xc3b42
mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b44 vgabios.c:2636 mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b44 vgabios.c:2636
mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3b47 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], 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+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+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 [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+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 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 cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3ff2 vbe.c:356
je short 0401ch ; 74 24 ; 0xc3ff6 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+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 [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 [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 [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc4018
mov dx, cx ; 89 ca ; 0xc401c vbe.c:369 mov dx, cx ; 89 ca ; 0xc401c vbe.c:369
add dx, strict byte 0001bh ; 83 c2 1b ; 0xc401e add dx, strict byte 0001bh ; 83 c2 1b ; 0xc401e
@ -8278,12 +8278,12 @@ vesa_pm_end: ; 0xc4754 LB 0x1
; Padding 0x2b bytes at 0xc4755 ; Padding 0x2b bytes at 0xc4755
times 43 db 0 times 43 db 0
section _DATA progbits vstart=0x4780 align=1 ; size=0x3742 class=DATA group=DGROUP section _DATA progbits vstart=0x4780 align=1 ; size=0x3745 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3742 -> off=0x0 cb=000000000000002b uValue=00000000000c0000 '_msg_vga_init' ; disGetNextSymbol 0xc4780 LB 0x3745 -> off=0x0 cb=000000000000002c uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2b _msg_vga_init: ; 0xc4780 LB 0x2c
db 'Oracle VirtualBox Version 7.1.8 VGA BIOS', 00dh, 00ah, 000h db 'Oracle VirtualBox Version 7.1.10 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ab LB 0x3717 -> off=0x0 cb=0000000000000080 uValue=00000000000c002b 'vga_modes' ; disGetNextSymbol 0xc47ac LB 0x3719 -> off=0x0 cb=0000000000000080 uValue=00000000000c002c 'vga_modes'
vga_modes: ; 0xc47ab LB 0x80 vga_modes: ; 0xc47ac LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h 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 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 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 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 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 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' ; disGetNextSymbol 0xc482c LB 0x3699 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ac 'line_to_vpti'
line_to_vpti: ; 0xc482b LB 0x10 line_to_vpti: ; 0xc482c LB 0x10
db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh 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' ; disGetNextSymbol 0xc483c LB 0x3689 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bc 'dac_regs'
dac_regs: ; 0xc483b LB 0x4 dac_regs: ; 0xc483c LB 0x4
dd 0ff3f3f3fh dd 0ff3f3f3fh
; disGetNextSymbol 0xc483f LB 0x3683 -> off=0x0 cb=0000000000000780 uValue=00000000000c00bf 'video_param_table' ; disGetNextSymbol 0xc4840 LB 0x3685 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c0 'video_param_table'
video_param_table: ; 0xc483f LB 0x780 video_param_table: ; 0xc4840 LB 0x780
db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h 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 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 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 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 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 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' ; disGetNextSymbol 0xc4fc0 LB 0x2f05 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0840 'palette0'
palette0: ; 0xc4fbf LB 0xc0 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, 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 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 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, 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 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 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' ; disGetNextSymbol 0xc5080 LB 0x2e45 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0900 'palette1'
palette1: ; 0xc507f LB 0xc0 palette1: ; 0xc5080 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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, 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 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, 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, 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 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' ; disGetNextSymbol 0xc5140 LB 0x2d85 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c0 'palette2'
palette2: ; 0xc513f LB 0xc0 palette2: ; 0xc5140 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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 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 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, 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, 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 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' ; disGetNextSymbol 0xc5200 LB 0x2cc5 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a80 'palette3'
palette3: ; 0xc51ff LB 0x300 palette3: ; 0xc5200 LB 0x300
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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 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 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 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 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 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' ; disGetNextSymbol 0xc5500 LB 0x29c5 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d80 'static_functionality'
static_functionality: ; 0xc54ff LB 0x10 static_functionality: ; 0xc5500 LB 0x10
db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h 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' ; disGetNextSymbol 0xc5510 LB 0x29b5 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d90 '_dcc_table'
_dcc_table: ; 0xc550f LB 0x24 _dcc_table: ; 0xc5510 LB 0x24
db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 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, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5533 LB 0x298f -> off=0x0 cb=000000000000001a uValue=00000000000c0db3 '_secondary_save_area' ; disGetNextSymbol 0xc5534 LB 0x2991 -> off=0x0 cb=000000000000001a uValue=00000000000c0db4 '_secondary_save_area'
_secondary_save_area: ; 0xc5533 LB 0x1a _secondary_save_area: ; 0xc5534 LB 0x1a
db 01ah, 000h, 00fh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 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 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' ; disGetNextSymbol 0xc554e LB 0x2977 -> off=0x0 cb=000000000000001c uValue=00000000000c0dce '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554d LB 0x1c _video_save_pointer_table: ; 0xc554e LB 0x1c
db 03fh, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 040h, 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 db 034h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5569 LB 0x2959 -> off=0x0 cb=0000000000000800 uValue=00000000000c0de9 'vgafont8' ; disGetNextSymbol 0xc556a LB 0x295b -> off=0x0 cb=0000000000000800 uValue=00000000000c0dea 'vgafont8'
vgafont8: ; 0xc5569 LB 0x800 vgafont8: ; 0xc556a LB 0x800
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh 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 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 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 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 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 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' ; disGetNextSymbol 0xc5d6a LB 0x215b -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ea 'vgafont14'
vgafont14: ; 0xc5d69 LB 0xe00 vgafont14: ; 0xc5d6a LB 0xe00
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 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh 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 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, 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, 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 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' ; disGetNextSymbol 0xc6b6a LB 0x135b -> off=0x0 cb=0000000000001000 uValue=00000000000c23ea 'vgafont16'
vgafont16: ; 0xc6b69 LB 0x1000 vgafont16: ; 0xc6b6a LB 0x1000
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, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 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 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, 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, 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 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' ; disGetNextSymbol 0xc7b6a LB 0x35b -> off=0x0 cb=000000000000012d uValue=00000000000c33ea 'vgafont14alt'
vgafont14alt: ; 0xc7b69 LB 0x12d vgafont14alt: ; 0xc7b6a LB 0x12d
db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h 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, 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 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, 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 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 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' ; disGetNextSymbol 0xc7c97 LB 0x22e -> off=0x0 cb=0000000000000144 uValue=00000000000c3517 'vgafont16alt'
vgafont16alt: ; 0xc7c96 LB 0x144 vgafont16alt: ; 0xc7c97 LB 0x144
db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h 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, 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 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, 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 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
db 006h, 000h, 000h, 000h db 006h, 000h, 000h, 000h
; disGetNextSymbol 0xc7dda LB 0xe8 -> off=0x0 cb=0000000000000008 uValue=00000000000c365a '_cga_msr' ; disGetNextSymbol 0xc7ddb LB 0xea -> off=0x0 cb=0000000000000008 uValue=00000000000c365b '_cga_msr'
_cga_msr: ; 0xc7dda LB 0x8 _cga_msr: ; 0xc7ddb LB 0x8
db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
; disGetNextSymbol 0xc7de2 LB 0xe0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 'line_to_vpti_200' ; disGetNextSymbol 0xc7de3 LB 0xe2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3663 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de2 LB 0x8 line_to_vpti_200: ; 0xc7de3 LB 0x8
db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7dea LB 0xd8 -> off=0x0 cb=0000000000000008 uValue=00000000000c366a 'line_to_vpti_350' ; disGetNextSymbol 0xc7deb LB 0xda -> off=0x0 cb=0000000000000008 uValue=00000000000c366b 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7dea LB 0x8 line_to_vpti_350: ; 0xc7deb LB 0x8
db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7df2 LB 0xd0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3672 'line_to_vpti_400' ; disGetNextSymbol 0xc7df3 LB 0xd2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3673 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df2 LB 0x8 line_to_vpti_400: ; 0xc7df3 LB 0x8
db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
; disGetNextSymbol 0xc7dfa LB 0xc8 -> off=0x0 cb=0000000000000004 uValue=00000000000c367a 'row_tbl' ; disGetNextSymbol 0xc7dfb LB 0xca -> off=0x0 cb=0000000000000005 uValue=00000000000c367b 'row_tbl'
row_tbl: ; 0xc7dfa LB 0x4 row_tbl: ; 0xc7dfb LB 0x5
dd 02b190e00h db 000h, 00eh, 019h, 02bh, 000h
; disGetNextSymbol 0xc7dfe LB 0xc4 -> off=0x0 cb=0000000000000015 uValue=00000000000c367e '_vbebios_copyright' ; disGetNextSymbol 0xc7e00 LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c3680 '_vbebios_copyright'
_vbebios_copyright: ; 0xc7dfe LB 0x15 _vbebios_copyright: ; 0xc7e00 LB 0x15
db 'VirtualBox VESA BIOS', 000h db 'VirtualBox VESA BIOS', 000h
; disGetNextSymbol 0xc7e13 LB 0xaf -> off=0x0 cb=000000000000001d uValue=00000000000c3693 '_vbebios_vendor_name' ; disGetNextSymbol 0xc7e15 LB 0xb0 -> off=0x0 cb=000000000000001d uValue=00000000000c3695 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e13 LB 0x1d _vbebios_vendor_name: ; 0xc7e15 LB 0x1d
db 'Oracle and/or its affiliates', 000h db 'Oracle and/or its affiliates', 000h
; disGetNextSymbol 0xc7e30 LB 0x92 -> off=0x0 cb=000000000000001e uValue=00000000000c36b0 '_vbebios_product_name' ; disGetNextSymbol 0xc7e32 LB 0x93 -> off=0x0 cb=000000000000001e uValue=00000000000c36b2 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e30 LB 0x1e _vbebios_product_name: ; 0xc7e32 LB 0x1e
db 'Oracle VirtualBox VBE Adapter', 000h db 'Oracle VirtualBox VBE Adapter', 000h
; disGetNextSymbol 0xc7e4e LB 0x74 -> off=0x0 cb=0000000000000020 uValue=00000000000c36ce '_vbebios_product_revision' ; disGetNextSymbol 0xc7e50 LB 0x75 -> off=0x0 cb=0000000000000021 uValue=00000000000c36d0 '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e4e LB 0x20 _vbebios_product_revision: ; 0xc7e50 LB 0x21
db 'Oracle VirtualBox Version 7.1.8', 000h db 'Oracle VirtualBox Version 7.1.10', 000h
; disGetNextSymbol 0xc7e6e LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36ee '_vbebios_info_string' ; disGetNextSymbol 0xc7e71 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f1 '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e6e LB 0x2b _vbebios_info_string: ; 0xc7e71 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h 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' ; disGetNextSymbol 0xc7e9c LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c371c '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e99 LB 0x29 _no_vbebios_info_string: ; 0xc7e9c LB 0x29
db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h 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 section CONST2 progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
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 ; Padding 0x13a bytes at 0xc7ec6
db 06ch, 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h
db 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch
db 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h, 061h
db 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h db 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh, 06fh
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h db 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h
db 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h 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 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, 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 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+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 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 mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5c
pop bp ; 5d ; 0xc0a61 vgabios.c:243 pop bp ; 5d ; 0xc0a61 vgabios.c:243
pop bx ; 5b ; 0xc0a62 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 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 movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc0e12 vgabios.c:557
sal bx, 003h ; c1 e3 03 ; 0xc0e16 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 jne short 00e56h ; 75 36 ; 0xc0e1e
imul dx, di ; 0f af d7 ; 0xc0e20 vgabios.c:559 imul dx, di ; 0f af d7 ; 0xc0e20 vgabios.c:559
add dx, dx ; 01 d2 ; 0xc0e23 add dx, dx ; 01 d2 ; 0xc0e23
@ -1986,13 +1986,13 @@ vga_read_char_attr: ; 0xc0db0 LB 0x127
add ax, ax ; 01 c0 ; 0xc0e41 add ax, ax ; 01 c0 ; 0xc0e41
mov di, dx ; 89 d7 ; 0xc0e43 mov di, dx ; 89 d7 ; 0xc0e43
add di, ax ; 01 c7 ; 0xc0e45 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 mov ax, word [es:di] ; 26 8b 05 ; 0xc0e4b
push SS ; 16 ; 0xc0e4e vgabios.c:58 push SS ; 16 ; 0xc0e4e vgabios.c:58
pop ES ; 07 ; 0xc0e4f pop ES ; 07 ; 0xc0e4f
mov word [es:si], ax ; 26 89 04 ; 0xc0e50 mov word [es:si], ax ; 26 89 04 ; 0xc0e50
jmp near 00eceh ; e9 78 00 ; 0xc0e53 vgabios.c:561 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 cmp bl, 005h ; 80 fb 05 ; 0xc0e5a
je short 00eaah ; 74 4b ; 0xc0e5d je short 00eaah ; 74 4b ; 0xc0e5d
cmp bl, 002h ; 80 fb 02 ; 0xc0e5f cmp bl, 002h ; 80 fb 02 ; 0xc0e5f
@ -2091,18 +2091,18 @@ vga_get_font_info: ; 0xc0ee7 LB 0x83
retn 00002h ; c2 02 00 ; 0xc0f40 retn 00002h ; c2 02 00 ; 0xc0f40
mov bx, 0010ch ; bb 0c 01 ; 0xc0f43 vgabios.c:67 mov bx, 0010ch ; bb 0c 01 ; 0xc0f43 vgabios.c:67
jmp short 00f01h ; eb b9 ; 0xc0f46 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 mov ax, ds ; 8c d8 ; 0xc0f4b
jmp short 00f0ch ; eb bd ; 0xc0f4d vgabios.c:602 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 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 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 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 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 00f4bh ; eb e3 ; 0xc0f66
jmp short 00f3dh ; eb d3 ; 0xc0f68 vgabios.c:622 jmp short 00f3dh ; eb d3 ; 0xc0f68 vgabios.c:622
; disGetNextSymbol 0xc0f6a LB 0x334f -> off=0x0 cb=0000000000000156 uValue=00000000000c0f6a 'vga_read_pixel' ; 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 je near 010b9h ; 0f 84 27 01 ; 0xc0f8e
movzx bx, al ; 0f b6 d8 ; 0xc0f92 vgabios.c:645 movzx bx, al ; 0f b6 d8 ; 0xc0f92 vgabios.c:645
sal bx, 003h ; c1 e3 03 ; 0xc0f95 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 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 cmp ch, 003h ; 80 fd 03 ; 0xc0fa5
jc short 00fbbh ; 72 11 ; 0xc0fa8 jc short 00fbbh ; 72 11 ; 0xc0fa8
jbe short 00fc3h ; 76 17 ; 0xc0faa jbe short 00fc3h ; 76 17 ; 0xc0faa
@ -2180,7 +2180,7 @@ vga_read_pixel: ; 0xc0f6a LB 0x156
or ch, al ; 08 c5 ; 0xc1027 or ch, al ; 08 c5 ; 0xc1027
inc byte [bp-006h] ; fe 46 fa ; 0xc1029 vgabios.c:661 inc byte [bp-006h] ; fe 46 fa ; 0xc1029 vgabios.c:661
jmp short 00ffch ; eb ce ; 0xc102c 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 mov bx, strict word 00004h ; bb 04 00 ; 0xc1033
sub bx, cx ; 29 cb ; 0xc1036 sub bx, cx ; 29 cb ; 0xc1036
mov cx, bx ; 89 d9 ; 0xc1038 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 mov al, byte [es:bx] ; 26 8a 07 ; 0xc1058
movzx bx, ah ; 0f b6 dc ; 0xc105b vgabios.c:668 movzx bx, ah ; 0f b6 dc ; 0xc105b vgabios.c:668
sal bx, 003h ; c1 e3 03 ; 0xc105e 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 jne short 0107dh ; 75 15 ; 0xc1066
and dx, strict byte 00003h ; 83 e2 03 ; 0xc1068 vgabios.c:669 and dx, strict byte 00003h ; 83 e2 03 ; 0xc1068 vgabios.c:669
mov cx, strict word 00003h ; b9 03 00 ; 0xc106b 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 movzx bx, ch ; 0f b6 dd ; 0xc1301 vgabios.c:847
mov si, bx ; 89 de ; 0xc1304 mov si, bx ; 89 de ; 0xc1304
sal si, 003h ; c1 e6 03 ; 0xc1306 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 jne short 01344h ; 75 34 ; 0xc130e
mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1310 vgabios.c:57 mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1310 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc1313 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 mov bx, dx ; 89 d3 ; 0xc133f
inc bx ; 43 ; 0xc1341 inc bx ; 43 ; 0xc1341
jmp short 01353h ; eb 0f ; 0xc1342 vgabios.c:860 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 sal bx, 006h ; c1 e3 06 ; 0xc1349
movzx ax, cl ; 0f b6 c1 ; 0xc134c 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 imul bx, ax ; 0f af d8 ; 0xc1353
mov si, strict word 00063h ; be 63 00 ; 0xc1356 vgabios.c:57 mov si, strict word 00063h ; be 63 00 ; 0xc1356 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc1359 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 movzx bx, al ; 0f b6 d8 ; 0xc139d vgabios.c:921
mov si, bx ; 89 de ; 0xc13a0 mov si, bx ; 89 de ; 0xc13a0
sal si, 003h ; c1 e6 03 ; 0xc13a2 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 jne short 013d4h ; 75 28 ; 0xc13aa
mov si, 00089h ; be 89 00 ; 0xc13ac vgabios.c:47 mov si, 00089h ; be 89 00 ; 0xc13ac vgabios.c:47
mov ax, strict word 00040h ; b8 40 00 ; 0xc13af 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 mov al, byte [es:si] ; 26 8a 04 ; 0xc13b4
test AL, strict byte 010h ; a8 10 ; 0xc13b7 vgabios.c:923 test AL, strict byte 010h ; a8 10 ; 0xc13b7 vgabios.c:923
je short 013c2h ; 74 07 ; 0xc13b9 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 jmp short 013d9h ; eb 17 ; 0xc13c0 vgabios.c:925
test AL, strict byte 080h ; a8 80 ; 0xc13c2 test AL, strict byte 080h ; a8 80 ; 0xc13c2
je short 013cdh ; 74 07 ; 0xc13c4 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 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 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 bp ; 5d ; 0xc13d9 vgabios.c:933
pop si ; 5e ; 0xc13da pop si ; 5e ; 0xc13da
pop bx ; 5b ; 0xc13db pop bx ; 5b ; 0xc13db
@ -2680,13 +2680,13 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jne near 01509h ; 0f 85 b0 00 ; 0xc1455 jne near 01509h ; 0f 85 b0 00 ; 0xc1455
mov di, cx ; 89 cf ; 0xc1459 vgabios.c:999 mov di, cx ; 89 cf ; 0xc1459 vgabios.c:999
sal di, 003h ; c1 e7 03 ; 0xc145b 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 mov dx, 003c6h ; ba c6 03 ; 0xc1462
out DX, AL ; ee ; 0xc1465 out DX, AL ; ee ; 0xc1465
xor al, al ; 30 c0 ; 0xc1466 vgabios.c:1002 xor al, al ; 30 c0 ; 0xc1466 vgabios.c:1002
mov dx, 003c8h ; ba c8 03 ; 0xc1468 mov dx, 003c8h ; ba c8 03 ; 0xc1468
out DX, AL ; ee ; 0xc146b 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 cmp cl, 001h ; 80 f9 01 ; 0xc1470
jc short 01483h ; 72 0e ; 0xc1473 jc short 01483h ; 72 0e ; 0xc1473
jbe short 0148eh ; 76 17 ; 0xc1475 jbe short 0148eh ; 76 17 ; 0xc1475
@ -2697,21 +2697,21 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jmp short 014a1h ; eb 1e ; 0xc1481 jmp short 014a1h ; eb 1e ; 0xc1481
test cl, cl ; 84 c9 ; 0xc1483 test cl, cl ; 84 c9 ; 0xc1483
jne short 014a1h ; 75 1a ; 0xc1485 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 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 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 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 movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc14a1 vgabios.c:1020
sal di, 003h ; c1 e7 03 ; 0xc14a5 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 jne short 014beh ; 75 0f ; 0xc14ad
mov es, [bp-01ah] ; 8e 46 e6 ; 0xc14af vgabios.c:1022 mov es, [bp-01ah] ; 8e 46 e6 ; 0xc14af vgabios.c:1022
cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc14b2 cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc14b2
jne short 014beh ; 75 05 ; 0xc14b7 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 xor cx, cx ; 31 c9 ; 0xc14be vgabios.c:1026
jmp short 014d1h ; eb 0f ; 0xc14c0 jmp short 014d1h ; eb 0f ; 0xc14c0
xor al, al ; 30 c0 ; 0xc14c2 vgabios.c:1033 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 jnc short 014fch ; 73 2b ; 0xc14cf
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc14d1 movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc14d1
sal di, 003h ; c1 e7 03 ; 0xc14d5 sal di, 003h ; c1 e7 03 ; 0xc14d5
movzx di, byte [di+047b2h] ; 0f b6 bd b2 47 ; 0xc14d8 movzx di, byte [di+047b3h] ; 0f b6 bd b3 47 ; 0xc14d8
movzx di, byte [di+0483bh] ; 0f b6 bd 3b 48 ; 0xc14dd movzx di, byte [di+0483ch] ; 0f b6 bd 3c 48 ; 0xc14dd
cmp cx, di ; 39 f9 ; 0xc14e2 cmp cx, di ; 39 f9 ; 0xc14e2
jnbe short 014c2h ; 77 dc ; 0xc14e4 jnbe short 014c2h ; 77 dc ; 0xc14e4
imul di, cx, strict byte 00003h ; 6b f9 03 ; 0xc14e6 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 jmp short 015bbh ; eb e3 ; 0xc15d6
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc15d8 vgabios.c:1081 movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc15d8 vgabios.c:1081
sal di, 003h ; c1 e7 03 ; 0xc15dc 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 jne short 015ebh ; 75 05 ; 0xc15e4
mov cx, 003b4h ; b9 b4 03 ; 0xc15e6 mov cx, 003b4h ; b9 b4 03 ; 0xc15e6
jmp short 015eeh ; eb 03 ; 0xc15e9 jmp short 015eeh ; eb 03 ; 0xc15e9
@ -2875,9 +2875,9 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jne short 01692h ; 75 5c ; 0xc1634 jne short 01692h ; 75 5c ; 0xc1634
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc1636 vgabios.c:1100 movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc1636 vgabios.c:1100
sal di, 003h ; c1 e7 03 ; 0xc163a 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 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 cx, 04000h ; b9 00 40 ; 0xc1648
mov ax, 00720h ; b8 20 07 ; 0xc164b mov ax, 00720h ; b8 20 07 ; 0xc164b
xor di, di ; 31 ff ; 0xc164e 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 jmp short 01692h ; eb 3c ; 0xc1654 vgabios.c:1104
cmp byte [bp-00eh], 00dh ; 80 7e f2 0d ; 0xc1656 vgabios.c:1106 cmp byte [bp-00eh], 00dh ; 80 7e f2 0d ; 0xc1656 vgabios.c:1106
jnc short 0166dh ; 73 11 ; 0xc165a 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 mov cx, 04000h ; b9 00 40 ; 0xc1660
xor ax, ax ; 31 c0 ; 0xc1663 xor ax, ax ; 31 c0 ; 0xc1663
xor di, di ; 31 ff ; 0xc1665 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 word [bp-01eh], ax ; 89 46 e2 ; 0xc1679
mov AL, strict byte 00fh ; b0 0f ; 0xc167c vgabios.c:1114 mov AL, strict byte 00fh ; b0 0f ; 0xc167c vgabios.c:1114
out DX, AL ; ee ; 0xc167e 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 mov cx, 08000h ; b9 00 80 ; 0xc1683
xor ax, ax ; 31 c0 ; 0xc1686 xor ax, ax ; 31 c0 ; 0xc1686
xor di, di ; 31 ff ; 0xc1688 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 cmp AL, strict byte 007h ; 3c 07 ; 0xc1705
jnbe short 0172fh ; 77 26 ; 0xc1707 jnbe short 0172fh ; 77 26 ; 0xc1707
movzx di, al ; 0f b6 f8 ; 0xc1709 vgabios.c:1136 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 di, strict word 00065h ; bf 65 00 ; 0xc1710 vgabios.c:52
mov byte [es:di], al ; 26 88 05 ; 0xc1713 mov byte [es:di], al ; 26 88 05 ; 0xc1713
cmp byte [bp-00eh], 006h ; 80 7e f2 06 ; 0xc1716 vgabios.c:1137 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 mov byte [es:di], dl ; 26 88 15 ; 0xc172c
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc172f vgabios.c:1141 movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc172f vgabios.c:1141
sal di, 003h ; c1 e7 03 ; 0xc1733 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 jne short 01746h ; 75 09 ; 0xc173b
mov dx, strict word 00007h ; ba 07 00 ; 0xc173d vgabios.c:1143 mov dx, strict word 00007h ; ba 07 00 ; 0xc173d vgabios.c:1143
mov ax, strict word 00006h ; b8 06 00 ; 0xc1740 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 call 012cbh ; e8 6c fb ; 0xc175c
movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc175f vgabios.c:1155 movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc175f vgabios.c:1155
sal di, 003h ; c1 e7 03 ; 0xc1763 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 jne near 01850h ; 0f 85 e1 00 ; 0xc176b
mov es, [bp-014h] ; 8e 46 ec ; 0xc176f vgabios.c:1157 mov es, [bp-014h] ; 8e 46 ec ; 0xc176f vgabios.c:1157
mov di, word [es:bx+008h] ; 26 8b 7f 08 ; 0xc1772 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 ax ; 50 ; 0xc1794
push dword 000000000h ; 66 6a 00 ; 0xc1795 push dword 000000000h ; 66 6a 00 ; 0xc1795
mov cx, 00100h ; b9 00 01 ; 0xc1798 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 mov dx, 0c000h ; ba 00 c0 ; 0xc179e
xor ax, ax ; 31 c0 ; 0xc17a1 xor ax, ax ; 31 c0 ; 0xc17a1
call 02c0ah ; e8 64 14 ; 0xc17a3 call 02c0ah ; e8 64 14 ; 0xc17a3
@ -3010,7 +3010,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
push ax ; 50 ; 0xc17aa push ax ; 50 ; 0xc17aa
push dword 000000000h ; 66 6a 00 ; 0xc17ab push dword 000000000h ; 66 6a 00 ; 0xc17ab
mov cx, 00100h ; b9 00 01 ; 0xc17ae 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 mov dx, 0c000h ; ba 00 c0 ; 0xc17b4
xor al, al ; 30 c0 ; 0xc17b7 xor al, al ; 30 c0 ; 0xc17b7
call 02c0ah ; e8 4e 14 ; 0xc17b9 call 02c0ah ; e8 4e 14 ; 0xc17b9
@ -3018,7 +3018,7 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
jne short 017f4h ; 75 32 ; 0xc17c0 jne short 017f4h ; 75 32 ; 0xc17c0
mov cx, strict word 0000eh ; b9 0e 00 ; 0xc17c2 vgabios.c:1166 mov cx, strict word 0000eh ; b9 0e 00 ; 0xc17c2 vgabios.c:1166
xor bx, bx ; 31 db ; 0xc17c5 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 mov ax, 0c000h ; b8 00 c0 ; 0xc17ca
call 02b95h ; e8 c5 13 ; 0xc17cd call 02b95h ; e8 c5 13 ; 0xc17cd
jmp short 017f4h ; eb 22 ; 0xc17d0 vgabios.c:1167 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 ax ; 50 ; 0xc17d4
push dword 000000000h ; 66 6a 00 ; 0xc17d5 push dword 000000000h ; 66 6a 00 ; 0xc17d5
mov cx, 00100h ; b9 00 01 ; 0xc17d8 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 mov dx, 0c000h ; ba 00 c0 ; 0xc17de
xor al, al ; 30 c0 ; 0xc17e1 xor al, al ; 30 c0 ; 0xc17e1
call 02c0ah ; e8 24 14 ; 0xc17e3 call 02c0ah ; e8 24 14 ; 0xc17e3
mov cx, strict word 00010h ; b9 10 00 ; 0xc17e6 vgabios.c:1170 mov cx, strict word 00010h ; b9 10 00 ; 0xc17e6 vgabios.c:1170
xor bx, bx ; 31 db ; 0xc17e9 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 mov ax, 0c000h ; b8 00 c0 ; 0xc17ee
call 02b95h ; e8 a1 13 ; 0xc17f1 call 02b95h ; e8 a1 13 ; 0xc17f1
cmp word [bp-012h], strict byte 00000h ; 83 7e ee 00 ; 0xc17f4 vgabios.c:1172 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 AL, strict byte 003h ; b0 03 ; 0xc184a
mov AH, strict byte 011h ; b4 11 ; 0xc184c mov AH, strict byte 011h ; b4 11 ; 0xc184c
int 06dh ; cd 6d ; 0xc184e 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 cx, ds ; 8c d9 ; 0xc1853
mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1855 mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1855
call 009f0h ; e8 95 f1 ; 0xc1858 call 009f0h ; e8 95 f1 ; 0xc1858
@ -3082,14 +3082,14 @@ biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
je short 0187bh ; 74 11 ; 0xc1868 je short 0187bh ; 74 11 ; 0xc1868
cmp AL, strict byte 008h ; 3c 08 ; 0xc186a cmp AL, strict byte 008h ; 3c 08 ; 0xc186a
jne short 01885h ; 75 17 ; 0xc186c 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 cx, ds ; 8c d9 ; 0xc1871
mov ax, strict word 00043h ; b8 43 00 ; 0xc1873 mov ax, strict word 00043h ; b8 43 00 ; 0xc1873
call 009f0h ; e8 77 f1 ; 0xc1876 call 009f0h ; e8 77 f1 ; 0xc1876
jmp short 01885h ; eb 0a ; 0xc1879 vgabios.c:1204 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 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 jmp short 01871h ; eb ec ; 0xc1883
lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1885 vgabios.c:1212 lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1885 vgabios.c:1212
pop di ; 5f ; 0xc1888 pop di ; 5f ; 0xc1888
@ -3485,7 +3485,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
mov word [bp-016h], ax ; 89 46 ea ; 0xc1c06 mov word [bp-016h], ax ; 89 46 ea ; 0xc1c06
mov ax, word [bp-014h] ; 8b 46 ec ; 0xc1c09 mov ax, word [bp-014h] ; 8b 46 ec ; 0xc1c09
imul ax, cx ; 0f af c1 ; 0xc1c0c 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 jne near 01db3h ; 0f 85 9b 01 ; 0xc1c14
mov cx, ax ; 89 c1 ; 0xc1c18 vgabios.c:1345 mov cx, ax ; 89 c1 ; 0xc1c18 vgabios.c:1345
add cx, ax ; 01 c1 ; 0xc1c1a 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 movzx dx, byte [bp-012h] ; 0f b6 56 ee ; 0xc1c4d vgabios.c:1352
sal dx, 008h ; c1 e2 08 ; 0xc1c51 sal dx, 008h ; c1 e2 08 ; 0xc1c51
add dx, strict byte 00020h ; 83 c2 20 ; 0xc1c54 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 cx, ax ; 89 c1 ; 0xc1c5b
mov ax, dx ; 89 d0 ; 0xc1c5d mov ax, dx ; 89 d0 ; 0xc1c5d
mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1c5f mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1c5f
@ -3543,7 +3543,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add di, dx ; 01 d7 ; 0xc1cb6 add di, dx ; 01 d7 ; 0xc1cb6
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cb8 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cb8
sal bx, 003h ; c1 e3 03 ; 0xc1cbc 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 jcxz 01cc7h ; e3 02 ; 0xc1cc3
rep stosw ; f3 ab ; 0xc1cc5 rep stosw ; f3 ab ; 0xc1cc5
jmp short 01d02h ; eb 39 ; 0xc1cc7 vgabios.c:1361 jmp short 01d02h ; eb 39 ; 0xc1cc7 vgabios.c:1361
@ -3555,7 +3555,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add si, si ; 01 f6 ; 0xc1cd9 add si, si ; 01 f6 ; 0xc1cd9
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cdb movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cdb
sal bx, 003h ; c1 e3 03 ; 0xc1cdf 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 mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1ce6
imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1ce9 imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1ce9
mov di, dx ; 89 d7 ; 0xc1ced mov di, dx ; 89 d7 ; 0xc1ced
@ -3596,7 +3596,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add di, dx ; 01 d7 ; 0xc1d4f add di, dx ; 01 d7 ; 0xc1d4f
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d51 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d51
sal bx, 003h ; c1 e3 03 ; 0xc1d55 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 jcxz 01d60h ; e3 02 ; 0xc1d5c
rep stosw ; f3 ab ; 0xc1d5e rep stosw ; f3 ab ; 0xc1d5e
jmp short 01da2h ; eb 40 ; 0xc1d60 vgabios.c:1370 jmp short 01da2h ; eb 40 ; 0xc1d60 vgabios.c:1370
@ -3610,7 +3610,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
add si, si ; 01 f6 ; 0xc1d79 add si, si ; 01 f6 ; 0xc1d79
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d7b movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d7b
sal bx, 003h ; c1 e3 03 ; 0xc1d7f 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 mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1d86
imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1d89 imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1d89
add dx, bx ; 01 da ; 0xc1d8d add dx, bx ; 01 da ; 0xc1d8d
@ -3629,11 +3629,11 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
jc near 0217ch ; 0f 82 cf 03 ; 0xc1da9 jc near 0217ch ; 0f 82 cf 03 ; 0xc1da9
dec word [bp-01ah] ; ff 4e e6 ; 0xc1dad vgabios.c:1373 dec word [bp-01ah] ; ff 4e e6 ; 0xc1dad vgabios.c:1373
jmp near 01d0fh ; e9 5c ff ; 0xc1db0 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 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 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 cmp dl, 003h ; 80 fa 03 ; 0xc1dc6
jc short 01ddch ; 72 11 ; 0xc1dc9 jc short 01ddch ; 72 11 ; 0xc1dc9
jbe short 01de6h ; 76 19 ; 0xc1dcb 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 ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1e22
movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1e26 movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1e26
sal bx, 003h ; c1 e3 03 ; 0xc1e2a 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 xor di, di ; 31 ff ; 0xc1e31
jcxz 01e37h ; e3 02 ; 0xc1e33 jcxz 01e37h ; e3 02 ; 0xc1e33
rep stosb ; f3 aa ; 0xc1e35 rep stosb ; f3 aa ; 0xc1e35
@ -3752,7 +3752,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
jc near 0217ch ; 0f 82 5c 02 ; 0xc1f1c jc near 0217ch ; 0f 82 5c 02 ; 0xc1f1c
dec word [bp-01ah] ; ff 4e e6 ; 0xc1f20 vgabios.c:1409 dec word [bp-01ah] ; ff 4e e6 ; 0xc1f20 vgabios.c:1409
jmp short 01eb4h ; eb 8f ; 0xc1f23 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 cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1f29 vgabios.c:1415
jne short 01f6ah ; 75 3b ; 0xc1f2d jne short 01f6ah ; 75 3b ; 0xc1f2d
cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1f2f 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 movzx cx, dl ; 0f b6 ca ; 0xc1f53
imul cx, ax ; 0f af c8 ; 0xc1f56 imul cx, ax ; 0f af c8 ; 0xc1f56
movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1f59 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 xor di, di ; 31 ff ; 0xc1f61
jcxz 01f67h ; e3 02 ; 0xc1f63 jcxz 01f67h ; e3 02 ; 0xc1f63
rep stosb ; f3 aa ; 0xc1f65 rep stosb ; f3 aa ; 0xc1f65
@ -3871,7 +3871,7 @@ biosfn_scroll: ; 0xc1b5d LB 0x628
imul cx, dx ; 0f af ca ; 0xc2088 imul cx, dx ; 0f af ca ; 0xc2088
sal cx, 003h ; c1 e1 03 ; 0xc208b sal cx, 003h ; c1 e1 03 ; 0xc208b
movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc208e 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 xor di, di ; 31 ff ; 0xc2096
jcxz 0209ch ; e3 02 ; 0xc2098 jcxz 0209ch ; e3 02 ; 0xc2098
rep stosb ; f3 aa ; 0xc209a rep stosb ; f3 aa ; 0xc209a
@ -4061,7 +4061,7 @@ write_gfx_char_cga: ; 0xc2284 LB 0xdd
push si ; 56 ; 0xc2284 vgabios.c:1534 push si ; 56 ; 0xc2284 vgabios.c:1534
push di ; 57 ; 0xc2285 push di ; 57 ; 0xc2285
enter 00006h, 000h ; c8 06 00 00 ; 0xc2286 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 xor bh, bh ; 30 ff ; 0xc228d vgabios.c:1542
movzx si, byte [bp+00ah] ; 0f b6 76 0a ; 0xc228f movzx si, byte [bp+00ah] ; 0f b6 76 0a ; 0xc228f
imul si, bx ; 0f af f3 ; 0xc2293 imul si, bx ; 0f af f3 ; 0xc2293
@ -4154,7 +4154,7 @@ write_gfx_char_lin: ; 0xc2361 LB 0x85
push di ; 57 ; 0xc2362 push di ; 57 ; 0xc2362
enter 00006h, 000h ; c8 06 00 00 ; 0xc2363 enter 00006h, 000h ; c8 06 00 00 ; 0xc2363
mov dh, dl ; 88 d6 ; 0xc2367 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 si, cl ; 0f b6 f1 ; 0xc236e vgabios.c:1606
movzx cx, byte [bp+008h] ; 0f b6 4e 08 ; 0xc2371 movzx cx, byte [bp+008h] ; 0f b6 4e 08 ; 0xc2371
imul cx, si ; 0f af ce ; 0xc2375 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 movzx bx, cl ; 0f b6 d9 ; 0xc244b vgabios.c:1645
mov di, bx ; 89 df ; 0xc244e mov di, bx ; 89 df ; 0xc244e
sal di, 003h ; c1 e7 03 ; 0xc2450 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 jne short 024a0h ; 75 46 ; 0xc2458
mov bx, word [bp-018h] ; 8b 5e e8 ; 0xc245a vgabios.c:1648 mov bx, word [bp-018h] ; 8b 5e e8 ; 0xc245a vgabios.c:1648
imul bx, ax ; 0f af d8 ; 0xc245d imul bx, ax ; 0f af d8 ; 0xc245d
@ -4272,24 +4272,24 @@ biosfn_write_char_attr: ; 0xc23e6 LB 0x165
add ax, bx ; 01 d8 ; 0xc2489 add ax, bx ; 01 d8 ; 0xc2489
mov word [bp-01ah], ax ; 89 46 e6 ; 0xc248b mov word [bp-01ah], ax ; 89 46 e6 ; 0xc248b
mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc248e vgabios.c:1651 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 cx, si ; 89 f1 ; 0xc2495
mov di, dx ; 89 d7 ; 0xc2497 mov di, dx ; 89 d7 ; 0xc2497
jcxz 0249dh ; e3 02 ; 0xc2499 jcxz 0249dh ; e3 02 ; 0xc2499
rep stosw ; f3 ab ; 0xc249b rep stosw ; f3 ab ; 0xc249b
jmp near 02544h ; e9 a4 00 ; 0xc249d vgabios.c:1653 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 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 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 mov byte [bp-00ch], al ; 88 46 f4 ; 0xc24b3
dec si ; 4e ; 0xc24b6 vgabios.c:1658 dec si ; 4e ; 0xc24b6 vgabios.c:1658
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc24b7 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc24b7
je near 02544h ; 0f 84 86 00 ; 0xc24ba je near 02544h ; 0f 84 86 00 ; 0xc24ba
movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc24be vgabios.c:1660 movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc24be vgabios.c:1660
sal bx, 003h ; c1 e3 03 ; 0xc24c2 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 cmp AL, strict byte 003h ; 3c 03 ; 0xc24c9
jc short 024d9h ; 72 0c ; 0xc24cb jc short 024d9h ; 72 0c ; 0xc24cb
jbe short 024dfh ; 76 10 ; 0xc24cd 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 xor ch, ch ; 30 ed ; 0xc25af vgabios.c:1703
mov bx, cx ; 89 cb ; 0xc25b1 mov bx, cx ; 89 cb ; 0xc25b1
sal bx, 003h ; c1 e3 03 ; 0xc25b3 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 jne short 025fah ; 75 3d ; 0xc25bb
imul di, ax ; 0f af f8 ; 0xc25bd vgabios.c:1706 imul di, ax ; 0f af f8 ; 0xc25bd vgabios.c:1706
add di, di ; 01 ff ; 0xc25c0 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 je near 026a6h ; 0f 84 c1 00 ; 0xc25e1
movzx di, byte [bp-012h] ; 0f b6 7e ee ; 0xc25e5 vgabios.c:1709 movzx di, byte [bp-012h] ; 0f b6 7e ee ; 0xc25e5 vgabios.c:1709
sal di, 003h ; c1 e7 03 ; 0xc25e9 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 al, byte [bp-008h] ; 8a 46 f8 ; 0xc25f0
mov byte [es:bx], al ; 26 88 07 ; 0xc25f3 mov byte [es:bx], al ; 26 88 07 ; 0xc25f3
inc bx ; 43 ; 0xc25f6 vgabios.c:1710 inc bx ; 43 ; 0xc25f6 vgabios.c:1710
inc bx ; 43 ; 0xc25f7 inc bx ; 43 ; 0xc25f7
jmp short 025ddh ; eb e3 ; 0xc25f8 vgabios.c:1711 jmp short 025ddh ; eb e3 ; 0xc25f8 vgabios.c:1711
mov di, cx ; 89 cf ; 0xc25fa vgabios.c:1716 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 mov di, ax ; 89 c7 ; 0xc2601
sal di, 006h ; c1 e7 06 ; 0xc2603 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 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 mov byte [bp-014h], al ; 88 46 ec ; 0xc2611
dec si ; 4e ; 0xc2614 vgabios.c:1718 dec si ; 4e ; 0xc2614 vgabios.c:1718
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2615 cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2615
je near 026a6h ; 0f 84 8a 00 ; 0xc2618 je near 026a6h ; 0f 84 8a 00 ; 0xc2618
movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc261c vgabios.c:1720 movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc261c vgabios.c:1720
sal bx, 003h ; c1 e3 03 ; 0xc2620 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 cmp bl, 003h ; 80 fb 03 ; 0xc2627
jc short 0263ah ; 72 0e ; 0xc262a jc short 0263ah ; 72 0e ; 0xc262a
jbe short 02641h ; 76 13 ; 0xc262c jbe short 02641h ; 76 13 ; 0xc262c
@ -4490,9 +4490,9 @@ biosfn_write_pixel: ; 0xc26ad LB 0x165
je near 027edh ; 0f 84 1a 01 ; 0xc26cf je near 027edh ; 0f 84 1a 01 ; 0xc26cf
movzx bx, al ; 0f b6 d8 ; 0xc26d3 vgabios.c:1753 movzx bx, al ; 0f b6 d8 ; 0xc26d3 vgabios.c:1753
sal bx, 003h ; c1 e3 03 ; 0xc26d6 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 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 cmp AL, strict byte 003h ; 3c 03 ; 0xc26e6
jc short 026f9h ; 72 0f ; 0xc26e8 jc short 026f9h ; 72 0f ; 0xc26e8
jbe short 02700h ; 76 14 ; 0xc26ea 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 mov si, cx ; 89 ce ; 0xc276f vgabios.c:1775
shr si, 1 ; d1 ee ; 0xc2771 shr si, 1 ; d1 ee ; 0xc2771
imul si, si, strict byte 00050h ; 6b f6 50 ; 0xc2773 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 jne short 02783h ; 75 07 ; 0xc277a
mov bx, dx ; 89 d3 ; 0xc277c vgabios.c:1777 mov bx, dx ; 89 d3 ; 0xc277c vgabios.c:1777
shr bx, 002h ; c1 eb 02 ; 0xc277e 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 mov al, byte [es:bx] ; 26 8a 07 ; 0xc2797
movzx si, ah ; 0f b6 f4 ; 0xc279a vgabios.c:1785 movzx si, ah ; 0f b6 f4 ; 0xc279a vgabios.c:1785
sal si, 003h ; c1 e6 03 ; 0xc279d 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 jne short 027beh ; 75 17 ; 0xc27a5
mov ah, dl ; 88 d4 ; 0xc27a7 vgabios.c:1787 mov ah, dl ; 88 d4 ; 0xc27a7 vgabios.c:1787
and ah, 003h ; 80 e4 03 ; 0xc27a9 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 movzx si, byte [bp-00ch] ; 0f b6 76 f4 ; 0xc28be vgabios.c:1862
mov bx, si ; 89 f3 ; 0xc28c2 mov bx, si ; 89 f3 ; 0xc28c2
sal bx, 003h ; c1 e3 03 ; 0xc28c4 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 jne short 02911h ; 75 43 ; 0xc28cc
mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc28ce vgabios.c:1865 mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc28ce vgabios.c:1865
imul ax, word [bp-00eh] ; 0f af 46 f2 ; 0xc28d1 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, dx ; 01 d0 ; 0xc28ef
add ax, ax ; 01 c0 ; 0xc28f1 add ax, ax ; 01 c0 ; 0xc28f1
add si, ax ; 01 c6 ; 0xc28f3 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 mov byte [es:si], ch ; 26 88 2c ; 0xc28f9
cmp cl, 003h ; 80 f9 03 ; 0xc28fc vgabios.c:1870 cmp cl, 003h ; 80 f9 03 ; 0xc28fc vgabios.c:1870
jne near 0299fh ; 0f 85 9c 00 ; 0xc28ff jne near 0299fh ; 0f 85 9c 00 ; 0xc28ff
inc si ; 46 ; 0xc2903 vgabios.c:1871 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 al, byte [bp-008h] ; 8a 46 f8 ; 0xc2908
mov byte [es:si], al ; 26 88 04 ; 0xc290b mov byte [es:si], al ; 26 88 04 ; 0xc290b
jmp near 0299fh ; e9 8e 00 ; 0xc290e vgabios.c:1873 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 sal si, 006h ; c1 e6 06 ; 0xc2916
mov ah, byte [si+04841h] ; 8a a4 41 48 ; 0xc2919 mov ah, byte [si+04842h] ; 8a a4 42 48 ; 0xc2919
mov dl, byte [bx+047aeh] ; 8a 97 ae 47 ; 0xc291d vgabios.c:1877 mov dl, byte [bx+047afh] ; 8a 97 af 47 ; 0xc291d vgabios.c:1877
mov al, byte [bx+047adh] ; 8a 87 ad 47 ; 0xc2921 vgabios.c:1878 mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2921 vgabios.c:1878
cmp AL, strict byte 003h ; 3c 03 ; 0xc2925 cmp AL, strict byte 003h ; 3c 03 ; 0xc2925
jc short 02935h ; 72 0c ; 0xc2927 jc short 02935h ; 72 0c ; 0xc2927
jbe short 0293bh ; 76 10 ; 0xc2929 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 mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc29c9
db 0feh, 0cch db 0feh, 0cch
; dec ah ; fe cc ; 0xc29cc ; 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 jne short 02a1dh ; 75 48 ; 0xc29d3
mov dx, word [bp-010h] ; 8b 56 f0 ; 0xc29d5 vgabios.c:1910 mov dx, word [bp-010h] ; 8b 56 f0 ; 0xc29d5 vgabios.c:1910
imul dx, word [bp-00eh] ; 0f af 56 f2 ; 0xc29d8 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 dx, dx ; 01 d2 ; 0xc29fa
add si, dx ; 01 d6 ; 0xc29fc add si, dx ; 01 d6 ; 0xc29fc
inc si ; 46 ; 0xc29fe vgabios.c:1911 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 mov bl, byte [es:si] ; 26 8a 1c ; 0xc2a03
push strict byte 00001h ; 6a 01 ; 0xc2a06 vgabios.c:1912 push strict byte 00001h ; 6a 01 ; 0xc2a06 vgabios.c:1912
movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc2a08 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 jbe short 02cbch ; 76 02 ; 0xc2cb8
mov DL, strict byte 002h ; b2 02 ; 0xc2cba vgabios.c:2033 mov DL, strict byte 002h ; b2 02 ; 0xc2cba vgabios.c:2033
movzx bx, dl ; 0f b6 da ; 0xc2cbc vgabios.c:2034 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 byte [bp+004h], al ; 88 46 04 ; 0xc2cc3
mov bx, 00085h ; bb 85 00 ; 0xc2cc6 vgabios.c:62 mov bx, 00085h ; bb 85 00 ; 0xc2cc6 vgabios.c:62
mov ax, strict word 00040h ; b8 40 00 ; 0xc2cc9 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 push cx ; 51 ; 0xc2d09
movzx cx, al ; 0f b6 c8 ; 0xc2d0a movzx cx, al ; 0f b6 c8 ; 0xc2d0a
mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2d0d 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 mov dx, ds ; 8c da ; 0xc2d13
call 02c9ch ; e8 84 ff ; 0xc2d15 call 02c9ch ; e8 84 ff ; 0xc2d15
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d18 vgabios.c:2054 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 push cx ; 51 ; 0xc2d27
movzx cx, al ; 0f b6 c8 ; 0xc2d28 movzx cx, al ; 0f b6 c8 ; 0xc2d28
mov bx, strict word 00008h ; bb 08 00 ; 0xc2d2b 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 mov dx, ds ; 8c da ; 0xc2d31
call 02c9ch ; e8 66 ff ; 0xc2d33 call 02c9ch ; e8 66 ff ; 0xc2d33
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d36 vgabios.c:2058 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 push cx ; 51 ; 0xc2d45
movzx cx, al ; 0f b6 c8 ; 0xc2d46 movzx cx, al ; 0f b6 c8 ; 0xc2d46
mov bx, strict word 00010h ; bb 10 00 ; 0xc2d49 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 mov dx, ds ; 8c da ; 0xc2d4f
call 02c9ch ; e8 48 ff ; 0xc2d51 call 02c9ch ; e8 48 ff ; 0xc2d51
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d54 vgabios.c:2062 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 word [bp-00ah], ax ; 89 46 f6 ; 0xc2e4f vgabios.c:58
mov ax, ds ; 8c d8 ; 0xc2e52 vgabios.c:2150 mov ax, ds ; 8c d8 ; 0xc2e52 vgabios.c:2150
mov es, dx ; 8e c2 ; 0xc2e54 vgabios.c:72 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 mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc2e5b
lea di, [bx+004h] ; 8d 7f 04 ; 0xc2e5f vgabios.c:2155 lea di, [bx+004h] ; 8d 7f 04 ; 0xc2e5f vgabios.c:2155
mov cx, strict word 0001eh ; b9 1e 00 ; 0xc2e62 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 jnbe short 0360eh ; 77 0e ; 0xc35fe
movzx bx, al ; 0f b6 d8 ; 0xc3600 movzx bx, al ; 0f b6 d8 ; 0xc3600
sal bx, 003h ; c1 e3 03 ; 0xc3603 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 jne short 035fah ; 75 ee ; 0xc360a
mov ah, al ; 88 c4 ; 0xc360c mov ah, al ; 88 c4 ; 0xc360c
mov al, ah ; 88 e0 ; 0xc360e vgabios.c:2438 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 push strict byte 00000h ; 6a 00 ; 0xc389a
movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc389c movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc389c
mov cx, 00100h ; b9 00 01 ; 0xc38a0 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 mov dx, 0c000h ; ba 00 c0 ; 0xc38a6
call 02c0ah ; e8 5e f3 ; 0xc38a9 call 02c0ah ; e8 5e f3 ; 0xc38a9
jmp near 03b21h ; e9 72 02 ; 0xc38ac jmp near 03b21h ; e9 72 02 ; 0xc38ac
@ -6459,7 +6459,7 @@ int10_func: ; 0xc36ac LB 0x47c
push strict byte 00000h ; 6a 00 ; 0xc38b6 push strict byte 00000h ; 6a 00 ; 0xc38b6
movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38b8 movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38b8
mov cx, 00100h ; b9 00 01 ; 0xc38bc 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 jmp short 038a6h ; eb e2 ; 0xc38c2
mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc38c4 vgabios.c:2629 mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc38c4 vgabios.c:2629
xor ah, ah ; 30 e4 ; 0xc38c7 xor ah, ah ; 30 e4 ; 0xc38c7
@ -6471,7 +6471,7 @@ int10_func: ; 0xc36ac LB 0x47c
push strict byte 00000h ; 6a 00 ; 0xc38d6 push strict byte 00000h ; 6a 00 ; 0xc38d6
movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38d8 movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38d8
mov cx, 00100h ; b9 00 01 ; 0xc38dc 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 jmp short 038a6h ; eb c2 ; 0xc38e2
mov dx, word [bp+008h] ; 8b 56 08 ; 0xc38e4 vgabios.c:2636 mov dx, word [bp+008h] ; 8b 56 08 ; 0xc38e4 vgabios.c:2636
mov ax, word [bp+016h] ; 8b 46 16 ; 0xc38e7 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 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 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+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 mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3d71
db 066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 000h 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 ; 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 cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3d9c vbe.c:356
je short 03dc6h ; 74 24 ; 0xc3da0 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+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 [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 [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 [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc3dc2
mov dx, cx ; 89 ca ; 0xc3dc6 vbe.c:369 mov dx, cx ; 89 ca ; 0xc3dc6 vbe.c:369
add dx, strict byte 0001bh ; 83 c2 1b ; 0xc3dc8 add dx, strict byte 0001bh ; 83 c2 1b ; 0xc3dc8
@ -7732,12 +7732,12 @@ vesa_pm_end: ; 0xc4754 LB 0x1
; Padding 0x2b bytes at 0xc4755 ; Padding 0x2b bytes at 0xc4755
times 43 db 0 times 43 db 0
section _DATA progbits vstart=0x4780 align=1 ; size=0x3742 class=DATA group=DGROUP section _DATA progbits vstart=0x4780 align=1 ; size=0x3745 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3742 -> off=0x0 cb=000000000000002b uValue=00000000000c0000 '_msg_vga_init' ; disGetNextSymbol 0xc4780 LB 0x3745 -> off=0x0 cb=000000000000002c uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2b _msg_vga_init: ; 0xc4780 LB 0x2c
db 'Oracle VirtualBox Version 7.1.8 VGA BIOS', 00dh, 00ah, 000h db 'Oracle VirtualBox Version 7.1.10 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ab LB 0x3717 -> off=0x0 cb=0000000000000080 uValue=00000000000c002b 'vga_modes' ; disGetNextSymbol 0xc47ac LB 0x3719 -> off=0x0 cb=0000000000000080 uValue=00000000000c002c 'vga_modes'
vga_modes: ; 0xc47ab LB 0x80 vga_modes: ; 0xc47ac LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h 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 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 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 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 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 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' ; disGetNextSymbol 0xc482c LB 0x3699 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ac 'line_to_vpti'
line_to_vpti: ; 0xc482b LB 0x10 line_to_vpti: ; 0xc482c LB 0x10
db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh 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' ; disGetNextSymbol 0xc483c LB 0x3689 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bc 'dac_regs'
dac_regs: ; 0xc483b LB 0x4 dac_regs: ; 0xc483c LB 0x4
dd 0ff3f3f3fh dd 0ff3f3f3fh
; disGetNextSymbol 0xc483f LB 0x3683 -> off=0x0 cb=0000000000000780 uValue=00000000000c00bf 'video_param_table' ; disGetNextSymbol 0xc4840 LB 0x3685 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c0 'video_param_table'
video_param_table: ; 0xc483f LB 0x780 video_param_table: ; 0xc4840 LB 0x780
db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h 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 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 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 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 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 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' ; disGetNextSymbol 0xc4fc0 LB 0x2f05 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0840 'palette0'
palette0: ; 0xc4fbf LB 0xc0 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, 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 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 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, 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 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 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' ; disGetNextSymbol 0xc5080 LB 0x2e45 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0900 'palette1'
palette1: ; 0xc507f LB 0xc0 palette1: ; 0xc5080 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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, 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 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, 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, 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 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' ; disGetNextSymbol 0xc5140 LB 0x2d85 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c0 'palette2'
palette2: ; 0xc513f LB 0xc0 palette2: ; 0xc5140 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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 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 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, 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, 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 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' ; disGetNextSymbol 0xc5200 LB 0x2cc5 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a80 'palette3'
palette3: ; 0xc51ff LB 0x300 palette3: ; 0xc5200 LB 0x300
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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 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 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 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 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 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' ; disGetNextSymbol 0xc5500 LB 0x29c5 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d80 'static_functionality'
static_functionality: ; 0xc54ff LB 0x10 static_functionality: ; 0xc5500 LB 0x10
db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h 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' ; disGetNextSymbol 0xc5510 LB 0x29b5 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d90 '_dcc_table'
_dcc_table: ; 0xc550f LB 0x24 _dcc_table: ; 0xc5510 LB 0x24
db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 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, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5533 LB 0x298f -> off=0x0 cb=000000000000001a uValue=00000000000c0db3 '_secondary_save_area' ; disGetNextSymbol 0xc5534 LB 0x2991 -> off=0x0 cb=000000000000001a uValue=00000000000c0db4 '_secondary_save_area'
_secondary_save_area: ; 0xc5533 LB 0x1a _secondary_save_area: ; 0xc5534 LB 0x1a
db 01ah, 000h, 00fh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 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 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' ; disGetNextSymbol 0xc554e LB 0x2977 -> off=0x0 cb=000000000000001c uValue=00000000000c0dce '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554d LB 0x1c _video_save_pointer_table: ; 0xc554e LB 0x1c
db 03fh, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 040h, 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 db 034h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5569 LB 0x2959 -> off=0x0 cb=0000000000000800 uValue=00000000000c0de9 'vgafont8' ; disGetNextSymbol 0xc556a LB 0x295b -> off=0x0 cb=0000000000000800 uValue=00000000000c0dea 'vgafont8'
vgafont8: ; 0xc5569 LB 0x800 vgafont8: ; 0xc556a LB 0x800
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh 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 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 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 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 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 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' ; disGetNextSymbol 0xc5d6a LB 0x215b -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ea 'vgafont14'
vgafont14: ; 0xc5d69 LB 0xe00 vgafont14: ; 0xc5d6a LB 0xe00
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 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh 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 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, 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, 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 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' ; disGetNextSymbol 0xc6b6a LB 0x135b -> off=0x0 cb=0000000000001000 uValue=00000000000c23ea 'vgafont16'
vgafont16: ; 0xc6b69 LB 0x1000 vgafont16: ; 0xc6b6a LB 0x1000
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, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 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 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, 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, 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 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' ; disGetNextSymbol 0xc7b6a LB 0x35b -> off=0x0 cb=000000000000012d uValue=00000000000c33ea 'vgafont14alt'
vgafont14alt: ; 0xc7b69 LB 0x12d vgafont14alt: ; 0xc7b6a LB 0x12d
db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h 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, 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 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, 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 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 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' ; disGetNextSymbol 0xc7c97 LB 0x22e -> off=0x0 cb=0000000000000144 uValue=00000000000c3517 'vgafont16alt'
vgafont16alt: ; 0xc7c96 LB 0x144 vgafont16alt: ; 0xc7c97 LB 0x144
db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h 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, 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 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, 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 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
db 006h, 000h, 000h, 000h db 006h, 000h, 000h, 000h
; disGetNextSymbol 0xc7dda LB 0xe8 -> off=0x0 cb=0000000000000008 uValue=00000000000c365a '_cga_msr' ; disGetNextSymbol 0xc7ddb LB 0xea -> off=0x0 cb=0000000000000008 uValue=00000000000c365b '_cga_msr'
_cga_msr: ; 0xc7dda LB 0x8 _cga_msr: ; 0xc7ddb LB 0x8
db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
; disGetNextSymbol 0xc7de2 LB 0xe0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 'line_to_vpti_200' ; disGetNextSymbol 0xc7de3 LB 0xe2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3663 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de2 LB 0x8 line_to_vpti_200: ; 0xc7de3 LB 0x8
db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7dea LB 0xd8 -> off=0x0 cb=0000000000000008 uValue=00000000000c366a 'line_to_vpti_350' ; disGetNextSymbol 0xc7deb LB 0xda -> off=0x0 cb=0000000000000008 uValue=00000000000c366b 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7dea LB 0x8 line_to_vpti_350: ; 0xc7deb LB 0x8
db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7df2 LB 0xd0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3672 'line_to_vpti_400' ; disGetNextSymbol 0xc7df3 LB 0xd2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3673 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df2 LB 0x8 line_to_vpti_400: ; 0xc7df3 LB 0x8
db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
; disGetNextSymbol 0xc7dfa LB 0xc8 -> off=0x0 cb=0000000000000004 uValue=00000000000c367a 'row_tbl' ; disGetNextSymbol 0xc7dfb LB 0xca -> off=0x0 cb=0000000000000005 uValue=00000000000c367b 'row_tbl'
row_tbl: ; 0xc7dfa LB 0x4 row_tbl: ; 0xc7dfb LB 0x5
dd 02b190e00h db 000h, 00eh, 019h, 02bh, 000h
; disGetNextSymbol 0xc7dfe LB 0xc4 -> off=0x0 cb=0000000000000015 uValue=00000000000c367e '_vbebios_copyright' ; disGetNextSymbol 0xc7e00 LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c3680 '_vbebios_copyright'
_vbebios_copyright: ; 0xc7dfe LB 0x15 _vbebios_copyright: ; 0xc7e00 LB 0x15
db 'VirtualBox VESA BIOS', 000h db 'VirtualBox VESA BIOS', 000h
; disGetNextSymbol 0xc7e13 LB 0xaf -> off=0x0 cb=000000000000001d uValue=00000000000c3693 '_vbebios_vendor_name' ; disGetNextSymbol 0xc7e15 LB 0xb0 -> off=0x0 cb=000000000000001d uValue=00000000000c3695 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e13 LB 0x1d _vbebios_vendor_name: ; 0xc7e15 LB 0x1d
db 'Oracle and/or its affiliates', 000h db 'Oracle and/or its affiliates', 000h
; disGetNextSymbol 0xc7e30 LB 0x92 -> off=0x0 cb=000000000000001e uValue=00000000000c36b0 '_vbebios_product_name' ; disGetNextSymbol 0xc7e32 LB 0x93 -> off=0x0 cb=000000000000001e uValue=00000000000c36b2 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e30 LB 0x1e _vbebios_product_name: ; 0xc7e32 LB 0x1e
db 'Oracle VirtualBox VBE Adapter', 000h db 'Oracle VirtualBox VBE Adapter', 000h
; disGetNextSymbol 0xc7e4e LB 0x74 -> off=0x0 cb=0000000000000020 uValue=00000000000c36ce '_vbebios_product_revision' ; disGetNextSymbol 0xc7e50 LB 0x75 -> off=0x0 cb=0000000000000021 uValue=00000000000c36d0 '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e4e LB 0x20 _vbebios_product_revision: ; 0xc7e50 LB 0x21
db 'Oracle VirtualBox Version 7.1.8', 000h db 'Oracle VirtualBox Version 7.1.10', 000h
; disGetNextSymbol 0xc7e6e LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36ee '_vbebios_info_string' ; disGetNextSymbol 0xc7e71 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f1 '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e6e LB 0x2b _vbebios_info_string: ; 0xc7e71 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h 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' ; disGetNextSymbol 0xc7e9c LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c371c '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e99 LB 0x29 _no_vbebios_info_string: ; 0xc7e9c LB 0x29
db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h 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 section CONST2 progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
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 ; Padding 0x13a bytes at 0xc7ec6
db 06ch, 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h
db 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch
db 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h, 061h
db 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h db 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh, 06fh
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h db 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h
db 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h 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 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, 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 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+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 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 mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5e
pop bp ; 5d ; 0xc0a63 vgabios.c:243 pop bp ; 5d ; 0xc0a63 vgabios.c:243
pop bx ; 5b ; 0xc0a64 pop bx ; 5b ; 0xc0a64
@ -2093,7 +2093,7 @@ vga_read_char_attr: ; 0xc0ded LB 0x147
xor bh, bh ; 30 ff ; 0xc0e5c xor bh, bh ; 30 ff ; 0xc0e5c
mov CL, strict byte 003h ; b1 03 ; 0xc0e5e mov CL, strict byte 003h ; b1 03 ; 0xc0e5e
sal bx, CL ; d3 e3 ; 0xc0e60 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 jne short 00e9fh ; 75 36 ; 0xc0e67
mov ax, di ; 89 f8 ; 0xc0e69 vgabios.c:559 mov ax, di ; 89 f8 ; 0xc0e69 vgabios.c:559
mul dx ; f7 e2 ; 0xc0e6b mul dx ; f7 e2 ; 0xc0e6b
@ -2113,13 +2113,13 @@ vga_read_char_attr: ; 0xc0ded LB 0x147
sal ax, 1 ; d1 e0 ; 0xc0e89 sal ax, 1 ; d1 e0 ; 0xc0e89
mov di, word [bp-010h] ; 8b 7e f0 ; 0xc0e8b mov di, word [bp-010h] ; 8b 7e f0 ; 0xc0e8b
add di, ax ; 01 c7 ; 0xc0e8e 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 mov ax, word [es:di] ; 26 8b 05 ; 0xc0e94
push SS ; 16 ; 0xc0e97 vgabios.c:58 push SS ; 16 ; 0xc0e97 vgabios.c:58
pop ES ; 07 ; 0xc0e98 pop ES ; 07 ; 0xc0e98
mov word [es:si], ax ; 26 89 04 ; 0xc0e99 mov word [es:si], ax ; 26 89 04 ; 0xc0e99
jmp near 00f2bh ; e9 8c 00 ; 0xc0e9c vgabios.c:561 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 cmp bl, 005h ; 80 fb 05 ; 0xc0ea3
je short 00efeh ; 74 56 ; 0xc0ea6 je short 00efeh ; 74 56 ; 0xc0ea6
cmp bl, 002h ; 80 fb 02 ; 0xc0ea8 cmp bl, 002h ; 80 fb 02 ; 0xc0ea8
@ -2227,18 +2227,18 @@ vga_get_font_info: ; 0xc0f44 LB 0x83
retn 00002h ; c2 02 00 ; 0xc0f9d retn 00002h ; c2 02 00 ; 0xc0f9d
mov bx, 0010ch ; bb 0c 01 ; 0xc0fa0 vgabios.c:67 mov bx, 0010ch ; bb 0c 01 ; 0xc0fa0 vgabios.c:67
jmp short 00f5eh ; eb b9 ; 0xc0fa3 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 mov ax, ds ; 8c d8 ; 0xc0fa8
jmp short 00f69h ; eb bd ; 0xc0faa vgabios.c:602 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 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 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 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 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 00fa8h ; eb e3 ; 0xc0fc3
jmp short 00f9ah ; eb d3 ; 0xc0fc5 vgabios.c:622 jmp short 00f9ah ; eb d3 ; 0xc0fc5 vgabios.c:622
; disGetNextSymbol 0xc0fc7 LB 0x359d -> off=0x0 cb=000000000000016d uValue=00000000000c0fc7 'vga_read_pixel' ; 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 xor bh, bh ; 30 ff ; 0xc0ff3
mov CL, strict byte 003h ; b1 03 ; 0xc0ff5 mov CL, strict byte 003h ; b1 03 ; 0xc0ff5
sal bx, CL ; d3 e3 ; 0xc0ff7 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 jne short 01003h ; 75 03 ; 0xc0ffe
jmp near 0112dh ; e9 2a 01 ; 0xc1000 vgabios.c:646 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 cmp ch, cl ; 38 cd ; 0xc1007
jc short 0101ah ; 72 0f ; 0xc1009 jc short 0101ah ; 72 0f ; 0xc1009
jbe short 01022h ; 76 15 ; 0xc100b 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 inc byte [bp-008h] ; fe 46 f8 ; 0xc1087 vgabios.c:661
jmp short 0105eh ; eb d2 ; 0xc108a jmp short 0105eh ; eb d2 ; 0xc108a
jmp near 01125h ; e9 96 00 ; 0xc108c 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 xor ah, ah ; 30 e4 ; 0xc1093
mov cx, strict word 00004h ; b9 04 00 ; 0xc1095 mov cx, strict word 00004h ; b9 04 00 ; 0xc1095
sub cx, ax ; 29 c1 ; 0xc1098 sub cx, ax ; 29 c1 ; 0xc1098
@ -2347,7 +2347,7 @@ vga_read_pixel: ; 0xc0fc7 LB 0x16d
xor bh, bh ; 30 ff ; 0xc10c2 xor bh, bh ; 30 ff ; 0xc10c2
mov CL, strict byte 003h ; b1 03 ; 0xc10c4 mov CL, strict byte 003h ; b1 03 ; 0xc10c4
sal bx, CL ; d3 e3 ; 0xc10c6 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 jne short 010eah ; 75 1b ; 0xc10cd
mov cx, si ; 89 f1 ; 0xc10cf vgabios.c:669 mov cx, si ; 89 f1 ; 0xc10cf vgabios.c:669
xor ch, ch ; 30 ed ; 0xc10d1 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 CL, strict byte 003h ; b1 03 ; 0xc1399
mov si, bx ; 89 de ; 0xc139b mov si, bx ; 89 de ; 0xc139b
sal si, CL ; d3 e6 ; 0xc139d 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 jne short 013e1h ; 75 3b ; 0xc13a4
mov bx, strict word 0004ah ; bb 4a 00 ; 0xc13a6 vgabios.c:57 mov bx, strict word 0004ah ; bb 4a 00 ; 0xc13a6 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc13a9 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 lea ax, [di+001h] ; 8d 45 01 ; 0xc13da
mul bx ; f7 e3 ; 0xc13dd mul bx ; f7 e3 ; 0xc13dd
jmp short 013f2h ; eb 11 ; 0xc13df vgabios.c:860 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 mov CL, strict byte 006h ; b1 06 ; 0xc13e5
sal bx, CL ; d3 e3 ; 0xc13e7 sal bx, CL ; d3 e3 ; 0xc13e7
mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc13e9 mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc13e9
xor ah, ah ; 30 e4 ; 0xc13ec 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 cx, ax ; 89 c1 ; 0xc13f2
mov bx, strict word 00063h ; bb 63 00 ; 0xc13f4 vgabios.c:57 mov bx, strict word 00063h ; bb 63 00 ; 0xc13f4 vgabios.c:57
mov ax, strict word 00040h ; b8 40 00 ; 0xc13f7 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 CL, strict byte 003h ; b1 03 ; 0xc143b
mov si, bx ; 89 de ; 0xc143d mov si, bx ; 89 de ; 0xc143d
sal si, CL ; d3 e6 ; 0xc143f 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 jne short 0146eh ; 75 26 ; 0xc1446
mov si, 00089h ; be 89 00 ; 0xc1448 vgabios.c:47 mov si, 00089h ; be 89 00 ; 0xc1448 vgabios.c:47
mov ax, strict word 00040h ; b8 40 00 ; 0xc144b 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 mov al, byte [es:si] ; 26 8a 04 ; 0xc1450
test AL, strict byte 010h ; a8 10 ; 0xc1453 vgabios.c:923 test AL, strict byte 010h ; a8 10 ; 0xc1453 vgabios.c:923
je short 0145dh ; 74 06 ; 0xc1455 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 jmp short 0146bh ; eb 0e ; 0xc145b vgabios.c:925
test AL, strict byte 080h ; a8 80 ; 0xc145d test AL, strict byte 080h ; a8 80 ; 0xc145d
je short 01467h ; 74 06 ; 0xc145f 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 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 cbw ; 98 ; 0xc146b
jmp short 01474h ; eb 06 ; 0xc146c vgabios.c:929 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 xor ah, ah ; 30 e4 ; 0xc1472
pop bp ; 5d ; 0xc1474 vgabios.c:933 pop bp ; 5d ; 0xc1474 vgabios.c:933
pop si ; 5e ; 0xc1475 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 CL, strict byte 003h ; b1 03 ; 0xc14f6 vgabios.c:999
mov bx, dx ; 89 d3 ; 0xc14f8 mov bx, dx ; 89 d3 ; 0xc14f8
sal bx, CL ; d3 e3 ; 0xc14fa 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 mov dx, 003c6h ; ba c6 03 ; 0xc1500
out DX, AL ; ee ; 0xc1503 out DX, AL ; ee ; 0xc1503
xor al, al ; 30 c0 ; 0xc1504 vgabios.c:1002 xor al, al ; 30 c0 ; 0xc1504 vgabios.c:1002
mov dx, 003c8h ; ba c8 03 ; 0xc1506 mov dx, 003c8h ; ba c8 03 ; 0xc1506
out DX, AL ; ee ; 0xc1509 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 cmp bl, 001h ; 80 fb 01 ; 0xc150e
jc short 01523h ; 72 10 ; 0xc1511 jc short 01523h ; 72 10 ; 0xc1511
jbe short 0152eh ; 76 19 ; 0xc1513 jbe short 0152eh ; 76 19 ; 0xc1513
@ -2894,24 +2894,24 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
jmp near 01953h ; e9 30 04 ; 0xc1520 jmp near 01953h ; e9 30 04 ; 0xc1520
test bl, bl ; 84 db ; 0xc1523 test bl, bl ; 84 db ; 0xc1523
jne short 01544h ; 75 1d ; 0xc1525 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 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 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 short 01544h ; eb 08 ; 0xc153a vgabios.c:1014
jmp near 015b8h ; e9 79 00 ; 0xc153c 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 mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc1544 vgabios.c:1020
xor bh, bh ; 30 ff ; 0xc1547 xor bh, bh ; 30 ff ; 0xc1547
mov CL, strict byte 003h ; b1 03 ; 0xc1549 mov CL, strict byte 003h ; b1 03 ; 0xc1549
sal bx, CL ; d3 e3 ; 0xc154b 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 jne short 01563h ; 75 0f ; 0xc1552
mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1554 vgabios.c:1022 mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1554 vgabios.c:1022
cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc1557 cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc1557
jne short 01563h ; 75 05 ; 0xc155c 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 xor bx, bx ; 31 db ; 0xc1563 vgabios.c:1026
jmp short 01576h ; eb 0f ; 0xc1565 jmp short 01576h ; eb 0f ; 0xc1565
xor al, al ; 30 c0 ; 0xc1567 vgabios.c:1033 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 CL, strict byte 003h ; b1 03 ; 0xc157b
mov di, ax ; 89 c7 ; 0xc157d mov di, ax ; 89 c7 ; 0xc157d
sal di, CL ; d3 e7 ; 0xc157f 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 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 cmp bx, ax ; 39 c3 ; 0xc158b
jnbe short 01567h ; 77 d8 ; 0xc158d jnbe short 01567h ; 77 d8 ; 0xc158d
mov ax, bx ; 89 d8 ; 0xc158f mov ax, bx ; 89 d8 ; 0xc158f
@ -3043,7 +3043,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor bh, bh ; 30 ff ; 0xc1686 xor bh, bh ; 30 ff ; 0xc1686
mov CL, strict byte 003h ; b1 03 ; 0xc1688 mov CL, strict byte 003h ; b1 03 ; 0xc1688
sal bx, CL ; d3 e3 ; 0xc168a 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 jne short 01698h ; 75 05 ; 0xc1691
mov bx, 003b4h ; bb b4 03 ; 0xc1693 mov bx, 003b4h ; bb b4 03 ; 0xc1693
jmp short 0169bh ; eb 03 ; 0xc1696 jmp short 0169bh ; eb 03 ; 0xc1696
@ -3085,9 +3085,9 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
xor bh, bh ; 30 ff ; 0xc16e6 xor bh, bh ; 30 ff ; 0xc16e6
mov CL, strict byte 003h ; b1 03 ; 0xc16e8 mov CL, strict byte 003h ; b1 03 ; 0xc16e8
sal bx, CL ; d3 e3 ; 0xc16ea 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 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 cx, 04000h ; b9 00 40 ; 0xc16f7
mov ax, 00720h ; b8 20 07 ; 0xc16fa mov ax, 00720h ; b8 20 07 ; 0xc16fa
xor di, di ; 31 ff ; 0xc16fd 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 jmp short 01741h ; eb 3c ; 0xc1703 vgabios.c:1104
cmp byte [bp-00ch], 00dh ; 80 7e f4 0d ; 0xc1705 vgabios.c:1106 cmp byte [bp-00ch], 00dh ; 80 7e f4 0d ; 0xc1705 vgabios.c:1106
jnc short 0171ch ; 73 11 ; 0xc1709 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 mov cx, 04000h ; b9 00 40 ; 0xc170f
xor ax, ax ; 31 c0 ; 0xc1712 xor ax, ax ; 31 c0 ; 0xc1712
xor di, di ; 31 ff ; 0xc1714 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 word [bp-022h], ax ; 89 46 de ; 0xc1728
mov AL, strict byte 00fh ; b0 0f ; 0xc172b vgabios.c:1114 mov AL, strict byte 00fh ; b0 0f ; 0xc172b vgabios.c:1114
out DX, AL ; ee ; 0xc172d 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 mov cx, 08000h ; b9 00 80 ; 0xc1732
xor ax, ax ; 31 c0 ; 0xc1735 xor ax, ax ; 31 c0 ; 0xc1735
xor di, di ; 31 ff ; 0xc1737 xor di, di ; 31 ff ; 0xc1737
@ -3165,7 +3165,7 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
jnbe short 017e1h ; 77 27 ; 0xc17b8 jnbe short 017e1h ; 77 27 ; 0xc17b8
mov bl, al ; 88 c3 ; 0xc17ba vgabios.c:1136 mov bl, al ; 88 c3 ; 0xc17ba vgabios.c:1136
xor bh, bh ; 30 ff ; 0xc17bc 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 bx, strict word 00065h ; bb 65 00 ; 0xc17c2 vgabios.c:52
mov byte [es:bx], al ; 26 88 07 ; 0xc17c5 mov byte [es:bx], al ; 26 88 07 ; 0xc17c5
cmp byte [bp-00ch], 006h ; 80 7e f4 06 ; 0xc17c8 vgabios.c:1137 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 xor bh, bh ; 30 ff ; 0xc17e4
mov CL, strict byte 003h ; b1 03 ; 0xc17e6 mov CL, strict byte 003h ; b1 03 ; 0xc17e6
sal bx, CL ; d3 e3 ; 0xc17e8 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 jne short 017fah ; 75 09 ; 0xc17ef
mov dx, strict word 00007h ; ba 07 00 ; 0xc17f1 vgabios.c:1143 mov dx, strict word 00007h ; ba 07 00 ; 0xc17f1 vgabios.c:1143
mov ax, strict word 00006h ; b8 06 00 ; 0xc17f4 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 xor bh, bh ; 30 ff ; 0xc1817
mov CL, strict byte 003h ; b1 03 ; 0xc1819 mov CL, strict byte 003h ; b1 03 ; 0xc1819
sal bx, CL ; d3 e3 ; 0xc181b 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 jne short 01892h ; 75 6e ; 0xc1822
les bx, [bp-014h] ; c4 5e ec ; 0xc1824 vgabios.c:1157 les bx, [bp-014h] ; c4 5e ec ; 0xc1824 vgabios.c:1157
mov bx, word [es:bx+008h] ; 26 8b 5f 08 ; 0xc1827 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 ; 0xc1855
push ax ; 50 ; 0xc1856 push ax ; 50 ; 0xc1856
mov cx, 00100h ; b9 00 01 ; 0xc1857 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 mov dx, 0c000h ; ba 00 c0 ; 0xc185d
call 02e8ch ; e8 29 16 ; 0xc1860 call 02e8ch ; e8 29 16 ; 0xc1860
jmp short 018bah ; eb 55 ; 0xc1863 vgabios.c:1162 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 xor al, al ; 30 c0 ; 0xc186d
push ax ; 50 ; 0xc186f push ax ; 50 ; 0xc186f
mov cx, 00100h ; b9 00 01 ; 0xc1870 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 mov dx, 0c000h ; ba 00 c0 ; 0xc1876
call 02e8ch ; e8 10 16 ; 0xc1879 call 02e8ch ; e8 10 16 ; 0xc1879
cmp byte [bp-00ch], 007h ; 80 7e f4 07 ; 0xc187c vgabios.c:1165 cmp byte [bp-00ch], 007h ; 80 7e f4 07 ; 0xc187c vgabios.c:1165
jne short 018bah ; 75 38 ; 0xc1880 jne short 018bah ; 75 38 ; 0xc1880
mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1882 vgabios.c:1166 mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1882 vgabios.c:1166
xor bx, bx ; 31 db ; 0xc1885 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 mov ax, 0c000h ; b8 00 c0 ; 0xc188a
call 02e14h ; e8 84 15 ; 0xc188d call 02e14h ; e8 84 15 ; 0xc188d
jmp short 018bah ; eb 28 ; 0xc1890 vgabios.c:1167 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 xor al, al ; 30 c0 ; 0xc189d
push ax ; 50 ; 0xc189f push ax ; 50 ; 0xc189f
mov cx, 00100h ; b9 00 01 ; 0xc18a0 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 mov dx, 0c000h ; ba 00 c0 ; 0xc18a6
call 02e8ch ; e8 e0 15 ; 0xc18a9 call 02e8ch ; e8 e0 15 ; 0xc18a9
mov cx, strict word 00010h ; b9 10 00 ; 0xc18ac vgabios.c:1170 mov cx, strict word 00010h ; b9 10 00 ; 0xc18ac vgabios.c:1170
xor bx, bx ; 31 db ; 0xc18af 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 mov ax, 0c000h ; b8 00 c0 ; 0xc18b4
call 02e14h ; e8 5a 15 ; 0xc18b7 call 02e14h ; e8 5a 15 ; 0xc18b7
cmp word [bp-01ch], strict byte 00000h ; 83 7e e4 00 ; 0xc18ba vgabios.c:1172 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 AL, strict byte 003h ; b0 03 ; 0xc1915
mov AH, strict byte 011h ; b4 11 ; 0xc1917 mov AH, strict byte 011h ; b4 11 ; 0xc1917
int 06dh ; cd 6d ; 0xc1919 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 cx, ds ; 8c d9 ; 0xc191e
mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1920 mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1920
call 009f0h ; e8 ca f0 ; 0xc1923 call 009f0h ; e8 ca f0 ; 0xc1923
@ -3312,14 +3312,14 @@ biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
je short 01949h ; 74 12 ; 0xc1935 je short 01949h ; 74 12 ; 0xc1935
cmp dl, 008h ; 80 fa 08 ; 0xc1937 cmp dl, 008h ; 80 fa 08 ; 0xc1937
jne short 01953h ; 75 17 ; 0xc193a 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 cx, ds ; 8c d9 ; 0xc193f
mov ax, strict word 00043h ; b8 43 00 ; 0xc1941 mov ax, strict word 00043h ; b8 43 00 ; 0xc1941
call 009f0h ; e8 a9 f0 ; 0xc1944 call 009f0h ; e8 a9 f0 ; 0xc1944
jmp short 01953h ; eb 0a ; 0xc1947 vgabios.c:1204 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 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 jmp short 0193fh ; eb ec ; 0xc1951
lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1953 vgabios.c:1212 lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1953 vgabios.c:1212
pop di ; 5f ; 0xc1956 pop di ; 5f ; 0xc1956
@ -3800,7 +3800,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1d58 mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1d58
mul word [bp-024h] ; f7 66 dc ; 0xc1d5b mul word [bp-024h] ; f7 66 dc ; 0xc1d5b
mov di, ax ; 89 c7 ; 0xc1d5e 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 jne short 01db1h ; 75 4a ; 0xc1d65
sal ax, 1 ; d1 e0 ; 0xc1d67 vgabios.c:1345 sal ax, 1 ; d1 e0 ; 0xc1d67 vgabios.c:1345
or AL, strict byte 0ffh ; 0c ff ; 0xc1d69 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 mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc1d99 vgabios.c:1352
xor al, ch ; 30 e8 ; 0xc1d9c xor al, ch ; 30 e8 ; 0xc1d9c
add ax, strict word 00020h ; 05 20 00 ; 0xc1d9e 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 cx, di ; 89 f9 ; 0xc1da5
mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1da7 mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1da7
jcxz 01daeh ; e3 02 ; 0xc1daa jcxz 01daeh ; e3 02 ; 0xc1daa
@ -3868,7 +3868,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1e0a xor bh, bh ; 30 ff ; 0xc1e0a
mov CL, strict byte 003h ; b1 03 ; 0xc1e0c mov CL, strict byte 003h ; b1 03 ; 0xc1e0c
sal bx, CL ; d3 e3 ; 0xc1e0e 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 cx, word [bp-01ah] ; 8b 4e e6 ; 0xc1e14
mov ax, si ; 89 f0 ; 0xc1e17 mov ax, si ; 89 f0 ; 0xc1e17
jcxz 01e1dh ; e3 02 ; 0xc1e19 jcxz 01e1dh ; e3 02 ; 0xc1e19
@ -3890,7 +3890,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1e44 xor bh, bh ; 30 ff ; 0xc1e44
mov CL, strict byte 003h ; b1 03 ; 0xc1e46 mov CL, strict byte 003h ; b1 03 ; 0xc1e46
sal bx, CL ; d3 e3 ; 0xc1e48 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 mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1e4e
mul word [bp-018h] ; f7 66 e8 ; 0xc1e51 mul word [bp-018h] ; f7 66 e8 ; 0xc1e51
add ax, word [bp-01ah] ; 03 46 e6 ; 0xc1e54 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 CL, strict byte 003h ; b1 03 ; 0xc1ec3
mov di, ax ; 89 c7 ; 0xc1ec5 mov di, ax ; 89 c7 ; 0xc1ec5
sal di, CL ; d3 e7 ; 0xc1ec7 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 cx, bx ; 89 d9 ; 0xc1ecd
mov ax, si ; 89 f0 ; 0xc1ecf mov ax, si ; 89 f0 ; 0xc1ecf
mov di, dx ; 89 d7 ; 0xc1ed1 mov di, dx ; 89 d7 ; 0xc1ed1
@ -3968,7 +3968,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1f05 xor bh, bh ; 30 ff ; 0xc1f05
mov CL, strict byte 003h ; b1 03 ; 0xc1f07 mov CL, strict byte 003h ; b1 03 ; 0xc1f07
sal bx, CL ; d3 e3 ; 0xc1f09 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 mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1f0f
mul word [bp-018h] ; f7 66 e8 ; 0xc1f12 mul word [bp-018h] ; f7 66 e8 ; 0xc1f12
add ax, word [bp-014h] ; 03 46 ec ; 0xc1f15 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 dec word [bp-016h] ; ff 4e ea ; 0xc1f38 vgabios.c:1373
jmp near 01e7bh ; e9 3d ff ; 0xc1f3b jmp near 01e7bh ; e9 3d ff ; 0xc1f3b
mov si, word [bp-01eh] ; 8b 76 e2 ; 0xc1f3e vgabios.c:1379 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 xor ah, ah ; 30 e4 ; 0xc1f45
mov CL, strict byte 006h ; b1 06 ; 0xc1f47 mov CL, strict byte 006h ; b1 06 ; 0xc1f47
mov si, ax ; 89 c6 ; 0xc1f49 mov si, ax ; 89 c6 ; 0xc1f49
sal si, CL ; d3 e6 ; 0xc1f4b 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 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 cmp AL, strict byte 003h ; 3c 03 ; 0xc1f58
jc short 01f68h ; 72 0c ; 0xc1f5a jc short 01f68h ; 72 0c ; 0xc1f5a
jbe short 01f6fh ; 76 11 ; 0xc1f5c jbe short 01f6fh ; 76 11 ; 0xc1f5c
@ -4045,7 +4045,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
xor bh, bh ; 30 ff ; 0xc1fc0 xor bh, bh ; 30 ff ; 0xc1fc0
mov CL, strict byte 003h ; b1 03 ; 0xc1fc2 mov CL, strict byte 003h ; b1 03 ; 0xc1fc2
sal bx, CL ; d3 e3 ; 0xc1fc4 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 mov cx, dx ; 89 d1 ; 0xc1fca
xor di, di ; 31 ff ; 0xc1fcc xor di, di ; 31 ff ; 0xc1fcc
mov es, bx ; 8e c3 ; 0xc1fce mov es, bx ; 8e c3 ; 0xc1fce
@ -4151,7 +4151,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
jc short 02112h ; 72 4e ; 0xc20c2 jc short 02112h ; 72 4e ; 0xc20c2
dec word [bp-016h] ; ff 4e ea ; 0xc20c4 vgabios.c:1409 dec word [bp-016h] ; ff 4e ea ; 0xc20c4 vgabios.c:1409
jmp short 02057h ; eb 8e ; 0xc20c7 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 cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc20cd vgabios.c:1415
jne short 02115h ; 75 42 ; 0xc20d1 jne short 02115h ; 75 42 ; 0xc20d1
cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc20d3 cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc20d3
@ -4173,7 +4173,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mul dx ; f7 e2 ; 0xc20fb mul dx ; f7 e2 ; 0xc20fb
mov dl, byte [bp-010h] ; 8a 56 f0 ; 0xc20fd mov dl, byte [bp-010h] ; 8a 56 f0 ; 0xc20fd
xor dh, dh ; 30 f6 ; 0xc2100 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 cx, ax ; 89 c1 ; 0xc2106
mov ax, dx ; 89 d0 ; 0xc2108 mov ax, dx ; 89 d0 ; 0xc2108
xor di, di ; 31 ff ; 0xc210a xor di, di ; 31 ff ; 0xc210a
@ -4307,7 +4307,7 @@ biosfn_scroll: ; 0xc1c9f LB 0x6a3
mov cx, ax ; 89 c1 ; 0xc224b mov cx, ax ; 89 c1 ; 0xc224b
mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc224d mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc224d
xor ah, ah ; 30 e4 ; 0xc2250 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 xor di, di ; 31 ff ; 0xc2256
jcxz 0225ch ; e3 02 ; 0xc2258 jcxz 0225ch ; e3 02 ; 0xc2258
rep stosb ; f3 aa ; 0xc225a rep stosb ; f3 aa ; 0xc225a
@ -4532,7 +4532,7 @@ write_gfx_char_cga: ; 0xc2454 LB 0x112
mov ch, al ; 88 c5 ; 0xc245c mov ch, al ; 88 c5 ; 0xc245c
mov byte [bp-002h], dl ; 88 56 fe ; 0xc245e mov byte [bp-002h], dl ; 88 56 fe ; 0xc245e
mov al, bl ; 88 d8 ; 0xc2461 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 xor ah, ah ; 30 e4 ; 0xc2466 vgabios.c:1542
mov bl, byte [bp+00ah] ; 8a 5e 0a ; 0xc2468 mov bl, byte [bp+00ah] ; 8a 5e 0a ; 0xc2468
xor bh, bh ; 30 ff ; 0xc246b xor bh, bh ; 30 ff ; 0xc246b
@ -4653,7 +4653,7 @@ write_gfx_char_lin: ; 0xc2566 LB 0xa1
mov bh, al ; 88 c7 ; 0xc256e mov bh, al ; 88 c7 ; 0xc256e
mov ch, dl ; 88 d5 ; 0xc2570 mov ch, dl ; 88 d5 ; 0xc2570
mov al, cl ; 88 c8 ; 0xc2572 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 xor ah, ah ; 30 e4 ; 0xc2577 vgabios.c:1606
mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2579 mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2579
xor dh, dh ; 30 f6 ; 0xc257c 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 CL, strict byte 003h ; b1 03 ; 0xc2679
mov di, bx ; 89 df ; 0xc267b mov di, bx ; 89 df ; 0xc267b
sal di, CL ; d3 e7 ; 0xc267d 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 jne short 026c6h ; 75 40 ; 0xc2684
mul dx ; f7 e2 ; 0xc2686 vgabios.c:1648 mul dx ; f7 e2 ; 0xc2686 vgabios.c:1648
sal ax, 1 ; d1 e0 ; 0xc2688 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 al, byte [bp-00ch] ; 8a 46 f4 ; 0xc26ae
mov word [bp-01eh], ax ; 89 46 e2 ; 0xc26b1 mov word [bp-01eh], ax ; 89 46 e2 ; 0xc26b1
mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc26b4 vgabios.c:1651 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 cx, si ; 89 f1 ; 0xc26bb
mov di, bx ; 89 df ; 0xc26bd mov di, bx ; 89 df ; 0xc26bd
jcxz 026c3h ; e3 02 ; 0xc26bf jcxz 026c3h ; e3 02 ; 0xc26bf
rep stosw ; f3 ab ; 0xc26c1 rep stosw ; f3 ab ; 0xc26c1
jmp near 02772h ; e9 ac 00 ; 0xc26c3 vgabios.c:1653 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 mov CL, strict byte 006h ; b1 06 ; 0xc26ca
sal bx, CL ; d3 e3 ; 0xc26cc 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 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 mov byte [bp-012h], al ; 88 46 ee ; 0xc26d9
dec si ; 4e ; 0xc26dc vgabios.c:1658 dec si ; 4e ; 0xc26dc vgabios.c:1658
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc26dd 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 xor bh, bh ; 30 ff ; 0xc26e5
mov CL, strict byte 003h ; b1 03 ; 0xc26e7 mov CL, strict byte 003h ; b1 03 ; 0xc26e7
sal bx, CL ; d3 e3 ; 0xc26e9 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 cmp al, cl ; 38 c8 ; 0xc26ef
jc short 026ffh ; 72 0c ; 0xc26f1 jc short 026ffh ; 72 0c ; 0xc26f1
jbe short 02705h ; 76 10 ; 0xc26f3 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 CL, strict byte 003h ; b1 03 ; 0xc27e6
mov bx, ax ; 89 c3 ; 0xc27e8 mov bx, ax ; 89 c3 ; 0xc27e8
sal bx, CL ; d3 e3 ; 0xc27ea 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 jne short 02838h ; 75 45 ; 0xc27f1
mov ax, di ; 89 f8 ; 0xc27f3 vgabios.c:1706 mov ax, di ; 89 f8 ; 0xc27f3 vgabios.c:1706
mul dx ; f7 e2 ; 0xc27f5 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 CL, strict byte 003h ; b1 03 ; 0xc2824
mov di, ax ; 89 c7 ; 0xc2826 mov di, ax ; 89 c7 ; 0xc2826
sal di, CL ; d3 e7 ; 0xc2828 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 al, byte [bp-00ah] ; 8a 46 f6 ; 0xc282e vgabios.c:52
mov byte [es:bx], al ; 26 88 07 ; 0xc2831 mov byte [es:bx], al ; 26 88 07 ; 0xc2831
inc bx ; 43 ; 0xc2834 vgabios.c:1710 inc bx ; 43 ; 0xc2834 vgabios.c:1710
inc bx ; 43 ; 0xc2835 inc bx ; 43 ; 0xc2835
jmp short 02819h ; eb e1 ; 0xc2836 vgabios.c:1711 jmp short 02819h ; eb e1 ; 0xc2836 vgabios.c:1711
mov di, ax ; 89 c7 ; 0xc2838 vgabios.c:1716 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 CL, strict byte 006h ; b1 06 ; 0xc283e
mov di, ax ; 89 c7 ; 0xc2840 mov di, ax ; 89 c7 ; 0xc2840
sal di, CL ; d3 e7 ; 0xc2842 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 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 mov byte [bp-014h], al ; 88 46 ec ; 0xc284f
dec si ; 4e ; 0xc2852 vgabios.c:1718 dec si ; 4e ; 0xc2852 vgabios.c:1718
cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2853 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 xor bh, bh ; 30 ff ; 0xc285b
mov CL, strict byte 003h ; b1 03 ; 0xc285d mov CL, strict byte 003h ; b1 03 ; 0xc285d
sal bx, CL ; d3 e3 ; 0xc285f 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 cmp bl, cl ; 38 cb ; 0xc2865
jc short 02878h ; 72 0f ; 0xc2867 jc short 02878h ; 72 0f ; 0xc2867
jbe short 0287fh ; 76 14 ; 0xc2869 jbe short 0287fh ; 76 14 ; 0xc2869
@ -5065,9 +5065,9 @@ biosfn_write_pixel: ; 0xc28fc LB 0x17a
xor bh, bh ; 30 ff ; 0xc2927 xor bh, bh ; 30 ff ; 0xc2927
mov CL, strict byte 003h ; b1 03 ; 0xc2929 mov CL, strict byte 003h ; b1 03 ; 0xc2929
sal bx, CL ; d3 e3 ; 0xc292b 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 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 cmp al, cl ; 38 c8 ; 0xc2938
jc short 02948h ; 72 0c ; 0xc293a jc short 02948h ; 72 0c ; 0xc293a
jbe short 02952h ; 76 14 ; 0xc293c jbe short 02952h ; 76 14 ; 0xc293c
@ -5131,7 +5131,7 @@ biosfn_write_pixel: ; 0xc28fc LB 0x17a
shr ax, 1 ; d1 e8 ; 0xc29c7 shr ax, 1 ; d1 e8 ; 0xc29c7
mov dx, strict word 00050h ; ba 50 00 ; 0xc29c9 mov dx, strict word 00050h ; ba 50 00 ; 0xc29c9
mul dx ; f7 e2 ; 0xc29cc 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 jne short 029deh ; 75 09 ; 0xc29d3
mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc29d5 vgabios.c:1777 mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc29d5 vgabios.c:1777
shr bx, 1 ; d1 eb ; 0xc29d8 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 CL, strict byte 003h ; b1 03 ; 0xc29fa
mov si, dx ; 89 d6 ; 0xc29fc mov si, dx ; 89 d6 ; 0xc29fc
sal si, CL ; d3 e6 ; 0xc29fe 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 jne short 02a21h ; 75 1a ; 0xc2a05
mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc2a07 vgabios.c:1787 mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc2a07 vgabios.c:1787
and ah, cl ; 20 cc ; 0xc2a0a 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 CL, strict byte 003h ; b1 03 ; 0xc2b25
mov bx, ax ; 89 c3 ; 0xc2b27 mov bx, ax ; 89 c3 ; 0xc2b27
sal bx, CL ; d3 e3 ; 0xc2b29 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 jne short 02b74h ; 75 42 ; 0xc2b30
mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2b32 vgabios.c:1865 mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2b32 vgabios.c:1865
mul word [bp-014h] ; f7 66 ec ; 0xc2b35 mul word [bp-014h] ; f7 66 ec ; 0xc2b35
@ -5295,23 +5295,23 @@ biosfn_write_teletype: ; 0xc2a76 LB 0x263
add ax, dx ; 01 d0 ; 0xc2b55 add ax, dx ; 01 d0 ; 0xc2b55
sal ax, 1 ; d1 e0 ; 0xc2b57 sal ax, 1 ; d1 e0 ; 0xc2b57
add si, ax ; 01 c6 ; 0xc2b59 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 mov byte [es:si], ch ; 26 88 2c ; 0xc2b5f vgabios.c:52
cmp cl, byte [bp-004h] ; 3a 4e fc ; 0xc2b62 vgabios.c:1870 cmp cl, byte [bp-004h] ; 3a 4e fc ; 0xc2b62 vgabios.c:1870
jne short 02ba4h ; 75 3d ; 0xc2b65 jne short 02ba4h ; 75 3d ; 0xc2b65
inc si ; 46 ; 0xc2b67 vgabios.c:1871 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 al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2b6c
mov byte [es:si], al ; 26 88 04 ; 0xc2b6f mov byte [es:si], al ; 26 88 04 ; 0xc2b6f
jmp short 02ba4h ; eb 30 ; 0xc2b72 vgabios.c:1873 jmp short 02ba4h ; eb 30 ; 0xc2b72 vgabios.c:1873
mov si, ax ; 89 c6 ; 0xc2b74 vgabios.c:1876 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 CL, strict byte 006h ; b1 06 ; 0xc2b7a
mov si, ax ; 89 c6 ; 0xc2b7c mov si, ax ; 89 c6 ; 0xc2b7c
sal si, CL ; d3 e6 ; 0xc2b7e sal si, CL ; d3 e6 ; 0xc2b7e
mov dl, byte [si+04841h] ; 8a 94 41 48 ; 0xc2b80 mov dl, byte [si+04842h] ; 8a 94 42 48 ; 0xc2b80
mov al, byte [bx+047aeh] ; 8a 87 ae 47 ; 0xc2b84 vgabios.c:1877 mov al, byte [bx+047afh] ; 8a 87 af 47 ; 0xc2b84 vgabios.c:1877
mov bl, byte [bx+047adh] ; 8a 9f ad 47 ; 0xc2b88 vgabios.c:1878 mov bl, byte [bx+047aeh] ; 8a 9f ae 47 ; 0xc2b88 vgabios.c:1878
cmp bl, 003h ; 80 fb 03 ; 0xc2b8c cmp bl, 003h ; 80 fb 03 ; 0xc2b8c
jc short 02b9fh ; 72 0e ; 0xc2b8f jc short 02b9fh ; 72 0e ; 0xc2b8f
jbe short 02ba6h ; 76 13 ; 0xc2b91 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 mov ch, byte [bp-012h] ; 8a 6e ee ; 0xc2c40
db 0feh, 0cdh db 0feh, 0cdh
; dec ch ; fe cd ; 0xc2c43 ; 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 jne short 02c98h ; 75 4c ; 0xc2c4a
mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2c4c vgabios.c:1910 mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2c4c vgabios.c:1910
mul word [bp-014h] ; f7 66 ec ; 0xc2c4f mul word [bp-014h] ; f7 66 ec ; 0xc2c4f
@ -5411,7 +5411,7 @@ biosfn_write_teletype: ; 0xc2a76 LB 0x263
sal ax, 1 ; d1 e0 ; 0xc2c72 sal ax, 1 ; d1 e0 ; 0xc2c72
add si, ax ; 01 c6 ; 0xc2c74 add si, ax ; 01 c6 ; 0xc2c74
inc si ; 46 ; 0xc2c76 vgabios.c:1911 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 dl, byte [es:si] ; 26 8a 14 ; 0xc2c7b vgabios.c:47
mov ax, strict word 00001h ; b8 01 00 ; 0xc2c7e vgabios.c:1912 mov ax, strict word 00001h ; b8 01 00 ; 0xc2c7e vgabios.c:1912
push ax ; 50 ; 0xc2c81 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 DL, strict byte 002h ; b2 02 ; 0xc2f46 vgabios.c:2033
mov bl, dl ; 88 d3 ; 0xc2f48 vgabios.c:2034 mov bl, dl ; 88 d3 ; 0xc2f48 vgabios.c:2034
xor bh, bh ; 30 ff ; 0xc2f4a 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 byte [bp+004h], al ; 88 46 04 ; 0xc2f50
mov bx, 00085h ; bb 85 00 ; 0xc2f53 vgabios.c:62 mov bx, 00085h ; bb 85 00 ; 0xc2f53 vgabios.c:62
mov ax, strict word 00040h ; b8 40 00 ; 0xc2f56 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 al, bl ; 88 d8 ; 0xc2f9c
mov cx, ax ; 89 c1 ; 0xc2f9e mov cx, ax ; 89 c1 ; 0xc2f9e
mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2fa0 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 mov dx, ds ; 8c da ; 0xc2fa6
call 02f26h ; e8 7b ff ; 0xc2fa8 call 02f26h ; e8 7b ff ; 0xc2fa8
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fab vgabios.c:2054 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 al, bl ; 88 d8 ; 0xc2fbe
mov cx, ax ; 89 c1 ; 0xc2fc0 mov cx, ax ; 89 c1 ; 0xc2fc0
mov bx, strict word 00008h ; bb 08 00 ; 0xc2fc2 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 mov dx, ds ; 8c da ; 0xc2fc8
call 02f26h ; e8 59 ff ; 0xc2fca call 02f26h ; e8 59 ff ; 0xc2fca
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fcd vgabios.c:2058 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 al, bl ; 88 d8 ; 0xc2fe0
mov cx, ax ; 89 c1 ; 0xc2fe2 mov cx, ax ; 89 c1 ; 0xc2fe2
mov bx, strict word 00010h ; bb 10 00 ; 0xc2fe4 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 mov dx, ds ; 8c da ; 0xc2fea
call 02f26h ; e8 37 ff ; 0xc2fec call 02f26h ; e8 37 ff ; 0xc2fec
lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fef vgabios.c:2062 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 word [bp-00ah], ax ; 89 46 f6 ; 0xc30e3 vgabios.c:58
mov ax, ds ; 8c d8 ; 0xc30e6 vgabios.c:2150 mov ax, ds ; 8c d8 ; 0xc30e6 vgabios.c:2150
mov es, dx ; 8e c2 ; 0xc30e8 vgabios.c:72 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 mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc30ef
lea di, [bx+004h] ; 8d 7f 04 ; 0xc30f3 vgabios.c:2155 lea di, [bx+004h] ; 8d 7f 04 ; 0xc30f3 vgabios.c:2155
mov cx, strict word 0001eh ; b9 1e 00 ; 0xc30f6 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 xor bh, bh ; 30 ff ; 0xc389e
mov CL, strict byte 003h ; b1 03 ; 0xc38a0 mov CL, strict byte 003h ; b1 03 ; 0xc38a0
sal bx, CL ; d3 e3 ; 0xc38a2 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 jne short 03896h ; 75 ec ; 0xc38a8
mov ah, al ; 88 c4 ; 0xc38aa mov ah, al ; 88 c4 ; 0xc38aa
mov al, ah ; 88 e0 ; 0xc38ac vgabios.c:2438 mov al, ah ; 88 e0 ; 0xc38ac vgabios.c:2438
@ -7125,7 +7125,7 @@ int10_func: ; 0xc394b LB 0x456
push ax ; 50 ; 0xc3b26 push ax ; 50 ; 0xc3b26
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b27 mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b27
mov cx, 00100h ; b9 00 01 ; 0xc3b2a 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 mov dx, 0c000h ; ba 00 c0 ; 0xc3b30
call 02e8ch ; e8 56 f3 ; 0xc3b33 call 02e8ch ; e8 56 f3 ; 0xc3b33
jmp short 03b58h ; eb 20 ; 0xc3b36 jmp short 03b58h ; eb 20 ; 0xc3b36
@ -7138,7 +7138,7 @@ int10_func: ; 0xc394b LB 0x456
push ax ; 50 ; 0xc3b44 push ax ; 50 ; 0xc3b44
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b45 mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b45
mov cx, 00100h ; b9 00 01 ; 0xc3b48 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 jmp short 03b30h ; eb e0 ; 0xc3b4e
mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b50 vgabios.c:2629 mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b50 vgabios.c:2629
xor ah, ah ; 30 e4 ; 0xc3b53 xor ah, ah ; 30 e4 ; 0xc3b53
@ -7153,7 +7153,7 @@ int10_func: ; 0xc394b LB 0x456
push ax ; 50 ; 0xc3b67 push ax ; 50 ; 0xc3b67
mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b68 mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b68
mov cx, 00100h ; b9 00 01 ; 0xc3b6b 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 jmp short 03b30h ; eb bd ; 0xc3b71
mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b73 vgabios.c:2636 mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b73 vgabios.c:2636
mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3b76 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], 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+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+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 [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+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 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 cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc401b vbe.c:356
je short 04045h ; 74 24 ; 0xc401f 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+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 [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 [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 [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc4041
mov dx, cx ; 89 ca ; 0xc4045 vbe.c:369 mov dx, cx ; 89 ca ; 0xc4045 vbe.c:369
add dx, strict byte 0001bh ; 83 c2 1b ; 0xc4047 add dx, strict byte 0001bh ; 83 c2 1b ; 0xc4047
@ -8436,12 +8436,12 @@ vesa_pm_end: ; 0xc4754 LB 0x1
; Padding 0x2b bytes at 0xc4755 ; Padding 0x2b bytes at 0xc4755
times 43 db 0 times 43 db 0
section _DATA progbits vstart=0x4780 align=1 ; size=0x3742 class=DATA group=DGROUP section _DATA progbits vstart=0x4780 align=1 ; size=0x3745 class=DATA group=DGROUP
; disGetNextSymbol 0xc4780 LB 0x3742 -> off=0x0 cb=000000000000002b uValue=00000000000c0000 '_msg_vga_init' ; disGetNextSymbol 0xc4780 LB 0x3745 -> off=0x0 cb=000000000000002c uValue=00000000000c0000 '_msg_vga_init'
_msg_vga_init: ; 0xc4780 LB 0x2b _msg_vga_init: ; 0xc4780 LB 0x2c
db 'Oracle VirtualBox Version 7.1.8 VGA BIOS', 00dh, 00ah, 000h db 'Oracle VirtualBox Version 7.1.10 VGA BIOS', 00dh, 00ah, 000h
; disGetNextSymbol 0xc47ab LB 0x3717 -> off=0x0 cb=0000000000000080 uValue=00000000000c002b 'vga_modes' ; disGetNextSymbol 0xc47ac LB 0x3719 -> off=0x0 cb=0000000000000080 uValue=00000000000c002c 'vga_modes'
vga_modes: ; 0xc47ab LB 0x80 vga_modes: ; 0xc47ac LB 0x80
db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h 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 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 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 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 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 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' ; disGetNextSymbol 0xc482c LB 0x3699 -> off=0x0 cb=0000000000000010 uValue=00000000000c00ac 'line_to_vpti'
line_to_vpti: ; 0xc482b LB 0x10 line_to_vpti: ; 0xc482c LB 0x10
db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh 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' ; disGetNextSymbol 0xc483c LB 0x3689 -> off=0x0 cb=0000000000000004 uValue=00000000000c00bc 'dac_regs'
dac_regs: ; 0xc483b LB 0x4 dac_regs: ; 0xc483c LB 0x4
dd 0ff3f3f3fh dd 0ff3f3f3fh
; disGetNextSymbol 0xc483f LB 0x3683 -> off=0x0 cb=0000000000000780 uValue=00000000000c00bf 'video_param_table' ; disGetNextSymbol 0xc4840 LB 0x3685 -> off=0x0 cb=0000000000000780 uValue=00000000000c00c0 'video_param_table'
video_param_table: ; 0xc483f LB 0x780 video_param_table: ; 0xc4840 LB 0x780
db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h 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 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 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 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 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 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' ; disGetNextSymbol 0xc4fc0 LB 0x2f05 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0840 'palette0'
palette0: ; 0xc4fbf LB 0xc0 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, 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 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 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, 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 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 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' ; disGetNextSymbol 0xc5080 LB 0x2e45 -> off=0x0 cb=00000000000000c0 uValue=00000000000c0900 'palette1'
palette1: ; 0xc507f LB 0xc0 palette1: ; 0xc5080 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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, 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 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, 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, 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 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' ; disGetNextSymbol 0xc5140 LB 0x2d85 -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c0 'palette2'
palette2: ; 0xc513f LB 0xc0 palette2: ; 0xc5140 LB 0xc0
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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 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 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, 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, 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 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' ; disGetNextSymbol 0xc5200 LB 0x2cc5 -> off=0x0 cb=0000000000000300 uValue=00000000000c0a80 'palette3'
palette3: ; 0xc51ff LB 0x300 palette3: ; 0xc5200 LB 0x300
db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah 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 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 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 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 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 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' ; disGetNextSymbol 0xc5500 LB 0x29c5 -> off=0x0 cb=0000000000000010 uValue=00000000000c0d80 'static_functionality'
static_functionality: ; 0xc54ff LB 0x10 static_functionality: ; 0xc5500 LB 0x10
db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h 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' ; disGetNextSymbol 0xc5510 LB 0x29b5 -> off=0x0 cb=0000000000000024 uValue=00000000000c0d90 '_dcc_table'
_dcc_table: ; 0xc550f LB 0x24 _dcc_table: ; 0xc5510 LB 0x24
db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 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, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
db 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5533 LB 0x298f -> off=0x0 cb=000000000000001a uValue=00000000000c0db3 '_secondary_save_area' ; disGetNextSymbol 0xc5534 LB 0x2991 -> off=0x0 cb=000000000000001a uValue=00000000000c0db4 '_secondary_save_area'
_secondary_save_area: ; 0xc5533 LB 0x1a _secondary_save_area: ; 0xc5534 LB 0x1a
db 01ah, 000h, 00fh, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h 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 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' ; disGetNextSymbol 0xc554e LB 0x2977 -> off=0x0 cb=000000000000001c uValue=00000000000c0dce '_video_save_pointer_table'
_video_save_pointer_table: ; 0xc554d LB 0x1c _video_save_pointer_table: ; 0xc554e LB 0x1c
db 03fh, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 040h, 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 db 034h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
; disGetNextSymbol 0xc5569 LB 0x2959 -> off=0x0 cb=0000000000000800 uValue=00000000000c0de9 'vgafont8' ; disGetNextSymbol 0xc556a LB 0x295b -> off=0x0 cb=0000000000000800 uValue=00000000000c0dea 'vgafont8'
vgafont8: ; 0xc5569 LB 0x800 vgafont8: ; 0xc556a LB 0x800
db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh 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 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 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 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 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 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' ; disGetNextSymbol 0xc5d6a LB 0x215b -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ea 'vgafont14'
vgafont14: ; 0xc5d69 LB 0xe00 vgafont14: ; 0xc5d6a LB 0xe00
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 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh 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 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, 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, 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 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' ; disGetNextSymbol 0xc6b6a LB 0x135b -> off=0x0 cb=0000000000001000 uValue=00000000000c23ea 'vgafont16'
vgafont16: ; 0xc6b69 LB 0x1000 vgafont16: ; 0xc6b6a LB 0x1000
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, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 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 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, 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, 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 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' ; disGetNextSymbol 0xc7b6a LB 0x35b -> off=0x0 cb=000000000000012d uValue=00000000000c33ea 'vgafont14alt'
vgafont14alt: ; 0xc7b69 LB 0x12d vgafont14alt: ; 0xc7b6a LB 0x12d
db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h 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, 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 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, 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 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 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' ; disGetNextSymbol 0xc7c97 LB 0x22e -> off=0x0 cb=0000000000000144 uValue=00000000000c3517 'vgafont16alt'
vgafont16alt: ; 0xc7c96 LB 0x144 vgafont16alt: ; 0xc7c97 LB 0x144
db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h 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, 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 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, 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 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
db 006h, 000h, 000h, 000h db 006h, 000h, 000h, 000h
; disGetNextSymbol 0xc7dda LB 0xe8 -> off=0x0 cb=0000000000000008 uValue=00000000000c365a '_cga_msr' ; disGetNextSymbol 0xc7ddb LB 0xea -> off=0x0 cb=0000000000000008 uValue=00000000000c365b '_cga_msr'
_cga_msr: ; 0xc7dda LB 0x8 _cga_msr: ; 0xc7ddb LB 0x8
db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
; disGetNextSymbol 0xc7de2 LB 0xe0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3662 'line_to_vpti_200' ; disGetNextSymbol 0xc7de3 LB 0xe2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3663 'line_to_vpti_200'
line_to_vpti_200: ; 0xc7de2 LB 0x8 line_to_vpti_200: ; 0xc7de3 LB 0x8
db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7dea LB 0xd8 -> off=0x0 cb=0000000000000008 uValue=00000000000c366a 'line_to_vpti_350' ; disGetNextSymbol 0xc7deb LB 0xda -> off=0x0 cb=0000000000000008 uValue=00000000000c366b 'line_to_vpti_350'
line_to_vpti_350: ; 0xc7dea LB 0x8 line_to_vpti_350: ; 0xc7deb LB 0x8
db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
; disGetNextSymbol 0xc7df2 LB 0xd0 -> off=0x0 cb=0000000000000008 uValue=00000000000c3672 'line_to_vpti_400' ; disGetNextSymbol 0xc7df3 LB 0xd2 -> off=0x0 cb=0000000000000008 uValue=00000000000c3673 'line_to_vpti_400'
line_to_vpti_400: ; 0xc7df2 LB 0x8 line_to_vpti_400: ; 0xc7df3 LB 0x8
db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
; disGetNextSymbol 0xc7dfa LB 0xc8 -> off=0x0 cb=0000000000000004 uValue=00000000000c367a 'row_tbl' ; disGetNextSymbol 0xc7dfb LB 0xca -> off=0x0 cb=0000000000000005 uValue=00000000000c367b 'row_tbl'
row_tbl: ; 0xc7dfa LB 0x4 row_tbl: ; 0xc7dfb LB 0x5
dd 02b190e00h db 000h, 00eh, 019h, 02bh, 000h
; disGetNextSymbol 0xc7dfe LB 0xc4 -> off=0x0 cb=0000000000000015 uValue=00000000000c367e '_vbebios_copyright' ; disGetNextSymbol 0xc7e00 LB 0xc5 -> off=0x0 cb=0000000000000015 uValue=00000000000c3680 '_vbebios_copyright'
_vbebios_copyright: ; 0xc7dfe LB 0x15 _vbebios_copyright: ; 0xc7e00 LB 0x15
db 'VirtualBox VESA BIOS', 000h db 'VirtualBox VESA BIOS', 000h
; disGetNextSymbol 0xc7e13 LB 0xaf -> off=0x0 cb=000000000000001d uValue=00000000000c3693 '_vbebios_vendor_name' ; disGetNextSymbol 0xc7e15 LB 0xb0 -> off=0x0 cb=000000000000001d uValue=00000000000c3695 '_vbebios_vendor_name'
_vbebios_vendor_name: ; 0xc7e13 LB 0x1d _vbebios_vendor_name: ; 0xc7e15 LB 0x1d
db 'Oracle and/or its affiliates', 000h db 'Oracle and/or its affiliates', 000h
; disGetNextSymbol 0xc7e30 LB 0x92 -> off=0x0 cb=000000000000001e uValue=00000000000c36b0 '_vbebios_product_name' ; disGetNextSymbol 0xc7e32 LB 0x93 -> off=0x0 cb=000000000000001e uValue=00000000000c36b2 '_vbebios_product_name'
_vbebios_product_name: ; 0xc7e30 LB 0x1e _vbebios_product_name: ; 0xc7e32 LB 0x1e
db 'Oracle VirtualBox VBE Adapter', 000h db 'Oracle VirtualBox VBE Adapter', 000h
; disGetNextSymbol 0xc7e4e LB 0x74 -> off=0x0 cb=0000000000000020 uValue=00000000000c36ce '_vbebios_product_revision' ; disGetNextSymbol 0xc7e50 LB 0x75 -> off=0x0 cb=0000000000000021 uValue=00000000000c36d0 '_vbebios_product_revision'
_vbebios_product_revision: ; 0xc7e4e LB 0x20 _vbebios_product_revision: ; 0xc7e50 LB 0x21
db 'Oracle VirtualBox Version 7.1.8', 000h db 'Oracle VirtualBox Version 7.1.10', 000h
; disGetNextSymbol 0xc7e6e LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36ee '_vbebios_info_string' ; disGetNextSymbol 0xc7e71 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f1 '_vbebios_info_string'
_vbebios_info_string: ; 0xc7e6e LB 0x2b _vbebios_info_string: ; 0xc7e71 LB 0x2b
db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h 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' ; disGetNextSymbol 0xc7e9c LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c371c '_no_vbebios_info_string'
_no_vbebios_info_string: ; 0xc7e99 LB 0x29 _no_vbebios_info_string: ; 0xc7e9c LB 0x29
db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h 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 section CONST2 progbits vstart=0x7ec6 align=1 ; size=0x0 class=DATA group=DGROUP
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 ; Padding 0x13a bytes at 0xc7ec6
db 06ch, 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h db 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h
db 061h, 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh db 02fh, 067h, 061h, 06ch, 069h, 074h, 073h, 079h, 06eh, 02fh, 063h, 06fh, 06dh, 070h, 069h, 06ch
db 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh db 065h, 02dh, 063h, 061h, 063h, 068h, 065h, 02fh, 076h, 062h, 06fh, 078h, 02fh, 062h, 072h, 061h
db 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h db 06eh, 063h, 068h, 065h, 073h, 02fh, 056h, 042h, 06fh, 078h, 02dh, 037h, 02eh, 031h, 02fh, 06fh
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h db 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h
db 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h, 030h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h 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 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, 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 /** @file
* VBox storage devices - Virtio NET Driver * VBox storage devices - Virtio NET Driver
* *
@ -672,6 +671,10 @@ static DECLCALLBACK(void) virtioNetVirtqNotified(PPDMDEVINS pDevIns, PVIRTIOCORE
PVIRTIONETVIRTQ pVirtq = &pThis->aVirtqs[uVirtqNbr]; PVIRTIONETVIRTQ pVirtq = &pThis->aVirtqs[uVirtqNbr];
PVIRTIONETWORKER pWorker = &pThis->aWorkers[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) #if defined (IN_RING3) && defined (LOG_ENABLED)
RTLogFlush(NULL); RTLogFlush(NULL);
#endif #endif
@ -791,7 +794,11 @@ void virtioNetDumpGcPhysRxBuf(PPDMDEVINS pDevIns, PVIRTIONETPKTHDR pRxPktHdr,
/** /**
* @callback_method_impl{FNDBGFHANDLERDEV, virtio-net debugger info callback.} * @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) static DECLCALLBACK(void) virtioNetR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
#endif /* !VIRTIO_REL_INFO_DUMP */
{ {
PVIRTIONET pThis = PDMDEVINS_2_DATA(pDevIns, PVIRTIONET); PVIRTIONET pThis = PDMDEVINS_2_DATA(pDevIns, PVIRTIONET);
PVIRTIONETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVIRTIONETCC); 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 fState = pszArgs && (*pszArgs == 's' || *pszArgs == 'S'); /* "state" */
bool fPointers = pszArgs && (*pszArgs == 'p' || *pszArgs == 'P'); /* "pointers" */ bool fPointers = pszArgs && (*pszArgs == 'p' || *pszArgs == 'P'); /* "pointers" */
bool fVirtqs = pszArgs && (*pszArgs == 'q' || *pszArgs == 'Q'); /* "queues */ 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. */ /* Show basic information. */
pHlp->pfnPrintf(pHlp, pHlp->pfnPrintf(pHlp,
@ -1037,6 +1052,10 @@ static int virtioNetR3DevCfgAccess(PVIRTIONET pThis, uint32_t uOffsetOfAccess, v
pThis->szInst, uOffsetOfAccess, uOffsetOfAccess, cb)); pThis->szInst, uOffsetOfAccess, uOffsetOfAccess, cb));
return fWrite ? VINF_SUCCESS : VINF_IOM_MMIO_UNUSED_00; 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; return VINF_SUCCESS;
} }
@ -1536,6 +1555,42 @@ static DECLCALLBACK(int) virtioNetR3ModernSaveExec(PPDMDEVINS pDevIns, PSSMHANDL
#ifdef IN_RING3 #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, * 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 * 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))); virtioCoreVirtqAvailBufCount(pDevIns, &pThis->Virtio, pRxVirtq->uIdx)));
rc = VINF_SUCCESS; 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 */); virtioCoreVirtqEnableNotify(&pThis->Virtio, pRxVirtq->uIdx, rc == VERR_INVALID_STATE /* fEnable */);
return rc; return rc;
} }
@ -2008,6 +2067,12 @@ static int virtioNetR3RxPktMultibufXfer(PPDMDEVINS pDevIns, PVIRTIONET pThis, ui
{ {
cbHdrEnqueued = cbPktHdr; cbHdrEnqueued = cbPktHdr;
int rc = virtioCoreR3VirtqAvailBufGet(pDevIns, &pThis->Virtio, pRxVirtq->uIdx, pVirtqBuf, true); 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 || rc == VERR_NOT_AVAILABLE, ("%Rrc\n", rc), rc);
AssertMsgReturn(rc == VINF_SUCCESS && pVirtqBuf->cbPhysReturn, AssertMsgReturn(rc == VINF_SUCCESS && pVirtqBuf->cbPhysReturn,
("Not enough Rx buffers in queue to accomodate ethernet packet\n"), ("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; PVIRTQBUF pVirtqBuf = &VirtqBuf;
int rc = virtioCoreR3VirtqAvailBufGet(pDevIns, &pThis->Virtio, pRxVirtq->uIdx, pVirtqBuf, true); 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 || rc == VERR_NOT_AVAILABLE, ("%Rrc\n", rc), rc);
AssertMsgReturn(rc == VINF_SUCCESS && pVirtqBuf->cbPhysReturn, AssertMsgReturn(rc == VINF_SUCCESS && pVirtqBuf->cbPhysReturn,
("Not enough Rx buffers or capacity to accommodate ethernet packet\n"), ("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; return rc;
} }
STAM_PROFILE_STOP(&pThis->StatReceiveStore, a); 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; return VINF_SUCCESS;
} }
@ -2720,6 +2795,10 @@ static int virtioNetR3TransmitPkts(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVIRTIO
int cPkts = virtioCoreVirtqAvailBufCount(pVirtio->pDevInsR3, pVirtio, pTxVirtq->uIdx); int cPkts = virtioCoreVirtqAvailBufCount(pVirtio->pDevInsR3, pVirtio, pTxVirtq->uIdx);
if (!cPkts) 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)); LogFunc(("[%s] No packets to send found on %s\n", pThis->szInst, pTxVirtq->szName));
if (pDrv) if (pDrv)
@ -2728,6 +2807,10 @@ static int virtioNetR3TransmitPkts(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVIRTIO
ASMAtomicWriteU32(&pThis->uIsTransmitting, 0); ASMAtomicWriteU32(&pThis->uIsTransmitting, 0);
return VERR_MISSING; 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')); LogFunc(("[%s] About to transmit %d pending packet%c\n", pThis->szInst, cPkts, cPkts == 1 ? ' ' : 's'));
virtioNetR3SetWriteLed(pThisCC, true); virtioNetR3SetWriteLed(pThisCC, true);
@ -2858,6 +2941,23 @@ static int virtioNetR3TransmitPkts(PPDMDEVINS pDevIns, PVIRTIONET pThis, PVIRTIO
&& IS_VIRTQ_EMPTY(pDevIns, &pThis->Virtio, pTxVirtq->uIdx)) && IS_VIRTQ_EMPTY(pDevIns, &pThis->Virtio, pTxVirtq->uIdx))
virtioCoreVirtqEnableNotify(&pThis->Virtio, pTxVirtq->uIdx, true /* fEnable */); 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); virtioNetR3SetWriteLed(pThisCC, false);
if (pDrv) if (pDrv)
@ -2890,7 +2990,22 @@ static DECLCALLBACK(void) virtioNetR3LinkUpTimer(PPDMDEVINS pDevIns, TMTIMERHAND
PVIRTIONET pThis = PDMDEVINS_2_DATA(pDevIns, PVIRTIONET); PVIRTIONET pThis = PDMDEVINS_2_DATA(pDevIns, PVIRTIONET);
PVIRTIONETCC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVIRTIONETCC); 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); 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); virtioNetWakeupRxBufWaiter(pDevIns);
if (pThisCC->pDrv) if (pThisCC->pDrv)
@ -3139,6 +3254,13 @@ static DECLCALLBACK(int) virtioNetR3WorkerThread(PPDMDEVINS pDevIns, PPDMTHREAD
VIRTQBUF_T VirtqBuf; VIRTQBUF_T VirtqBuf;
PVIRTQBUF pVirtqBuf = &VirtqBuf; PVIRTQBUF pVirtqBuf = &VirtqBuf;
int rc = virtioCoreR3VirtqAvailBufGet(pDevIns, &pThis->Virtio, pVirtq->uIdx, pVirtqBuf, true); 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) if (rc == VERR_NOT_AVAILABLE)
{ {
Log10Func(("[%s] %s worker woken. Nothing found in queue\n", pThis->szInst, pVirtq->szName)); 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 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)); Log(("\n%-23s: %s VirtIO is resetting ***\n", __FUNCTION__, pThis->szInst));
pThis->virtioNetConfig.uStatus = pThis->fCableConnected ? VIRTIONET_F_LINK_UP : 0; 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; 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); PVIRTIONET pThis = PDMDEVINS_2_DATA(pVirtio->pDevInsR3, PVIRTIONET);
LogFunc(("[Feature Negotiation Complete] Guest Driver version is: %s\n", fLegacy ? "legacy" : "modern")); 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); virtioNetConfigurePktHdr(pThis, fLegacy);
virtioNetR3SetVirtqNames(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 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' ; disGetNextSymbol 0xf0b2c LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0b2c 'bios_cvs_version_string'
bios_cvs_version_string: ; 0xf0b2c LB 0x12 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' ; disGetNextSymbol 0xf0b3e LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0b3e '_bios_prefix_string'
_bios_prefix_string: ; 0xf0b3e LB 0x8 _bios_prefix_string: ; 0xf0b3e LB 0x8
db 'BIOS: ', 000h, 000h db 'BIOS: ', 000h, 000h
@ -13465,4 +13465,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
cpu_reset: ; 0xffff0 LB 0x10 cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2117 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' ; 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 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' ; disGetNextSymbol 0xf0e04 LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0e04 'bios_cvs_version_string'
bios_cvs_version_string: ; 0xf0e04 LB 0x12 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' ; disGetNextSymbol 0xf0e16 LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0e16 '_bios_prefix_string'
_bios_prefix_string: ; 0xf0e16 LB 0x8 _bios_prefix_string: ; 0xf0e16 LB 0x8
db 'BIOS: ', 000h, 000h db 'BIOS: ', 000h, 000h
@ -19401,4 +19401,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
cpu_reset: ; 0xffff0 LB 0x10 cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2117 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' ; 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 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' ; disGetNextSymbol 0xf0b2c LB 0x3fa -> off=0x0 cb=0000000000000012 uValue=00000000000f0b2c 'bios_cvs_version_string'
bios_cvs_version_string: ; 0xf0b2c LB 0x12 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' ; disGetNextSymbol 0xf0b3e LB 0x3e8 -> off=0x0 cb=0000000000000008 uValue=00000000000f0b3e '_bios_prefix_string'
_bios_prefix_string: ; 0xf0b3e LB 0x8 _bios_prefix_string: ; 0xf0b3e LB 0x8
db 'BIOS: ', 000h, 000h db 'BIOS: ', 000h, 000h
@ -13698,4 +13698,4 @@ biosorg_check_before_or_at_0FFEEh: ; 0xfff80 LB 0x70
cpu_reset: ; 0xffff0 LB 0x10 cpu_reset: ; 0xffff0 LB 0x10
jmp far 0f000h:0e05bh ; ea 5b e0 00 f0 ; 0xffff0 orgs.asm:2117 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' ; 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 <VBox/vmm/pdmdev.h>
#include "VirtioCore.h" #include "VirtioCore.h"
#ifdef VIRTIO_REL_INFO_DUMP
#include <iprt/trace.h>
#endif /* VIRTIO_REL_INFO_DUMP */
/********************************************************************************************************************************* /*********************************************************************************************************************************
* Defined Constants And Macros * * Defined Constants And Macros *
@ -632,6 +635,74 @@ DECLINLINE(void) virtioCoreR3DescInfo(PCDBGFINFOHLP pHlp, PVIRTQ_DESC_T pDesc, u
pDesc->cb, pDesc->GCPhysBuf, cszTail); 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 */ /** API Fuunction: See header file */
DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, PVIRTIOCORE pVirtio, const char *pszArgs, int uVirtq) 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)); &uAvailEventIdx, sizeof(uAvailEventIdx));
} }
#ifndef VIRTIO_REL_INFO_DUMP
VIRTQBUF_T VirtqBuf; VIRTQBUF_T VirtqBuf;
PVIRTQBUF pVirtqBuf = &VirtqBuf; PVIRTQBUF pVirtqBuf = &VirtqBuf;
RT_ZERO(VirtqBuf); /* Make sure pSgPhysSend and pSgPhysReturn are initialized. */ 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; cSendSegs = pVirtqBuf->pSgPhysSend ? pVirtqBuf->pSgPhysSend->cSegs : 0;
cReturnSegs = pVirtqBuf->pSgPhysReturn ? pVirtqBuf->pSgPhysReturn->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 fAvailNoInterrupt = virtioReadAvailRingFlags(pDevIns, pVirtio, pVirtq) & VIRTQ_AVAIL_F_NO_INTERRUPT;
bool fUsedNoNotify = virtioReadUsedRingFlags(pDevIns, pVirtio, pVirtq) & VIRTQ_USED_F_NO_NOTIFY; 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, " shadow: ............... %d (%d)\n", pVirtq->uQueueSize ? uUsedIdxShadow % pVirtq->uQueueSize : uUsedIdxShadow, uUsedIdxShadow);
pHlp->pfnPrintf(pHlp, " flags: ................ %s\n", fUsedNoNotify ? "NO_NOTIFY" : ""); pHlp->pfnPrintf(pHlp, " flags: ................ %s\n", fUsedNoNotify ? "NO_NOTIFY" : "");
pHlp->pfnPrintf(pHlp, "\n"); pHlp->pfnPrintf(pHlp, "\n");
#ifndef VIRTIO_REL_INFO_DUMP
if (!fEmpty) if (!fEmpty)
{ {
pHlp->pfnPrintf(pHlp, " desc chain:\n"); pHlp->pfnPrintf(pHlp, " desc chain:\n");
@ -718,6 +792,7 @@ DECLHIDDEN(void) virtioCoreR3VirtqInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, P
} }
} else } else
pHlp->pfnPrintf(pHlp, " no desc chains available\n"); pHlp->pfnPrintf(pHlp, " no desc chains available\n");
#endif /* !VIRTIO_REL_INFO_DUMP */
pHlp->pfnPrintf(pHlp, "\n"); pHlp->pfnPrintf(pHlp, "\n");
/* Avoid handling zero-sized queues, there is nothing to show anyway. */ /* 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"); pHlp->pfnPrintf(pHlp, " ------ - ----------- ---------------- ------- -------- ------------------\n");
for (uint16_t i = 0; i < pVirtq->uQueueSize; i++) for (uint16_t i = 0; i < pVirtq->uQueueSize; i++)
virtioCoreR3DescInfo(pHlp, &descTable[i], i, aszTails[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)); Log6Func(("%s avail shadow idx: %u\n", pVirtq->szName, pVirtq->uAvailIdxShadow));
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; 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 */ /** API Function: See header file */
DECLHIDDEN(int) virtioCoreR3VirtqAvailBufGet(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_t uVirtq, DECLHIDDEN(int) virtioCoreR3VirtqAvailBufGet(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, uint16_t uVirtq,
uint16_t uHeadIdx, PVIRTQBUF pVirtqBuf) 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}), * 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. * 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) if (cSegsIn + cSegsOut >= pVirtq->uQueueSize)
{ {
static volatile uint32_t s_cMessages = 0; static volatile uint32_t s_cMessages = 0;
static volatile uint32_t s_cThreshold = 1; static volatile uint32_t s_cThreshold = 1;
if (ASMAtomicIncU32(&s_cMessages) == ASMAtomicReadU32(&s_cThreshold)) 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", LogRelMax(64, ("Too many linked descriptors; check if the guest arranges descriptors in a loop "
cSegsIn, cSegsOut, pVirtq->uQueueSize, uDescIdx, pVirtq->szName)); "(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) if (ASMAtomicReadU32(&s_cMessages) != 1)
LogRelMax(64, ("(the above error has occured %u times so far)\n", ASMAtomicReadU32(&s_cMessages))); LogRelMax(64, ("(the above error has occured %u times so far)\n", ASMAtomicReadU32(&s_cMessages)));
ASMAtomicWriteU32(&s_cThreshold, ASMAtomicReadU32(&s_cThreshold) * 10); ASMAtomicWriteU32(&s_cThreshold, ASMAtomicReadU32(&s_cThreshold) * 10);
} }
break; 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). */ /* 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)) if (cSegsIn >= RT_ELEMENTS(pVirtqBuf->aSegsIn))
{ {
@ -1041,6 +1209,9 @@ DECLHIDDEN(int) virtioCoreR3VirtqAvailBufGet(PPDMDEVINS pDevIns, PVIRTIOCORE pVi
if (pVirtio->uDriverFeatures & VIRTIO_F_EVENT_IDX) if (pVirtio->uDriverFeatures & VIRTIO_F_EVENT_IDX)
virtioWriteUsedAvailEvent(pDevIns,pVirtio, pVirtq, pVirtq->uAvailIdxShadow + 1); 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) if (fRemove)
pVirtq->uAvailIdxShadow++; 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 * @todo r=aeichner: The increment of the shadow index is not atomic but this code can be called
* concurrently!! * 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); virtioWriteUsedElem(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow++, pVirtqBuf->uHeadIdx, (uint32_t)cbTotal);
#ifdef LOG_ENABLED #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, Log6Func((" Enqueue desc chain head idx %u to %s used ring @ %u\n", pVirtqBuf->uHeadIdx,
VIRTQNAME(pVirtio, uVirtq), pVirtq->uUsedIdxShadow)); 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); virtioWriteUsedElem(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow++, pVirtqBuf->uHeadIdx, (uint32_t)cbEnqueue);
#ifdef LOG_ENABLED #ifdef LOG_ENABLED
@ -1229,6 +1406,12 @@ DECLHIDDEN(int) virtioCoreVirtqUsedRingSync(PPDMDEVINS pDevIns, PVIRTIOCORE pVir
Log6Func((" Sync %s used ring (%u -> idx)\n", Log6Func((" Sync %s used ring (%u -> idx)\n",
pVirtq->szName, pVirtq->uUsedIdxShadow)); 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); virtioWriteUsedRingIdx(pDevIns, pVirtio, pVirtq, pVirtq->uUsedIdxShadow);
virtioCoreNotifyGuestDriver(pDevIns, pVirtio, uVirtq); 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) 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) if (uCause == VIRTIO_ISR_VIRTQ_INTERRUPT)
Log6Func(("Reason for interrupt - buffer added to 'used' ring.\n")); Log6Func(("Reason for interrupt - buffer added to 'used' ring.\n"));
else else
@ -1559,6 +1747,15 @@ static int virtioCommonCfgAccessed(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, PVIR
uint16_t uVirtq = pVirtio->uVirtqSelect; uint16_t uVirtq = pVirtio->uVirtqSelect;
int rc = VINF_SUCCESS; int rc = VINF_SUCCESS;
uint64_t val; 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 (VIRTIO_DEV_CONFIG_MATCH_MEMBER(uDeviceFeatures, VIRTIO_PCI_COMMON_CFG_T, uOffsetOfAccess))
{ {
if (fWrite) /* Guest WRITE pCommonCfg>uDeviceFeatures */ if (fWrite) /* Guest WRITE pCommonCfg>uDeviceFeatures */
@ -1724,6 +1921,10 @@ static int virtioCommonCfgAccessed(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, PVIR
fWrite ? "write" : "read ", uOffsetOfAccess, uOffsetOfAccess, cb)); fWrite ? "write" : "read ", uOffsetOfAccess, uOffsetOfAccess, cb));
return fWrite ? VINF_SUCCESS : VINF_IOM_MMIO_UNUSED_00; 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 #ifndef IN_RING3
RT_NOREF(pDevIns, pVirtioCC); RT_NOREF(pDevIns, pVirtioCC);
@ -2794,6 +2995,10 @@ DECLHIDDEN(void) virtioCoreR3VmStateChanged(PVIRTIOCORE pVirtio, VIRTIOVMSTATECH
*/ */
DECLHIDDEN(void) virtioCoreR3Term(PPDMDEVINS pDevIns, PVIRTIOCORE pVirtio, PVIRTIOCORECC pVirtioCC) 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) if (pVirtioCC->pbPrevDevSpecificCfg)
{ {
RTMemFree(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"); PDMDevHlpSTAMRegister(pDevIns, &pVirtio->StatWriteRC, STAMTYPE_PROFILE, "IO/WriteRC", STAMUNIT_TICKS_PER_CALL, "Profiling IO writes in RC");
# endif /* VBOX_WITH_STATISTICS */ # 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; return VINF_SUCCESS;
} }

View file

@ -36,6 +36,12 @@
#include <iprt/sg.h> #include <iprt/sg.h>
#include <iprt/types.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 #ifdef LOG_ENABLED
# define VIRTIO_HEX_DUMP(logLevel, pv, cb, base, title) \ # define VIRTIO_HEX_DUMP(logLevel, pv, cb, base, title) \
do { \ do { \
@ -457,6 +463,13 @@ typedef struct VIRTIOCORE
uint32_t fOfferLegacy; /**< Set at init call from dev-specific code */ uint32_t fOfferLegacy; /**< Set at init call from dev-specific code */
uint16_t uIrqMmio; /**< The interrupt number when Virtio-over-MMIO is used */ uint16_t uIrqMmio; /**< The interrupt number when Virtio-over-MMIO is used */
uint8_t uDeviceType; /**< The implemented device type for Virtio-over-MMIO */ 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. /** @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); 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 * 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 * 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 */ /** pszDesc */
"ARMv8 disassembler lexer", "ARMv8 disassembler lexer",
/** fFlags */ /** fFlags */
RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE, RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE_LOWER,
/** pszWhitespace */ /** pszWhitespace */
NULL, NULL,
/** pszNewline */ /** pszNewline */
@ -173,7 +173,7 @@ static void testDisas(const char *pszSub, uint8_t const *pabInstrs, uintptr_t uE
int rc = RTScriptLexCreateFromReader(&hLexSource, testDisasmLexerRead, int rc = RTScriptLexCreateFromReader(&hLexSource, testDisasmLexerRead,
NULL /*pfnDtor*/, &Rdr /*pvUser*/, cbSrc, NULL /*pfnDtor*/, &Rdr /*pvUser*/, cbSrc,
NULL /*phStrCacheId*/, NULL /*phStrCacheStringLit*/, NULL /*phStrCacheId*/, NULL /*phStrCacheStringLit*/,
&s_LexCfg); NULL /*phStrCacheComments*/, &s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS); RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
if (RT_FAILURE(rc)) if (RT_FAILURE(rc))
return; /* Can't do our work if this fails. */ 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. */ /* Build the lexer and compare that it semantically is equal to the source input. */
RTSCRIPTLEX hLexDis = NULL; RTSCRIPTLEX hLexDis = NULL;
rc = RTScriptLexCreateFromString(&hLexDis, szOutput, NULL /*phStrCacheId*/, rc = RTScriptLexCreateFromString(&hLexDis, szOutput, NULL /*phStrCacheId*/,
NULL /*phStrCacheStringLit*/, &s_LexCfg); NULL /*phStrCacheStringLit*/, NULL /*phStrCacheComments*/,
&s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS); RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
if (RT_SUCCESS(rc)) if (RT_SUCCESS(rc))
{ {
@ -484,13 +485,14 @@ static void testDisasComplianceAgaistCapstone(void)
rc = RTScriptLexCreateFromReader(&hLexCapstone, testDisasmLexerRead, rc = RTScriptLexCreateFromReader(&hLexCapstone, testDisasmLexerRead,
NULL /*pfnDtor*/, &Rdr /*pvUser*/, 0 /*cchBuf*/, NULL /*pfnDtor*/, &Rdr /*pvUser*/, 0 /*cchBuf*/,
NULL /*phStrCacheId*/, NULL /*phStrCacheStringLit*/, NULL /*phStrCacheId*/, NULL /*phStrCacheStringLit*/,
&s_LexCfg); NULL /*phStrCacheComments*/, &s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS); RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
/* Build the lexer and compare that it semantically is equal to the source input. */ /* Build the lexer and compare that it semantically is equal to the source input. */
RTSCRIPTLEX hLexDis = NULL; RTSCRIPTLEX hLexDis = NULL;
rc = RTScriptLexCreateFromString(&hLexDis, szOutput, NULL /*phStrCacheId*/, rc = RTScriptLexCreateFromString(&hLexDis, szOutput, NULL /*phStrCacheId*/,
NULL /*phStrCacheStringLit*/, &s_LexCfg); NULL /*phStrCacheStringLit*/, NULL /*phStrCacheComments*/,
&s_LexCfg);
RTTESTI_CHECK_RC(rc, VINF_SUCCESS); RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
if (RT_SUCCESS(rc)) if (RT_SUCCESS(rc))
{ {

View file

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

View file

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

View file

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

View file

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

View file

@ -643,6 +643,9 @@ bool UIMachineSettingsDisplay::validate(QList<UIValidationMessage> &messages)
m_f3DAccelerationSupported = graphicsControllerTypeCurrent() == KGraphicsControllerType_VBoxSVGA m_f3DAccelerationSupported = graphicsControllerTypeCurrent() == KGraphicsControllerType_VBoxSVGA
? UIGuestOSTypeHelpers::isWddmCompatibleOsType(m_strGuestOSTypeId) ? UIGuestOSTypeHelpers::isWddmCompatibleOsType(m_strGuestOSTypeId)
: false; : 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: */ /* For the rest of guest OS types 3D is available for VMSVGA only: */
else else
m_f3DAccelerationSupported = graphicsControllerTypeCurrent() == KGraphicsControllerType_VMSVGA; m_f3DAccelerationSupported = graphicsControllerTypeCurrent() == KGraphicsControllerType_VMSVGA;

View file

@ -1744,10 +1744,17 @@ SUPR0DECL(bool) SUPR0FpuBegin(bool fCtxHook)
*/ */
Assert(fCtxHook || !RTThreadPreemptIsEnabled(NIL_RTTHREAD)); Assert(fCtxHook || !RTThreadPreemptIsEnabled(NIL_RTTHREAD));
kernel_fpu_begin(); 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) if (fCtxHook)
# endif # endif
{
# if RTLNX_VER_MIN(6,15,0)
if (!irqs_disabled())
fpregs_unlock();
# else
preempt_enable(); preempt_enable();
# endif
}
return false; /** @todo Not sure if we have license to use any extended state, or 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, * if we're limited to the SSE & x87 FPU. If it's the former,
* we should return @a true and the caller can skip * 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) #if RTLNX_VER_MIN(4,19,0)
/* HACK ALERT! See SUPR0FpuBegin for an explanation of this. */ /* HACK ALERT! See SUPR0FpuBegin for an explanation of this. */
Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD)); 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) if (fCtxHook)
# endif # endif
{
# if RTLNX_VER_MIN(6,15,0)
if (!irqs_disabled())
fpregs_lock();
# else
preempt_disable(); preempt_disable();
# endif
}
kernel_fpu_end(); kernel_fpu_end();
#endif #endif
} }

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -136,29 +136,34 @@ mv virtualbox.xml $RPM_BUILD_ROOT/usr/share/mime/packages
old_path="$PATH" old_path="$PATH"
PATH=${PATH#/opt/rh/devtoolset-4/root/usr/bin:} PATH=${PATH#/opt/rh/devtoolset-4/root/usr/bin:}
%endif %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 for d in /lib/modules/*; do
if [ -L $d/build ]; then if [ -L $d/build ]; then
rm -f /tmp/vboxdrv-Module.symvers rm -f /tmp/vboxdrv-Module.symvers
./src/vboxhost/build_in_tmp \ ./src/vboxhost/build_in_tmp \
--save-module-symvers /tmp/vboxdrv-Module.symvers \ --save-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxdrv \ --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% %INSTMOD%
./src/vboxhost/build_in_tmp \ ./src/vboxhost/build_in_tmp \
--use-module-symvers /tmp/vboxdrv-Module.symvers \ --use-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxnetflt \ --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% %INSTMOD%
./src/vboxhost/build_in_tmp \ ./src/vboxhost/build_in_tmp \
--use-module-symvers /tmp/vboxdrv-Module.symvers \ --use-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxnetadp \ --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% %INSTMOD%
if [ -e `pwd`/src/vboxhost/vboxpci ]; then if [ -e `pwd`/src/vboxhost/vboxpci ]; then
./src/vboxhost/build_in_tmp \ ./src/vboxhost/build_in_tmp \
--use-module-symvers /tmp/vboxdrv-Module.symvers \ --use-module-symvers /tmp/vboxdrv-Module.symvers \
--module-source `pwd`/src/vboxhost/vboxpci \ --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% %INSTMOD%
fi fi
fi fi
@ -168,6 +173,9 @@ done
PATH="$old_path" PATH="$old_path"
unset old_path unset old_path
%endif %endif
%if "%BUILDREL%" == "openSUSE156"
unset VBOX_EXTRA_FLAGS
%endif
rm -r src rm -r src
%endif %endif
for i in additions/VBoxGuestAdditions.iso; do for i in additions/VBoxGuestAdditions.iso; do

View file

@ -124,10 +124,10 @@ ifneq ($(MAKECMDGOALS),clean)
$(error Cannot detect package distribution (rpmrel=$(rpmrel))) $(error Cannot detect package distribution (rpmrel=$(rpmrel)))
endif 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 rpmspec := rpm_redhat
endif 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 rpmspec := rpm_suse
endif endif
ifeq ($(rpmspec),) ifeq ($(rpmspec),)
@ -182,7 +182,7 @@ cfg_flags := $(if $(NOQT),--disable-qt,) \
$(if $(NOWINE),,--setup-wine) \ $(if $(NOWINE),,--setup-wine) \
$(if $(VNC),--enable-vnc,) \ $(if $(VNC),--enable-vnc,) \
$(if $(PATH_OUT_BASE),--out-base-dir=$(PATH_OUT_BASE),) \ $(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 \ bld_flags := LOCALCFG=$(instlin)/rpm/LocalConfig.kmk \
PATH_OUT=$(builddir) \ PATH_OUT=$(builddir) \

View file

@ -100,9 +100,10 @@ fi
KERN_VER=`uname -r` 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 case "$KERN_VER" in
5.15.0-*.el8uek*) PATH="/opt/rh/gcc-toolset-11/root/usr/bin:$PATH";; 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 esac
if test -e "${MODULE_SRC}/vboxpci"; then 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 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.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.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.9: S11.4 SRU30 -> TBD
# python 3.11: S11.4 SRU54 -> 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 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" 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 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" 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 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" 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" 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. 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 fi
return 1 return 1
@ -239,7 +242,7 @@ if test -x "$BIN_PKG"; then
checkdep_ips "x11/library/mesa" checkdep_ips "x11/library/mesa"
checkdep_ips "x11/library/toolkit/libxt" checkdep_ips "x11/library/toolkit/libxt"
checkdep_ips "x11/library/xcb-util" 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"
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 else

View file

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

View file

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

View file

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

View file

@ -1160,7 +1160,7 @@
<!-- Property which defines if we need to show the customization dialog or not. <!-- 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. --> 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" ?> <?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
<!-- Property which defines whether the license dialog will be shown or not. --> <!-- Property which defines whether the license dialog will be shown or not. -->
<Property Id="VBOX_SHOW_LICENSE_DLG" Value="1" /> <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="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="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="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="(PREVIOUSVERSIONDETECTED 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="(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="VBoxCheckSerialDlg" Control="Next" Event="NewDialog" Value="VBoxWrongSerialDlg" Condition="VBOX_SERIAL_IS_VALID=&quot;0&quot;" />
<Publish Dialog="VBoxWrongSerialDlg" Control="Back" Event="NewDialog" Value="VBoxCheckSerialDlg" /> <Publish Dialog="VBoxWrongSerialDlg" Control="Back" Event="NewDialog" Value="VBoxCheckSerialDlg" />

View file

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

View file

@ -3380,14 +3380,6 @@ DECLCALLBACK(int) ConsoleVRDPServer::ClipboardServiceExtension(void *pvExtension
} }
} break; } 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: case VBOX_CLIPBOARD_EXT_FN_DATA_READ:
{ {
/* The clipboard service expects that the pvData buffer will be filled /* 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: 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); vrc = VERR_WRONG_PARAMETER_COUNT);
ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mpaParms[idx].type == VBOX_HGCM_SVC_PARM_32BIT, ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mpaParms[idx].type == VBOX_HGCM_SVC_PARM_32BIT,
("type=%u\n", pSvcCbData->mpaParms[idx].type), ("type=%u\n", pSvcCbData->mpaParms[idx].type),
@ -599,8 +599,6 @@ int GuestDirectory::i_onDirNotify(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRL
/* /*
* Fetch buffer with packed directory entries. * 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, ASSERT_GUEST_MSG_STMT_BREAK(pSvcCbData->mpaParms[idx].type == VBOX_HGCM_SVC_PARM_PTR,
("type=%u\n", pSvcCbData->mpaParms[idx].type), ("type=%u\n", pSvcCbData->mpaParms[idx].type),
vrc = VERR_WRONG_PARAMETER_TYPE); vrc = VERR_WRONG_PARAMETER_TYPE);
@ -608,7 +606,6 @@ int GuestDirectory::i_onDirNotify(PVBOXGUESTCTRLHOSTCBCTX pCbCtx, PVBOXGUESTCTRL
uint32_t cbBuf; uint32_t cbBuf;
vrc = HGCMSvcGetPv(&pSvcCbData->mpaParms[idx], &pvBuf, &cbBuf); vrc = HGCMSvcGetPv(&pSvcCbData->mpaParms[idx], &pvBuf, &cbBuf);
AssertRCBreak(vrc); 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)); 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); 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: case RECORDINGFRAME_TYPE_CURSOR_SHAPE:
{ {
RecordingVideoFrameFree(pCodec->Video.VPX.pCursorShape);
pCodec->Video.VPX.pCursorShape = RecordingVideoFrameDup(&pFrame->u.CursorShape); pCodec->Video.VPX.pCursorShape = RecordingVideoFrameDup(&pFrame->u.CursorShape);
AssertPtr(pCodec->Video.VPX.pCursorShape); AssertPtr(pCodec->Video.VPX.pCursorShape);

View file

@ -29,11 +29,13 @@
/********************************************************************************************************************************* /*********************************************************************************************************************************
* Header Files * * Header Files *
*********************************************************************************************************************************/ *********************************************************************************************************************************/
#include <VBox/com/com.h>
#include <VBox/com/array.h> #include <VBox/com/array.h>
#include <VBox/com/string.h> #include <VBox/com/string.h>
#include <iprt/mem.h> #include <iprt/mem.h>
#include <iprt/rand.h> #include <iprt/rand.h>
#include <iprt/stream.h>
#include <iprt/string.h> #include <iprt/string.h>
#include <iprt/test.h> #include <iprt/test.h>
#include <iprt/uni.h> #include <iprt/uni.h>
@ -47,8 +49,21 @@ int main()
{ {
RTTestBanner(hTest); 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; com::SafeArray<int> aInt;
aInt.push_front(42);
/* Test NULL'ing. */
aInt.setNull();
/* Sizes / Pre-allocations. */
RTTESTI_CHECK(aInt.size() == 0); RTTESTI_CHECK(aInt.size() == 0);
com::SafeArray<int> aInt2(42); com::SafeArray<int> aInt2(42);
@ -89,6 +104,54 @@ int main()
RTTESTI_CHECK_MSG(aInt[i] == aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1], RTTESTI_CHECK_MSG(aInt[i] == aPushToFront[RT_ELEMENTS(aPushToFront) - i - 1],
("Got %d, expected %d\n", 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. */ /* A bit more data. */
aInt.setNull(); aInt.setNull();
for (size_t i = 0; i < RTRandU32Ex(_4K, _64M); i++) for (size_t i = 0; i < RTRandU32Ex(_4K, _64M); i++)

View file

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

View file

@ -81,6 +81,8 @@ typedef struct RTSCRIPTLEXINT
RTSTRCACHE hStrCacheId; RTSTRCACHE hStrCacheId;
/** String literal string cache. */ /** String literal string cache. */
RTSTRCACHE hStrCacheStringLit; RTSTRCACHE hStrCacheStringLit;
/** Comment string cache. */
RTSTRCACHE hStrCacheComments;
/** Status code from the reader. */ /** Status code from the reader. */
int rcRdr; int rcRdr;
/** Internal error info. */ /** Internal error info. */
@ -105,11 +107,13 @@ typedef RTSCRIPTLEXINT *PRTSCRIPTLEXINT;
/** Free the identifier string cache literal on destruction. */ /** Free the identifier string cache literal on destruction. */
#define RTSCRIPT_LEX_INT_F_STR_CACHE_ID_FREE RT_BIT_32(0) #define RTSCRIPT_LEX_INT_F_STR_CACHE_ID_FREE RT_BIT_32(0)
/** Free the string literal string cache literal on destruction. */ /** Free the string literal string cache literal on destruction. */
#define RTSCRIPT_LEX_INT_F_STR_CACHE_STR_LIT_FREE RT_BIT_32(1) #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. */ /** 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) if (fMatched)
{ {
pThis->Pos.iLine++; 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 * Checks whether the character is the beginning of a multi line comment, skipping the whole
* comment if necessary. * comment if necessary.
@ -291,12 +322,8 @@ DECLINLINE(bool) rtScriptLexIsNewlineConsume(PRTSCRIPTLEXINT pThis, char ch)
*/ */
DECLINLINE(bool) rtScriptLexIsMultiLineCommentConsume(PRTSCRIPTLEXINT pThis, char ch) DECLINLINE(bool) rtScriptLexIsMultiLineCommentConsume(PRTSCRIPTLEXINT pThis, char ch)
{ {
const char **papszCommentMultiStart = pThis->pCfg->papszCommentMultiStart;
unsigned idxComment = 0; unsigned idxComment = 0;
if (rtScriptLexIsMultiLineComment(pThis, ch, &idxComment))
if ( papszCommentMultiStart
&& rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszCommentMultiStart,
&idxComment))
{ {
/* Look for the matching closing lexeme in the input consuming everything along the way. */ /* Look for the matching closing lexeme in the input consuming everything along the way. */
const char *pszClosing = pThis->pCfg->papszCommentMultiEnd[idxComment]; 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 * Checks whether the character is the beginning of a single line comment, skipping the whole
* comment if necessary. * comment if necessary.
@ -335,11 +383,7 @@ DECLINLINE(bool) rtScriptLexIsMultiLineCommentConsume(PRTSCRIPTLEXINT pThis, cha
*/ */
DECLINLINE(bool) rtScriptLexIsSingleLineCommentConsume(PRTSCRIPTLEXINT pThis, char ch) DECLINLINE(bool) rtScriptLexIsSingleLineCommentConsume(PRTSCRIPTLEXINT pThis, char ch)
{ {
const char **papszCommentSingleStart = pThis->pCfg->papszCommentSingleStart; if (rtScriptLexIsSingleLineComment(pThis, ch, NULL))
if ( papszCommentSingleStart
&& rtScriptLexLocateSubStrInStrArrayMatchConsume(pThis, ch, papszCommentSingleStart,
NULL))
{ {
for (;;) for (;;)
{ {
@ -374,13 +418,14 @@ static int rtScriptLexFillBuffer(PRTSCRIPTLEXINT pThis)
AssertReturn(!(pThis->fFlags & RTSCRIPT_LEX_INT_F_EOS), VERR_INVALID_STATE); 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 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]; cchToRead = pThis->pchCur - &pThis->achBuf[0];
/* Move the rest to the front. */ /* Move the rest to the front. */
memmove(&pThis->achBuf[0], pThis->pchCur, pThis->cchBuf - cchToRead); size_t const cchLeft = pThis->cchBuf - cchToRead;
pchRead = (char *)pThis->pchCur + 1; memmove(&pThis->achBuf[0], pThis->pchCur, cchLeft);
memset(pchRead, 0, cchToRead); pchRead = &pThis->achBuf[0] + cchLeft;
} }
if (cchToRead) if (cchToRead)
@ -394,6 +439,8 @@ static int rtScriptLexFillBuffer(PRTSCRIPTLEXINT pThis)
pThis->offBufRead += cchRead; pThis->offBufRead += cchRead;
if (rc == VINF_EOF) if (rc == VINF_EOF)
pThis->fFlags |= RTSCRIPT_LEX_INT_F_EOS; pThis->fFlags |= RTSCRIPT_LEX_INT_F_EOS;
if (cchRead < cchToRead)
memset(pchRead + cchRead, 0, cchToRead - cchRead);
rc = VINF_SUCCESS; rc = VINF_SUCCESS;
} }
else else
@ -421,19 +468,11 @@ static void rtScriptLexProduceTokEos(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN pT
} }
/** RTDECL(int) RTScriptLexProduceTokError(RTSCRIPTLEX hScriptLex, PRTSCRIPTLEXTOKEN pTok,
* Produce an error token with the given error message. int rc, const char *pszMsg, ...)
*
* @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,
int rc, const char *pszMsg, ...)
{ {
PRTSCRIPTLEXINT pThis = hScriptLex;
va_list va; va_list va;
va_start(va, pszMsg); 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. * Create the token from the exact match.
* *
@ -475,7 +726,7 @@ static void rtScriptLexProduceTokFromExactMatch(PRTSCRIPTLEXINT pThis, PRTSCRIPT
pTok->Type.Punctuator.pPunctuator = pMatch; pTok->Type.Punctuator.pPunctuator = pMatch;
break; break;
default: default:
rtScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER, RTScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER,
"Lexer: The match contains an invalid token type: %d\n", "Lexer: The match contains an invalid token type: %d\n",
pTok->enmType); pTok->enmType);
} }
@ -531,8 +782,15 @@ static int rtScriptLexProduceToken(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN pTok
char ch = RTScriptLexGetCh(pThis); char ch = RTScriptLexGetCh(pThis);
PCRTSCRIPTLEXTOKMATCH pMatch = NULL; PCRTSCRIPTLEXTOKMATCH pMatch = NULL;
unsigned idxComment = 0;
if (ch == '\0') if (ch == '\0')
rtScriptLexProduceTokEos(pThis, pTok); 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)) else if (rtScriptLexLocateExactMatchConsume(pThis, ch, &pMatch))
rtScriptLexProduceTokFromExactMatch(pThis, pTok, pMatch); rtScriptLexProduceTokFromExactMatch(pThis, pTok, pMatch);
else if (!rtScriptLexProduceTokFromRules(pThis, ch, pTok)) else if (!rtScriptLexProduceTokFromRules(pThis, ch, pTok))
@ -540,7 +798,7 @@ static int rtScriptLexProduceToken(PRTSCRIPTLEXINT pThis, PRTSCRIPTLEXTOKEN pTok
if (pThis->pCfg->pfnProdDef) if (pThis->pCfg->pfnProdDef)
pThis->rcRdr = pThis->pCfg->pfnProdDef(pThis, ch, pTok, pThis->pCfg->pvProdDefUser); pThis->rcRdr = pThis->pCfg->pfnProdDef(pThis, ch, pTok, pThis->pCfg->pvProdDefUser);
else else
rtScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER, RTScriptLexProduceTokError(pThis, pTok, VERR_INVALID_PARAMETER,
"Lexer: Invalid character found in input: %c\n", "Lexer: Invalid character found in input: %c\n",
ch); ch);
} }
@ -573,12 +831,16 @@ static int rtScriptLexPopulate(PRTSCRIPTLEXINT pThis)
RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEXRDR pfnReader, RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEXRDR pfnReader,
PFNRTSCRIPTLEXDTOR pfnDtor, void *pvUser, PFNRTSCRIPTLEXDTOR pfnDtor, void *pvUser,
size_t cchBuf, PRTSTRCACHE phStrCacheId, PRTSTRCACHE phStrCacheStringLit, size_t cchBuf, PRTSTRCACHE phStrCacheId, PRTSTRCACHE phStrCacheStringLit,
PCRTSCRIPTLEXCFG pCfg) PRTSTRCACHE phStrCacheComments, PCRTSCRIPTLEXCFG pCfg)
{ {
AssertPtrReturn(phScriptLex, VERR_INVALID_POINTER); AssertPtrReturn(phScriptLex, VERR_INVALID_POINTER);
AssertPtrReturn(pfnReader, VERR_INVALID_POINTER); AssertPtrReturn(pfnReader, VERR_INVALID_POINTER);
AssertPtrReturn(pCfg, 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) if (!cchBuf)
cchBuf = _16K; cchBuf = _16K;
int rc = VINF_SUCCESS; int rc = VINF_SUCCESS;
@ -602,6 +864,10 @@ RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEX
pThis->pchCur = NULL; pThis->pchCur = NULL;
pThis->hStrCacheId = NULL; pThis->hStrCacheId = NULL;
pThis->hStrCacheStringLit = 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"); rc = RTStrCacheCreate(&pThis->hStrCacheId, "LEX-Ide");
if (RT_SUCCESS(rc)) if (RT_SUCCESS(rc))
@ -624,6 +890,14 @@ RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEX
else else
pThis->fFlags |= RTSCRIPT_LEX_INT_F_STR_CACHE_STR_LIT_FREE; 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; return VINF_SUCCESS;
} }
@ -633,6 +907,8 @@ RTDECL(int) RTScriptLexCreateFromReader(PRTSCRIPTLEX phScriptLex, PFNRTSCRIPTLEX
RTStrCacheDestroy(pThis->hStrCacheId); RTStrCacheDestroy(pThis->hStrCacheId);
} }
if (pThis->hStrCacheComments)
RTStrCacheDestroy(pThis->hStrCacheComments);
RTMemFree(pThis); RTMemFree(pThis);
} }
else else
@ -667,10 +943,10 @@ static DECLCALLBACK(int) rtScriptLexReaderStr(RTSCRIPTLEX hScriptLex, size_t off
RTDECL(int) RTScriptLexCreateFromString(PRTSCRIPTLEX phScriptLex, const char *pszSrc, PRTSTRCACHE phStrCacheId, 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, 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, RTDECL(int) RTScriptLexCreateFromFile(PRTSCRIPTLEX phScriptLex, const char *pszFilename, PRTSTRCACHE phStrCacheId,
PRTSTRCACHE phStrCacheStringLit, PCRTSCRIPTLEXCFG pCfg) PRTSTRCACHE phStrCacheStringLit, PRTSTRCACHE phStrCacheComments, PCRTSCRIPTLEXCFG pCfg)
{ {
RTFILE hFile; RTFILE hFile;
int rc = RTFileOpen(&hFile, pszFilename, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN); int rc = RTFileOpen(&hFile, pszFilename, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN);
if (RT_SUCCESS(rc)) if (RT_SUCCESS(rc))
{ {
rc = RTScriptLexCreateFromReader(phScriptLex, rtScriptLexReaderFile, rtScriptLexDtorFile, (void *)hFile, 0, rc = RTScriptLexCreateFromReader(phScriptLex, rtScriptLexReaderFile, rtScriptLexDtorFile, (void *)hFile, 0,
phStrCacheId, phStrCacheStringLit, pCfg); phStrCacheId, phStrCacheStringLit, phStrCacheComments, pCfg);
if (RT_FAILURE(rc)) if (RT_FAILURE(rc))
RTFileClose(hFile); RTFileClose(hFile);
} }
@ -728,6 +1004,8 @@ RTDECL(void) RTScriptLexDestroy(RTSCRIPTLEX hScriptLex)
RTStrCacheDestroy(pThis->hStrCacheId); RTStrCacheDestroy(pThis->hStrCacheId);
if (pThis->fFlags & RTSCRIPT_LEX_INT_F_STR_CACHE_STR_LIT_FREE) if (pThis->fFlags & RTSCRIPT_LEX_INT_F_STR_CACHE_STR_LIT_FREE)
RTStrCacheDestroy(pThis->hStrCacheStringLit); RTStrCacheDestroy(pThis->hStrCacheStringLit);
if (pThis->fFlags & RTSCRIPT_LEX_INT_F_STR_CACHE_COMMENTS_FREE)
RTStrCacheDestroy(pThis->hStrCacheComments);
if (pThis->pszStrLit) if (pThis->pszStrLit)
RTStrFree(pThis->pszStrLit); RTStrFree(pThis->pszStrLit);
@ -832,6 +1110,10 @@ RTDECL(char) RTScriptLexPeekChEx(RTSCRIPTLEX hScriptLex, unsigned idx, uint32_t
PRTSCRIPTLEXINT pThis = hScriptLex; PRTSCRIPTLEXINT pThis = hScriptLex;
AssertPtrReturn(pThis, '\0'); 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. */ /* Just return the character if it is in the current buffer. */
char ch = '\0'; char ch = '\0';
if (RT_LIKELY(pThis->pchCur + idx < &pThis->achBuf[pThis->cchBuf])) if (RT_LIKELY(pThis->pchCur + idx < &pThis->achBuf[pThis->cchBuf]))
@ -843,9 +1125,13 @@ RTDECL(char) RTScriptLexPeekChEx(RTSCRIPTLEX hScriptLex, unsigned idx, uint32_t
AssertReleaseFailed(); AssertReleaseFailed();
} }
if ( (pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_CASE_INSENSITIVE) if (!(fFlags & RTSCRIPT_LEX_CONV_F_NOTHING))
&& !(fFlags & RTSCRIPT_LEX_CONV_F_NOTHING)) {
ch = RT_C_TO_LOWER(ch); 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; return ch;
} }
@ -879,9 +1165,12 @@ RTDECL(void) RTScriptLexSkipWhitespace(RTSCRIPTLEX hScriptLex)
const char *pszWs = pThis->pCfg->pszWhitespace ? pThis->pCfg->pszWhitespace : g_szWsDef; const char *pszWs = pThis->pCfg->pszWhitespace ? pThis->pCfg->pszWhitespace : g_szWsDef;
if ( rtScriptLexLocateChInStrConsume(pThis, ch, pszWs) if ( rtScriptLexLocateChInStrConsume(pThis, ch, pszWs)
|| rtScriptLexIsNewlineConsume(pThis, ch) || rtScriptLexIsNewlineConsume(pThis, ch))
|| rtScriptLexIsMultiLineCommentConsume(pThis, ch) continue;
|| rtScriptLexIsSingleLineCommentConsume(pThis, ch))
if ( !(pThis->pCfg->fFlags & RTSCRIPT_LEX_CFG_F_COMMENTS_AS_TOKENS)
&& ( rtScriptLexIsMultiLineCommentConsume(pThis, ch)
|| rtScriptLexIsSingleLineCommentConsume(pThis, ch)))
continue; continue;
/* All white space skipped, next is some real content. */ /* 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? */ /* Some hex prefix? */
char chNext = RTScriptLexPeekCh(hScriptLex, 1); char chNext = RTScriptLexPeekCh(hScriptLex, 1);
if (chNext == 'x') if (chNext == 'x' || chNext == 'X')
{ {
uBase = 16; uBase = 16;
RTScriptLexConsumeCh(hScriptLex); RTScriptLexConsumeCh(hScriptLex);
@ -928,7 +1217,9 @@ RTDECL(int) RTScriptLexScanNumber(RTSCRIPTLEX hScriptLex, uint8_t uBase, bool fA
for (;;) for (;;)
{ {
if ( (ch < '0' || ch > '9') 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) if (pTok->Type.Number.enmType == RTSCRIPTLEXTOKNUMTYPE_INTEGER)
pTok->Type.Number.Type.i64 = -(int64_t)u64; 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); Assert(uBase == 16);
u64 = (u64 << 4) + 10 + (ch - 'a'); u64 = (u64 << 4) + 10 + (ch - 'a');
} }
else if (ch >= 'A' && ch <= 'F')
{
Assert(uBase == 16);
u64 = (u64 << 4) + 10 + (ch - 'A');
}
ch = RTScriptLexConsumeCh(hScriptLex); ch = RTScriptLexConsumeCh(hScriptLex);
} }
@ -973,13 +1269,13 @@ RTDECL(int) RTScriptLexScanIdentifier(RTSCRIPTLEX hScriptLex, char ch,
if ( idx == sizeof(aszIde) - 1 if ( idx == sizeof(aszIde) - 1
&& rtScriptLexLocateChInStrConsume(hScriptLex, ch, pszCharSet)) && 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. */ /* Insert into string cache. */
pTok->enmType = RTSCRIPTLEXTOKTYPE_IDENTIFIER; pTok->enmType = RTSCRIPTLEXTOKTYPE_IDENTIFIER;
pTok->Type.Id.pszIde = RTStrCacheEnterN(pThis->hStrCacheId, &aszIde[0], idx); pTok->Type.Id.pszIde = RTStrCacheEnterN(pThis->hStrCacheId, &aszIde[0], idx);
if (RT_UNLIKELY(!pTok->Type.Id.pszIde)) 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; pTok->PosEnd = pThis->Pos;
return VINF_SUCCESS; return VINF_SUCCESS;
@ -1004,7 +1300,7 @@ static int rtScriptLexScanStringLiteralChAdd(PRTSCRIPTLEXINT pThis, char ch, uin
{ {
/* Increase memory. */ /* Increase memory. */
size_t cchMaxNew = pThis->cchStrLitMax + 64; size_t cchMaxNew = pThis->cchStrLitMax + 64;
char *pszNew = NULL; char *pszNew = pThis->pszStrLit;
rc = RTStrRealloc(&pszNew, cchMaxNew * sizeof(char)); rc = RTStrRealloc(&pszNew, cchMaxNew * sizeof(char));
if (RT_SUCCESS(rc)) if (RT_SUCCESS(rc))
{ {
@ -1033,29 +1329,31 @@ RTDECL(int) RTScriptLexScanStringLiteralC(RTSCRIPTLEX hScriptLex, char ch,
uint32_t idxChCur = 0; uint32_t idxChCur = 0;
int rc = rtScriptLexScanStringLiteralChAdd(pThis, '\0', idxChCur); int rc = rtScriptLexScanStringLiteralChAdd(pThis, '\0', idxChCur);
if (RT_FAILURE(rc)) 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 (;;) for (;;)
{ {
if (ch == '\0') 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 == '\"') else if (ch == '\"')
{ {
RTScriptLexConsumeCh(hScriptLex);
/* End of string, add it to the string literal cache and build the token. */ /* End of string, add it to the string literal cache and build the token. */
pTok->enmType = RTSCRIPTLEXTOKTYPE_STRINGLIT; pTok->enmType = RTSCRIPTLEXTOKTYPE_STRINGLIT;
pTok->Type.StringLit.cchString = idxChCur; pTok->Type.StringLit.cchString = idxChCur;
pTok->Type.StringLit.pszString = RTStrCacheEnterN(pThis->hStrCacheStringLit, pThis->pszStrLit, idxChCur); pTok->Type.StringLit.pszString = RTStrCacheEnterN(pThis->hStrCacheStringLit, pThis->pszStrLit, idxChCur);
if (RT_UNLIKELY(!pTok->Type.StringLit.pszString)) 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 else
break; break;
} }
else if (ch == '\\') else if (ch == '\\')
{ {
/* Start of escape sequence. */ /* Start of escape sequence. */
RTScriptLexConsumeCh(hScriptLex); RTScriptLexConsumeChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
ch = RTScriptLexGetCh(hScriptLex); ch = RTScriptLexGetChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
switch (ch) switch (ch)
{ {
case 'a': /* Alert (Bell) */ case 'a': /* Alert (Bell) */
@ -1103,7 +1401,7 @@ RTDECL(int) RTScriptLexScanStringLiteralC(RTSCRIPTLEX hScriptLex, char ch,
case 'U': /* Unicode point */ case 'U': /* Unicode point */
default: default:
/* Not supported for now. */ /* 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)) if (RT_SUCCESS(rc))
idxChCur++; idxChCur++;
else 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); ch = RTScriptLexConsumeChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
} }
@ -1131,13 +1429,13 @@ RTDECL(int) RTScriptLexScanStringLiteralPascal(RTSCRIPTLEX hScriptLex, char ch,
uint32_t idxChCur = 0; uint32_t idxChCur = 0;
int rc = rtScriptLexScanStringLiteralChAdd(pThis, '\0', idxChCur); int rc = rtScriptLexScanStringLiteralChAdd(pThis, '\0', idxChCur);
if (RT_FAILURE(rc)) 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); ch = RTScriptLexGetChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
for (;;) for (;;)
{ {
if (ch == '\0') 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 == '\'') else if (ch == '\'')
{ {
/* /*
@ -1152,7 +1450,7 @@ RTDECL(int) RTScriptLexScanStringLiteralPascal(RTSCRIPTLEX hScriptLex, char ch,
pTok->Type.StringLit.cchString = idxChCur; pTok->Type.StringLit.cchString = idxChCur;
pTok->Type.StringLit.pszString = RTStrCacheEnterN(pThis->hStrCacheStringLit, pThis->pszStrLit, idxChCur); pTok->Type.StringLit.pszString = RTStrCacheEnterN(pThis->hStrCacheStringLit, pThis->pszStrLit, idxChCur);
if (RT_UNLIKELY(!pTok->Type.StringLit.pszString)) 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 else
break; break;
} }
@ -1163,7 +1461,7 @@ RTDECL(int) RTScriptLexScanStringLiteralPascal(RTSCRIPTLEX hScriptLex, char ch,
if (RT_SUCCESS(rc)) if (RT_SUCCESS(rc))
idxChCur++; idxChCur++;
else 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); ch = RTScriptLexConsumeChEx(hScriptLex, RTSCRIPT_LEX_CONV_F_NOTHING);
} }

View file

@ -62,6 +62,18 @@
# define PAGE_READONLY_EXEC PAGE_READONLY # define PAGE_READONLY_EXEC PAGE_READONLY
#endif #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 /** @def IPRT_USE_ALLOC_VM_AREA_FOR_EXEC
* Whether we use alloc_vm_area (3.2+) for executable memory. * 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 * 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) if (cPages > 255)
{ {
# ifdef __GFP_REPEAT
/* Try hard to allocate the memory, but the allocation attempt might fail. */ /* Try hard to allocate the memory, but the allocation attempt might fail. */
fFlagsLnx |= __GFP_REPEAT; fFlagsLnx |= MY_GFP_REPEAT;
# endif
# ifdef __GFP_NOMEMALLOC # ifdef __GFP_NOMEMALLOC
/* Introduced with Linux 2.6.12: Don't use emergency reserves */ /* Introduced with Linux 2.6.12: Don't use emergency reserves */
fFlagsLnx |= __GFP_NOMEMALLOC; 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. */ /* 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) #if (defined(RT_ARCH_AMD64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32)
/* ZONE_DMA32: 0-4GB */ /* 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); false /* non-contiguous */, fExecutable, VERR_NO_LOW_MEMORY, pszTag);
if (RT_FAILURE(rc)) if (RT_FAILURE(rc))
#endif #endif
#ifdef RT_ARCH_AMD64 #ifdef RT_ARCH_AMD64
/* ZONE_DMA: 0-16MB */ /* 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); false /* non-contiguous */, fExecutable, VERR_NO_LOW_MEMORY, pszTag);
#else #else
# ifdef CONFIG_X86_PAE # ifdef CONFIG_X86_PAE

View file

@ -422,7 +422,11 @@ static void rtTimerLnxStopSubTimer(PRTTIMERLNXSUBTIMER pSubTimer, bool fHighRes)
} }
else else
#endif #endif
# if RTLNX_VER_MIN(6,15,0)
timer_delete(&pSubTimer->u.Std.LnxTimer);
#else
del_timer(&pSubTimer->u.Std.LnxTimer); del_timer(&pSubTimer->u.Std.LnxTimer);
#endif
rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED); rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED);
} }
@ -470,7 +474,11 @@ static void rtTimerLnxDestroyIt(PRTTIMER pTimer)
hrtimer_cancel(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer); hrtimer_cancel(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer);
else else
#endif #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); 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 #ifdef RTTIMER_LINUX_WITH_HRTIMER
if (pTimer->fHighRes) 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); hrtimer_init(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
pTimer->aSubTimers[iCpu].u.Hr.LnxTimer.function = rtTimerLinuxHrCallback; pTimer->aSubTimers[iCpu].u.Hr.LnxTimer.function = rtTimerLinuxHrCallback;
#endif
} }
else else
#endif #endif

View file

@ -97,7 +97,7 @@ DECLHIDDEN(int) rtldrNativeLoad(const char *pszFilename, uintptr_t *phHandle, ui
} }
const char *pszDlError = dlerror(); 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)); LogRel(("rtldrNativeLoad: dlopen('%s', RTLD_NOW | RTLD_LOCAL) failed: %s\n", pszFilename, pszDlError));
return VERR_FILE_NOT_FOUND; return VERR_FILE_NOT_FOUND;
} }

View file

@ -152,6 +152,7 @@
OPENSSL_sk_pop_free OPENSSL_sk_pop_free
OPENSSL_sk_value OPENSSL_sk_value
PEM_read_bio_DHparams PEM_read_bio_DHparams
PEM_read_bio_Parameters
RAND_load_file RAND_load_file
RAND_seed RAND_seed
RAND_status RAND_status
@ -166,6 +167,7 @@
SSL_CTX_get_cert_store SSL_CTX_get_cert_store
;exported above: SSL_CTX_load_verify_locations ;exported above: SSL_CTX_load_verify_locations
;exported above: SSL_CTX_new ;exported above: SSL_CTX_new
SSL_CTX_set0_tmp_dh_pkey
SSL_CTX_set_client_CA_list SSL_CTX_set_client_CA_list
SSL_CTX_set_default_passwd_cb SSL_CTX_set_default_passwd_cb
SSL_CTX_set_default_passwd_cb_userdata 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); va_end(args);
} }
#if LIBXML_VERSION >= 21206 #if LIBXML_VERSION >= 21205
static void xmlStructuredErrorFunc(void *userData, const xmlError *error) RT_NOTHROW_DEF static void xmlStructuredErrorFunc(void *userData, const xmlError *error) RT_NOTHROW_DEF
{ {
NOREF(userData); NOREF(userData);
@ -1893,7 +1893,7 @@ XmlParserBase::XmlParserBase()
throw std::bad_alloc(); throw std::bad_alloc();
/* per-thread so it must be here */ /* per-thread so it must be here */
xmlSetGenericErrorFunc(NULL, xmlParserBaseGenericError); xmlSetGenericErrorFunc(NULL, xmlParserBaseGenericError);
#if LIBXML_VERSION >= 21206 #if LIBXML_VERSION >= 21205
xmlSetStructuredErrorFunc(NULL, xmlStructuredErrorFunc); xmlSetStructuredErrorFunc(NULL, xmlStructuredErrorFunc);
#else #else
xmlSetStructuredErrorFunc(NULL, xmlParserBaseStructuredError); 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) VMMR3DECL(PCVMMR3VTABLE) VMMR3GetVTable(void)
{ {
return &g_VMMR3VTable; 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_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)) \ && (!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)) && ("$(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 endif
@ -133,8 +133,8 @@ endif
# liblzma is used by the IPRT compression code and the iPXE ROM tool. # liblzma is used by the IPRT compression code and the iPXE ROM tool.
if defined(VBOX_WITH_LIBLZMA) \ if defined(VBOX_WITH_LIBLZMA) \
&& !defined(VBOX_ONLY_SDK) \ && !defined(VBOX_ONLY_SDK) \
&& "$(SDK_VBoxLibLzma_INCS)" == "$(PATH_ROOT)/src/libs/liblzma-5.4.1/api" && "$(SDK_VBoxLibLzma_INCS)" == "$(PATH_ROOT)/src/libs/liblzma-5.8.1/api"
include $(PATH_SUB_CURRENT)/liblzma-5.4.1/Makefile.kmk include $(PATH_SUB_CURRENT)/liblzma-5.8.1/Makefile.kmk
endif endif

View file

@ -229,26 +229,19 @@ endif
# #
# Template for building XPCOM executables for running at build time. # 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 = XPCOM Build programs executables
TEMPLATE_XPComBldProg_EXTENDS = VBoxAdvBldProg TEMPLATE_XPComBldProg_EXTENDS = VBoxAdvBldProg
TEMPLATE_XPComBldProg_DEFS.$(KBUILD_HOST) = $(TEMPLATE_VBoxAdvBldProg_DEFS.$(KBUILD_HOST)) $(TEMPLATE_XPComExe_DEFS.$(KBUILD_HOST)) 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.x86 = $(TEMPLATE_VBoxAdvBldProg_DEFS.x86) $(TEMPLATE_XPComExe_DEFS.x86)
TEMPLATE_XPComBldProg_DEFS.amd64 = $(TEMPLATE_VBoxAdvBldProg_DEFS.amd64) $(TEMPLATE_XPComExe_DEFS.amd64) 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_DEFS.arm64 = $(TEMPLATE_VBoxAdvBldProg_DEFS.arm64) $(TEMPLATE_XPComExe_DEFS.arm64)
TEMPLATE_XPComBldProg_CFLAGS += -std=c99
TEMPLATE_XPComBldProg_INCS = \ TEMPLATE_XPComBldProg_INCS = \
$(VBOX_PATH_SDK)/bindings/xpcom/include \ $(VBOX_PATH_SDK)/bindings/xpcom/include \
$(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \ $(VBOX_PATH_SDK)/bindings/xpcom/include/nsprpub \
$(VBOX_PATH_SDK)/bindings/xpcom/include/string \ $(VBOX_PATH_SDK)/bindings/xpcom/include/string \
$(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \ $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom \
$(VBOX_PATH_SDK)/bindings/xpcom/include/ipcd $(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_ORDERDEPS = $(foreach hdrinst, $(filter %-HEADERS, $(INSTALLS)), $($(hdrinst)_1_TARGET))
TEMPLATE_XPComBldProg_LIBS.darwin = \ TEMPLATE_XPComBldProg_LIBS.darwin = \
iconv iconv

View file

@ -304,53 +304,17 @@ xpidl_TEMPLATE = XPComBldProg
xpidl_DEFS = EXPORT_XPT_API xpidl_DEFS = EXPORT_XPT_API
## @todo This assumes HOST == TARGET. ## @todo This assumes HOST == TARGET.
xpidl_INST = $(INST_BIN) 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 = \ xpidl_SOURCES = \
xpcom/typelib/xpidl/xpidl.c \ xpcom/typelib/xpidl/xpidl.c \
xpcom/typelib/xpidl/xpidl_idl.c \ xpcom/typelib/xpidl/xpidl_idl.c \
xpcom/typelib/xpidl/xpidl_util.c \ xpcom/typelib/xpidl/xpidl_util.c \
xpcom/typelib/xpidl/xpidl_header.c \ xpcom/typelib/xpidl/xpidl_header.c \
xpcom/typelib/xpidl/xpidl_typelib.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_arena.c \
xpcom/typelib/xpt/src/xpt_struct.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. # 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_JAR = $(VBoxJXpcom-inst-jar_0_OUTDIR)/vboxjxpcom.jar
VBOX_JXPCOM_NSERROR = $(VBOX_JXPCOM_GEN)/java/XPCOMError.java VBOX_JXPCOM_NSERROR = $(VBOX_JXPCOM_GEN)/java/XPCOMError.java
ifndef VBOX_WITH_JAVA_SUPPORT_IN_XPIDL VBOX_JXPCOM_GEN = $(VBOX_JXPCOM_TARGET)/jxpcomgen
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_INST = $(INST_SDK)bindings/xpcom/java/
VBoxJXpcom-inst-jar_MODE = a+r,u+w VBoxJXpcom-inst-jar_MODE = a+r,u+w
@ -138,41 +134,21 @@ $(VBOX_JXPCOM_NSERROR): $(VBOX_PATH_XPCOM_SRC)/xpcom/base/nsError.h $(VBOX_JXPCO
$(call MSG_L1,Generating $@) $(call MSG_L1,Generating $@)
$(QUIET)perl $(VBOX_JXPCOM_SRC)/tools/gen-nsError.pl < $< > $@ $(QUIET)perl $(VBOX_JXPCOM_SRC)/tools/gen-nsError.pl < $< > $@
ifndef VBOX_WITH_JAVA_SUPPORT_IN_XPIDL #
# # Generate .java interface files from .xidl
# Generate .java interface files from .xidl #
# $(VBOX_JXPCOM_GEN)/jxpcomgen.list: \
$(VBOX_XIDL_FILE) \
$(VBOX_JXPCOM_GEN)/jxpcomgen.list: \ $(VBOX_FILESPLIT) \
$(VBOX_XIDL_FILE) \ $(VBOX_JXPCOM_SRC)/tools/genjifaces.xsl \
$(VBOX_FILESPLIT) \ | $(VBOX_JXPCOM_GEN)/java/interfaces/
$(VBOX_JXPCOM_SRC)/tools/genjifaces.xsl \
| $(VBOX_JXPCOM_GEN)/java/interfaces/
$(call MSG_L1,Generating Java interface files) $(call MSG_L1,Generating Java interface files)
$(QUIET)$(RM) -f $(wildcard $(VBOX_JXPCOM_GEN)/java/interfaces/*.java) $(QUIET)$(RM) -f $(wildcard $(VBOX_JXPCOM_GEN)/java/interfaces/*.java)
$(QUIET)$(VBOX_XSLTPROC) \ $(QUIET)$(VBOX_XSLTPROC) \
-o $(VBOX_JXPCOM_GEN)/java/interfaces/merged.file $(VBOX_JXPCOM_SRC)/tools/genjifaces.xsl $< -o $(VBOX_JXPCOM_GEN)/java/interfaces/merged.file $(VBOX_JXPCOM_SRC)/tools/genjifaces.xsl $<
$(QUIET)$(VBOX_FILESPLIT) $(VBOX_JXPCOM_GEN)/java/interfaces/merged.file $(VBOX_JXPCOM_GEN)/java/interfaces $(QUIET)$(VBOX_FILESPLIT) $(VBOX_JXPCOM_GEN)/java/interfaces/merged.file $(VBOX_JXPCOM_GEN)/java/interfaces
$(QUIET)echo $(VBOX_JXPCOM_GEN)/java/interfaces/*.java > $@ $(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_JXPCOM_GEN)/jxpcomglue.list: \
$(VBOX_XIDL_FILE) \ $(VBOX_XIDL_FILE) \

View file

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

View file

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

View file

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

View file

@ -131,7 +131,7 @@ PRBool nsDll::Load(void)
#ifdef NS_BUILD_REFCNT_LOGGING #ifdef NS_BUILD_REFCNT_LOGGING
nsTraceRefcntImpl::SetActivityIsLegal(PR_FALSE); nsTraceRefcntImpl::SetActivityIsLegal(PR_FALSE);
#endif #endif
#ifndef VBOX /* This is related to DEPENDENT_LIBS, which we've disabled. */
// Load any library dependencies // Load any library dependencies
// The Component Loader Manager may hold onto some extra data // The Component Loader Manager may hold onto some extra data
// set by either the native component loader or the native // set by either the native component loader or the native
@ -145,6 +145,7 @@ PRBool nsDll::Load(void)
if (!manager) if (!manager)
return PR_TRUE; return PR_TRUE;
nsXPIDLCString extraData; nsXPIDLCString extraData;
manager->GetOptionalData(m_dllSpec, nsnull, getter_Copies(extraData)); manager->GetOptionalData(m_dllSpec, nsnull, getter_Copies(extraData));
@ -220,12 +221,14 @@ PRBool nsDll::Load(void)
} }
nsMemory::Free(buffer); nsMemory::Free(buffer);
} }
#endif /* !VBOX */
// load the component // load the component
nsCOMPtr<nsILocalFile> lf(do_QueryInterface(m_dllSpec)); nsCOMPtr<nsILocalFile> lf(do_QueryInterface(m_dllSpec));
NS_ASSERTION(lf, "nsIFile here must implement a nsILocalFile"); NS_ASSERTION(lf, "nsIFile here must implement a nsILocalFile");
lf->Load(&m_hMod); 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 // Unload any of library dependencies we loaded earlier. The assumption
// here is that the component will have a "internal" reference count to // here is that the component will have a "internal" reference count to
// the dependency library we just loaded. // the dependency library we just loaded.
@ -236,6 +239,7 @@ PRBool nsDll::Load(void)
for (PRInt32 index = 0; index < arrayCount; index++) for (PRInt32 index = 0; index < arrayCount; index++)
RTLdrClose((RTLDRMOD)dependentLibArray.ElementAt(index)); RTLdrClose((RTLDRMOD)dependentLibArray.ElementAt(index));
} }
#endif /* !VBOX */
#ifdef NS_BUILD_REFCNT_LOGGING #ifdef NS_BUILD_REFCNT_LOGGING
nsTraceRefcntImpl::SetActivityIsLegal(PR_TRUE); 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[] = { static ModeData modes[] = {
{"header", "Generate C++ header", "h", xpidl_header_dispatch}, {"header", "Generate C++ header", "h", xpidl_header_dispatch},
{"typelib", "Generate XPConnect typelib", "xpt", xpidl_typelib_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} {0, 0, 0, 0}
}; };
@ -61,11 +59,11 @@ FindMode(char *mode)
return NULL; return NULL;
} }
gboolean enable_debug = FALSE; bool enable_debug = false;
gboolean enable_warnings = FALSE; bool enable_warnings = false;
gboolean verbose_mode = FALSE; bool verbose_mode = false;
gboolean emit_typelib_annotations = FALSE; bool emit_typelib_annotations = false;
gboolean explicit_output_filename = FALSE; bool explicit_output_filename = false;
/* The following globals are explained in xpt_struct.h */ /* The following globals are explained in xpt_struct.h */
PRUint8 major_version = XPT_MAJOR_VERSION; PRUint8 major_version = XPT_MAJOR_VERSION;
@ -86,9 +84,9 @@ static char xpidl_usage_str[] =
static void static void
xpidl_usage(int argc, char *argv[]) xpidl_usage(int argc, char *argv[])
{ {
int i; RT_NOREF(argc);
fprintf(stderr, xpidl_usage_str, argv[0]); 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, fprintf(stderr, " %-12s %-30s (.%s)\n", modes[i].mode,
modes[i].modeInfo, modes[i].suffix); modes[i].modeInfo, modes[i].suffix);
} }
@ -99,18 +97,15 @@ int main(int argc, char *argv[])
RTR3InitExeNoArguments(0); RTR3InitExeNoArguments(0);
int i; int i;
IncludePathEntry *inc, *inc_head, **inc_tail; RTLISTANCHOR LstIncludePaths;
char *file_basename = NULL; char *file_basename = NULL;
ModeData *mode = NULL; ModeData *mode = NULL;
gboolean create_old_typelib = FALSE;
/* turn this on for extra checking of our code */ RTListInit(&LstIncludePaths);
/* IDL_check_cast_enable(TRUE); */
inc_head = xpidl_malloc(sizeof *inc); PXPIDLINCLUDEDIR pInc = (PXPIDLINCLUDEDIR)xpidl_malloc(sizeof(*pInc));
inc_head->directory = "."; pInc->pszPath = ".";
inc_head->next = NULL; RTListAppend(&LstIncludePaths, &pInc->NdIncludes);
inc_tail = &inc_head->next;
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
if (argv[i][0] != '-') if (argv[i][0] != '-')
@ -122,13 +117,13 @@ int main(int argc, char *argv[])
case 0: /* - is a legal input filename (stdin) */ case 0: /* - is a legal input filename (stdin) */
goto done_options; goto done_options;
case 'a': case 'a':
emit_typelib_annotations = TRUE; emit_typelib_annotations = true;
break; break;
case 'w': case 'w':
enable_warnings = TRUE; enable_warnings = true;
break; break;
case 'v': case 'v':
verbose_mode = TRUE; verbose_mode = true;
break; break;
case 't': case 't':
{ {
@ -146,15 +141,6 @@ int main(int argc, char *argv[])
return 1; 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 * Assume that the argument after "-t" is the version number string
* and search for it in our internal list of acceptable version * 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: case XPT_VERSION_CURRENT:
break; break;
case XPT_VERSION_OLD: case XPT_VERSION_OLD:
create_old_typelib = TRUE;
break;
case XPT_VERSION_UNSUPPORTED: case XPT_VERSION_UNSUPPORTED:
fprintf(stderr, "ERROR: version \"%s\" not supported.\n", fprintf(stderr, "ERROR: version \"%s\" not supported.\n",
argv[i]); argv[i]);
@ -187,20 +171,16 @@ int main(int argc, char *argv[])
xpidl_usage(argc, argv); xpidl_usage(argc, argv);
return 1; return 1;
} }
inc = xpidl_malloc(sizeof *inc); pInc = (PXPIDLINCLUDEDIR)xpidl_malloc(sizeof(*pInc));
if (argv[i][2] == '\0') { if (argv[i][2] == '\0') {
/* is it the -I foo form? */ /* is it the -I foo form? */
inc->directory = argv[++i]; pInc->pszPath = argv[++i];
} else { } else {
/* must be the -Ifoo form. Don't preincrement i. */ /* 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); RTListAppend(&LstIncludePaths, &pInc->NdIncludes);
#endif
inc->next = NULL;
*inc_tail = inc;
inc_tail = &inc->next;
break; break;
case 'o': case 'o':
if (i == argc) { if (i == argc) {
@ -209,7 +189,7 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
file_basename = argv[++i]; file_basename = argv[++i];
explicit_output_filename = FALSE; explicit_output_filename = false;
break; break;
case 'e': case 'e':
if (i == argc) { if (i == argc) {
@ -218,7 +198,7 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
file_basename = argv[++i]; file_basename = argv[++i];
explicit_output_filename = TRUE; explicit_output_filename = true;
break; break;
case 'm': case 'm':
if (i + 1 == argc) { 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 * Don't try to process multiple files, given that we don't handle -o
* multiply. * 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; return 0;
/** @todo Free include paths. */
printf("Failed to process IDL file\n");
return 1; return 1;
} }

View file

@ -42,100 +42,278 @@
#ifndef __xpidl_h #ifndef __xpidl_h
#define __xpidl_h #define __xpidl_h
#include <iprt/errcore.h>
#include <iprt/list.h>
#include <iprt/script.h>
#include <errno.h> #include <errno.h>
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <glib.h> #include <string.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 <xpt_struct.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. * Internal operation flags.
*/ */
extern gboolean enable_debug; extern bool enable_debug;
extern gboolean enable_warnings; extern bool enable_warnings;
extern gboolean verbose_mode; extern bool verbose_mode;
extern gboolean emit_typelib_annotations; extern bool emit_typelib_annotations;
extern gboolean explicit_output_filename; extern bool explicit_output_filename;
extern PRUint8 major_version; extern PRUint8 major_version;
extern PRUint8 minor_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 */ DECL_HIDDEN_CALLBACK(int) xpidl_header_dispatch(FILE *pFile, PCXPIDLINPUT pInput, PCXPIDLPARSE pParse, PRTERRINFO pErrInfo);
typedef backend *(*backendFactory)(); DECL_HIDDEN_CALLBACK(int) xpidl_typelib_dispatch(FILE *pFile, PCXPIDLINPUT pInput, PCXPIDLPARSE pParse, PRTERRINFO pErrInfo);
extern backend *xpidl_header_dispatch(void);
extern backend *xpidl_typelib_dispatch(void);
extern backend *xpidl_doc_dispatch(void);
extern backend *xpidl_java_dispatch(void);
typedef struct ModeData { typedef struct ModeData {
char *mode; char *mode;
char *modeInfo; char *modeInfo;
char *suffix; char *suffix;
backendFactory factory; PFNXPIDLDISPATCH dispatch;
} ModeData; } 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 * Process an IDL file, generating InterfaceInfo, documentation and headers as
* appropriate. * appropriate.
*/ */
int int
xpidl_process_idl(char *filename, IncludePathEntry *include_path, xpidl_process_idl(char *filename, PRTLISTANCHOR pLstIncludePaths,
char *file_basename, ModeData *mode); 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. * Wrapper whines to stderr then exits after null return from malloc or strdup.
*/ */
@ -152,20 +330,6 @@ xpidl_strdup(const char *s);
char * char *
xpidl_basename(const char * path); 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. * 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 * Print an iid to into a supplied buffer; the buffer should be at least
* UUID_LENGTH bytes. * UUID_LENGTH bytes.
*/ */
gboolean bool
xpidl_sprint_iid(nsID *iid, char iidbuf[]); xpidl_sprint_iid(nsID *iid, char iidbuf[]);
/* /*
* Parse a uuid string into an nsID struct. We cannot link against libxpcom, * Parse a uuid string into an nsID struct. We cannot link against libxpcom,
* so we re-implement nsID::Parse here. * so we re-implement nsID::Parse here.
*/ */
gboolean bool
xpidl_parse_iid(nsID *id, const char *str); 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. */ /* 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) \ DECLINLINE(bool) xpidlNdIsStringType(PCXPIDLNODE pNd)
(IDL_NODE_UP(node) && \ {
IDL_NODE_TYPE(IDL_NODE_UP(node)) == IDLN_NATIVE) 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> *"? */ /* is this type output in the form "<foo> *"? */
#define STARRED_TYPE(node) (IDL_NODE_TYPE(node) == IDLN_TYPE_STRING || \ #define STARRED_TYPE(a_pNd) (xpidlNdIsStringType(a_pNd) || \
IDL_NODE_TYPE(node) == IDLN_TYPE_WIDE_STRING || \ (a_pNd->enmType == kXpidlNdType_Identifier && \
(IDL_NODE_TYPE(node) == IDLN_IDENT && \ UP_IS_AGGREGATE(a_pNd)))
UP_IS_AGGREGATE(node)))
#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 * Find the underlying type of an identifier typedef. Returns NULL
* (and doesn't complain) on failure. * (and doesn't complain) on failure.
*/ */
IDL_tree /* IDL_TYPE_DCL */ DECLHIDDEN(PCXPIDLNODE) find_underlying_type(PCXPIDLNODE pNd);
find_underlying_type(IDL_tree typedef_ident);
/*
* 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 * Check that const declarations match their stated sign and are of the
* appropriate types. * appropriate types.
*/ */
gboolean DECLHIDDEN(int) verify_const_declaration(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
verify_const_declaration(IDL_tree const_tree);
/* /*
* Check that scriptable attributes in scriptable interfaces actually are. * Check that scriptable attributes in scriptable interfaces actually are.
*/ */
gboolean DECLHIDDEN(int) verify_attribute_declaration(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
verify_attribute_declaration(IDL_tree method_tree);
/* /*
* Perform various validation checks on methods. * Perform various validation checks on methods.
*/ */
gboolean DECLHIDDEN(int) verify_method_declaration(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
verify_method_declaration(IDL_tree method_tree);
/*
* Verifies the interface declaration
*/
gboolean
verify_interface_declaration(IDL_tree method_tree);
/* /*
* Verify that a native declaration has an associated C++ expression, i.e. that * Verify that a native declaration has an associated C++ expression, i.e. that
* it's of the form native <idl-name>(<c++-name>) * it's of the form native <idl-name>(<c++-name>)
*/ */
gboolean DECLHIDDEN(int) check_native(PCXPIDLNODE pNd, PRTERRINFO pErrInfo);
check_native(TreeState *state);
void
printlist(FILE *outfile, GSList *slist);
#endif /* __xpidl_h */ #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