Index: /trunk/Config.kmk
===================================================================
--- /trunk/Config.kmk	(revision 43608)
+++ /trunk/Config.kmk	(revision 43609)
@@ -465,6 +465,4 @@
 # Enable this setting to force a fallback to default DMI data on configuration errors
 VBOX_BIOS_DMI_FALLBACK =
-# Enable new VGA BIOS.
-VBOX_WITH_NEW_VGABIOS = 1
 # Enable the builtin PXE ROM
 VBOX_WITH_PXE_ROM = 1
Index: /trunk/src/VBox/Devices/Graphics/BIOS/BUGS
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/BUGS	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/BUGS	(revision 43609)
@@ -0,0 +1,3 @@
+Not all the functions have been implemented yet. 
+
+Please report any bugs to <cbothamy@free.fr>
Index: /trunk/src/VBox/Devices/Graphics/BIOS/COPYING
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/COPYING	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/COPYING	(revision 43609)
@@ -0,0 +1,513 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+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 this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+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
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser 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 Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "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
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY 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
+LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey 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 library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
Index: /trunk/src/VBox/Devices/Graphics/BIOS/ChangeLog
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/ChangeLog	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/ChangeLog	(revision 43609)
@@ -0,0 +1,1212 @@
+2006-08-19 09:39  vruppert
+
+	* vbe.c (1.58):
+
+	- improved VGA compatible setup for VBE modes (disable CGA and Hercules
+	  compatible memory layout)
+
+2006-08-18 20:39  vruppert
+
+	* vbe.c (1.57):
+
+	- improved VGA compatible setup for >=8bpp VBE modes (CRTC doubleword mode and
+	  GRDC shift register setting added)
+	- now using symbolic name for CRTC address register
+
+2006-08-15 20:42  vruppert
+
+	* vbe.c (1.56), vbetables-gen.c (1.4):
+
+	- init 4bpp VBE modes by a temporary switch to VGA mode 0x6A
+	- all 4bpp VBE modes now enabled
+
+2006-08-14 20:24  vruppert
+
+	* vbe.c (1.55):
+
+	- VGA compatible setup for VBE modes improved (Bochs hack can be removed now)
+
+2006-08-12 07:51  vruppert
+
+	* .cvsignore (1.1):
+
+	- .cvsignore added for auto-generated file
+
+2006-08-12 07:47  vruppert
+
+	* vbe.c (1.54), vbe.h (1.27), vbe_display_api.txt (1.13), vbetables-gen.c (1.3):
+
+	- cleaned up VBE memory size definitions (removed duplicate defines, main
+	  definition now in vbetables-gen.c)
+
+2006-08-09 21:28  vruppert
+
+	* vbetables.h (1.30):
+
+	- removed auto-generated file
+
+2006-08-09 21:26  vruppert
+
+	* vbe.c (1.53), vbe.h (1.26), vbe_display_api.txt (1.12), vbetables-gen.c (1.2),
+	  vbetables.h (1.29):
+
+	- VBE video memory increased to 8 MB
+	- VBE dispi ID changed to B0C4
+	- documentation update
+
+2006-07-11 08:03  vruppert
+
+	* Makefile (1.18), vbetables-gen.c (1.1), vbetables.h (1.28):
+
+	- generate vbetables.h dynamicly
+	  * initial patch from the qemu project by Fabrice Bellard
+	  * only add modes that fit in video memory (still 4 MB)
+	  * several other fixes (e.g. 4 bpp specific stuff, number of pages)
+
+2006-07-10 07:47  vruppert
+
+	* vgabios.c (1.66):
+
+	- biosfn_scroll(): check variable 'i' for underflowing when scrolling downwards
+	  to avoid screen corruption
+
+2006-07-10 07:47  vruppert
+
+	* vbe.c (1.52):
+
+	- VBE set bank functions failure handling added
+	- VBE get/set logical scan line length fixes for the 4bpp mode
+
+2006-07-08 13:27  vruppert
+
+	* vbe.c (1.51), vbetables.h (1.27):
+
+	- added special case for the 4 bpp when setting VBE display start
+	- VBE mode table fixes
+
+2006-07-07 13:30  vruppert
+
+	* clext.c (1.12):
+
+	- bank pointer must be set to 0 after a mode set
+
+2006-06-21 16:58  vruppert
+
+	* vbe.c (1.50), vbetables.h (1.26):
+
+	- improved VBE display capabilities check (X resulution checked now)
+	- removed obsolete defines (LFB always available, always generate dynamic list)
+	- CR/LF to LF fixes
+
+2006-06-18 15:22  vruppert
+
+	* clext.c (1.11), vbe.c (1.49), vbe.h (1.25), vbetables.h (1.25), vgabios.c
+	  (1.65):
+
+	- applied patch from the qemu project (Fabrice Bellard)
+	  * Cirrus SVGA now supports the "no clear" bit when switching to Cirrus or
+	    VESA mode
+	  * Bochs VBE protected mode interface improved
+	  * save/restore video state support for Bochs VBE and standard VGA added
+	  * Bochs VBE prepared for more modi
+
+2006-03-25 10:19  vruppert
+
+	* clext.c (1.10), vgabios.c (1.64), vgatables.h (1.10):
+
+	- applied patch from Fabrice Bellard
+	 * added minimal support for the video parameter table (VPT)
+	 * added Cirrus SVGA mode 0x7b (1600x1200x8)
+
+2005-12-26 19:50  vruppert
+
+	* vbe.c (1.48), vgabios.c (1.63):
+
+	- Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com)
+
+2005-12-26 19:50  vruppert
+
+	* biossums.c (1.3):
+
+	- biossums utility now supports VGABIOS sizes up to 64 kBytes
+
+2005-09-21 18:45  vruppert
+
+	* vgatables.h (1.9):
+
+	- mode 0x11: all color planes must be enabled in this 2-color VGA mode
+
+2005-08-30 18:41  vruppert
+
+	* biossums.c (1.2):
+
+	- missing license text added in biossums.c
+
+2005-07-02 18:39  vruppert
+
+	* vgabios.c (1.62):
+
+	- BIOS configuration word usually reports initial mode 80x25 color text
+	- vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the
+	  cursor row value
+
+2005-05-24 16:50  vruppert
+
+	* vbe.c (1.47), vgabios.c (1.61):
+
+	- output to the vgabios info port can be disabled now. It is still enabled by
+	  default and always possible in debug mode. (based on a patch from Alex Beregszaszi)
+
+2005-05-20 16:06  vruppert
+
+	* vbe.c (1.46), vgabios.c (1.60):
+
+	- fixed return value for the default case in the VBE section (non-debug mode)
+	- removed unused macros HALT and PANIC_PORT
+
+2005-03-07 20:39  vruppert
+
+	* README (1.9):
+
+	- updates for 0.5a release
+
+2005-03-06 13:06  vruppert
+
+	* Makefile (1.17):
+
+	- vgabios files with cirrus support added to release target
+
+2005-03-06 12:24  vruppert
+
+	* Makefile (1.16):
+
+	- cross compilation support added (patch from Alex Beregszaszi)
+
+2005-03-05 13:03  vruppert
+
+	* BUGS (1.3), README (1.8), TODO (1.11):
+
+	- documentation updates
+
+2004-12-04 15:26  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.61), VGABIOS-lgpl-latest.cirrus.bin
+	  (1.13), VGABIOS-lgpl-latest.cirrus.debug.bin (1.13),
+	  VGABIOS-lgpl-latest.debug.bin (1.61), clext.c (1.9):
+
+	- Cirrus extension: support for 1280x1024x15 and 1280x1024x16 modes added (patch
+	  from Fabrice Bellard)
+
+2004-08-08 16:53  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.60), VGABIOS-lgpl-latest.cirrus.bin (1.12),
+	  VGABIOS-lgpl-latest.cirrus.debug.bin (1.12),
+	  VGABIOS-lgpl-latest.debug.bin (1.60), clext.c (1.8):
+
+	- use single bank mode for VBE
+	- enable 16k granularity for VBE only
+
+2004-07-30 19:33  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.59), VGABIOS-lgpl-latest.cirrus.bin (1.11),
+	  VGABIOS-lgpl-latest.cirrus.debug.bin (1.11),
+	  VGABIOS-lgpl-latest.debug.bin (1.59), clext.c (1.7):
+
+	- cirrus init: set standard vga mode and reset bitblt
+
+2004-07-22 18:38  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.58), VGABIOS-lgpl-latest.cirrus.bin (1.10),
+	  VGABIOS-lgpl-latest.cirrus.debug.bin (1.10),
+	  VGABIOS-lgpl-latest.debug.bin (1.58), clext.c (1.6), vbe.c (1.45),
+	  vbetables.h (1.24):
+
+	- cirrus extension: tables for mode 1280x1024x8 added
+	- vbe: dispi_set_xres() and dispi_set_virt_width() now modify vga compatible
+	  registers
+	- vbe: mode list entry for mode 800x600x4 fixed
+
+2004-07-18 20:23  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.57), VGABIOS-lgpl-latest.cirrus.bin (1.9),
+	  VGABIOS-lgpl-latest.cirrus.debug.bin (1.9),
+	  VGABIOS-lgpl-latest.debug.bin (1.57), vgabios.c (1.59), vgatables.h (1.8):
+
+	- disable CRTC write protection before setting new values
+	- CRTC line for mode 0x6a fixed
+
+2004-07-07 16:08  vruppert
+
+	* Makefile (1.15), VGABIOS-lgpl-latest.bin (1.56),
+	  VGABIOS-lgpl-latest.cirrus.bin (1.8), VGABIOS-lgpl-latest.cirrus.debug.bin (1.8),
+	  VGABIOS-lgpl-latest.debug.bin (1.56), biossums.c (1.1), clext.c (1.5):
+
+	- biossums utility for the Bochs BIOS adapted for the LGPL'd VGABIOS
+	- VESA3 PMINFO checksum calculated in the source
+	- 24 bpp mode entries fixed (patch from Fabrice Bellard)
+
+2004-06-25 18:28  vruppert
+
+	* VGABIOS-lgpl-latest.cirrus.bin (1.7), VGABIOS-lgpl-latest.cirrus.debug.bin (1.7),
+	  clext.c (1.4):
+
+	- 4MB memory probe added (patch from Fabrice Bellard)
+
+2004-06-25 17:31  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.55), VGABIOS-lgpl-latest.cirrus.bin (1.6),
+	  VGABIOS-lgpl-latest.cirrus.debug.bin (1.6),
+	  VGABIOS-lgpl-latest.debug.bin (1.55), clext.c (1.3):
+
+	- fixed value of sequencer reset register in cirrus mode table
+	- fixed possible overflow error if cirrus start address is >256k
+
+2004-06-23 21:11  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.54), VGABIOS-lgpl-latest.cirrus.bin (1.5),
+	  VGABIOS-lgpl-latest.cirrus.debug.bin (1.5),
+	  VGABIOS-lgpl-latest.debug.bin (1.54), clext.c (1.2):
+
+	- applied new patch for the cirrus extension from suzu
+	  * enable VESA LFB support if a Cirrus PCI adapter is detected
+	  * prepared VBE3 protected mode info block (test case required)
+	- added VBE functions 4F06h and 4F07h
+	- some bugfixes
+
+2004-06-17 18:57  vruppert
+
+	* Makefile (1.14), VGABIOS-lgpl-latest.bin (1.53),
+	  VGABIOS-lgpl-latest.cirrus.bin (1.2), VGABIOS-lgpl-latest.cirrus.debug.bin (1.2),
+	  VGABIOS-lgpl-latest.debug.bin (1.53):
+
+	- fixed makefile targets for the binaries with cirrus extension
+
+2004-06-16 21:11  vruppert
+
+	* Makefile (1.13), VGABIOS-lgpl-latest.bin (1.52),
+	  VGABIOS-lgpl-latest.cirrus.bin (1.1), VGABIOS-lgpl-latest.cirrus.debug.bin (1.1),
+	  VGABIOS-lgpl-latest.debug.bin (1.52), clext.c (1.1), vgabios.c (1.58):
+
+	- applied suzu's cirrus extension patch. Cirrus SVGA detection, most of the
+	  cirrus-specific modes and some basic VBE features are present now.
+
+2004-05-31 21:15  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.51), VGABIOS-lgpl-latest.debug.bin (1.51),
+	  vgabios.c (1.57):
+
+	- write character in planar graphics modes: sequencer map mask must be 0x0f and
+	  bit operation must be 'replace' if bit 7 of attribute is clear
+	- read/write pixel in planar graphics modes: bit mask setup simplified
+
+2004-05-11 18:08  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.50), VGABIOS-lgpl-latest.debug.bin (1.50),
+	  vgabios.c (1.56):
+
+	- biosfn_select_vert_res rewritten in assembler
+	- scroll text in planar graphics modes: attribute for blank line fixed
+	- write character in planar graphics modes: graphics controller values fixed
+
+2004-05-09 20:32  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.49), VGABIOS-lgpl-latest.debug.bin (1.49),
+	  vbe.c (1.44), vbe.h (1.24), vgabios.c (1.55):
+
+	- VBE init code and some dispi ioport functions rewritten in assembler
+	- text scroll functions for CGA graphics modes added
+	- scroll text in graphics modes: attribute for blank line fixed
+
+2004-05-08 16:06  vruppert
+
+	* BUGS (1.2), README (1.7), TODO (1.10), VGABIOS-lgpl-latest.bin (1.48),
+	  VGABIOS-lgpl-latest.debug.bin (1.48), vbe.c (1.43), vbe.h (1.23),
+	  vbe_display_api.txt (1.11), vgabios.c (1.54):
+
+	- VBE internal functions dispi_set_enable and dispi_set_bank now called both from C
+	  and asm code
+	- VBE function 0x03 rewritten in assembler
+	- VBE function 0x08 cleaned up
+	- text output and scroll functions for graphics modes rewritten using case
+	  structures
+	- documentation and comments updated
+
+2004-05-06 21:18  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.47), VGABIOS-lgpl-latest.debug.bin (1.47),
+	  vbe.c (1.42), vbe.h (1.22), vgabios.c (1.53):
+
+	- VBE functions 0x05, 0x06, 0x07 and some dispi ioport functions rewritten in
+	  assembler
+	- VBE functions 0x06 and 0x07: get functions now supported, 15 bpp bug fixed
+
+2004-05-05 19:24  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.46), VGABIOS-lgpl-latest.debug.bin (1.46),
+	  vbe.c (1.41), vbe.h (1.21), vbe_display_api.txt (1.10), vgabios.c (1.52):
+
+	- 8 bit DAC capability flag set
+	- vbe_biosfn_set_get_dac_palette_format implemented
+	- VBE api description updated
+	- C definitions from header files now used assembler code
+
+2004-05-02 17:27  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.45), VGABIOS-lgpl-latest.debug.bin (1.45),
+	  vgabios.c (1.51):
+
+	- text scroll functions for PLANAR1/PLANAR4 graphics modes added
+	- function biosfn_get_ega_info rewritten in assembler
+	- read/write graphics pixel functions rewritten using a case structure
+
+2004-05-01 16:03  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.44), VGABIOS-lgpl-latest.debug.bin (1.44),
+	  vgabios.c (1.50):
+
+	- biosfn_enable_cursor_emulation rewritten in assembler
+	- remap of the cursor shape depends on modeset control bit 0
+	- text output in PLANAR4 modes now supports attribute bit 7 (XOR with background)
+
+2004-04-25 20:13  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.43), VGABIOS-lgpl-latest.debug.bin (1.43),
+	  vgabios.c (1.49), vgatables.h (1.7):
+
+	- table entries for vga mode 0x0f fixed (PLANAR2 exists on EGA only)
+	- function release_font_access now supports the monochrome text mode
+	- PLANAR1 modes now supported in text output functions and read/write pixel
+	- function AH=0x12/BL=0x32 rewritten in assembler
+
+2004-04-25 08:45  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.42), VGABIOS-lgpl-latest.debug.bin (1.42),
+	  vgabios.c (1.48):
+
+	- block address calculation in font functions fixed
+	- functions AX=0x1103, AH=0x12/BL=0x31 and AH=0x12/BL=0x33 rewritten in assembler
+
+2004-04-24 09:59  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.41), VGABIOS-lgpl-latest.debug.bin (1.41),
+	  vgabios.c (1.47):
+
+	- read/write graphics pixel for PLANAR4 modes added
+	- CGA specific functions (group AH = 0x0B) implemented
+
+2004-04-23 14:34  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.40), VGABIOS-lgpl-latest.debug.bin (1.40),
+	  vgabios.c (1.46):
+
+	- remaining palette and dac read/write functions (except gray scale summing)
+	  rewritten in assembler
+
+2004-04-18 13:43  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.39), VGABIOS-lgpl-latest.debug.bin (1.39),
+	  vgabios.c (1.45):
+
+	- some palette and dac read/write functions rewritten in assembler
+	- main int10 debug message now works with assembler functions, too
+
+2004-04-18 09:15  japj
+
+	* vbe.c (1.40):
+
+	updated my email address + put vgabios url in the bios copyright string
+	(instead of my old email address)
+
+2004-04-17 07:18  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.38), VGABIOS-lgpl-latest.debug.bin (1.38),
+	  vgabios.c (1.44):
+
+	- biosfn_set_video_mode: don't load DAC registers if default palette loading is
+	  disabled. Perform gray scale summing if enabled.
+	- biosfn_perform_gray_scale_summing: switch between DAC read and write mode is
+	  required to make this function work. Maximum DAC value always set to 0x3f.
+
+2004-04-08 17:50  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.37), VGABIOS-lgpl-latest.debug.bin (1.37),
+	  vgabios.c (1.43):
+
+	- write character function for the LINEAR8 mode
+	- get_font_access() and release_font_access() rewritten in assembler
+	- fixed wrong variable name in the init code
+
+2004-04-06 19:31  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.36), VGABIOS-lgpl-latest.debug.bin (1.36),
+	  vgabios.c (1.42):
+
+	- init functions rewitten in assembler
+	- function biosfn_set_display_code rewritten in assembler
+
+2004-04-05 19:40  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.35), VGABIOS-lgpl-latest.debug.bin (1.35),
+	  vgabios.c (1.41):
+
+	- functions biosfn_get_video_mode() and biosfn_read_display_code() rewritten
+	  in assembler
+
+2004-04-04 18:20  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.34), VGABIOS-lgpl-latest.debug.bin (1.34),
+	  vgabios.c (1.40):
+
+	- write character function for CGA modes added
+	- read/write graphics pixel for CGA and LINEAR8 modes added
+
+2004-02-23 21:08  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.33), VGABIOS-lgpl-latest.debug.bin (1.33),
+	  vbe.c (1.39):
+
+	- dispi_get_max_bpp(): restore the original value of the vbe enable register
+
+2004-02-22 14:17  vruppert
+
+	* README (1.6), vbe.c (1.38), vbe.h (1.20), vbe_display_api.txt (1.9),
+	  VGABIOS-lgpl-latest.bin (1.32), VGABIOS-lgpl-latest.debug.bin (1.32):
+
+	- new function dispi_get_max_bpp() returns the bpp capabilities of the Bochs gui
+	- create the mode list depending on the supported bpp capability
+	- unused stuff removed
+	- documentation updated
+
+2004-02-21 18:20  vruppert
+
+	* vbe.c (1.37), vbe.h (1.19), vbetables.h (1.23),
+	  VGABIOS-lgpl-latest.bin (1.31), VGABIOS-lgpl-latest.debug.bin (1.31):
+
+	- dynamicly genarated vbe mode_info list works now
+
+2003-11-17 21:04  vruppert
+
+	* vbe.c (1.36), vbetables.h (1.22), vgabios.c (1.39), vgatables.h (1.6),
+	  VGABIOS-lgpl-latest.bin (1.30), VGABIOS-lgpl-latest.debug.bin (1.30):
+
+	- new VBE presence flag stored at unused BDA address 0xB9
+	- VBE init code rewritten
+	- added BIOS TTY flag for VBE mode 0x0102 (TODO: scrolling)
+	- vgabios_init_func: load and activate text font already done by set_video_mode
+	- function biosfn_get_all_palette_reg() fixed
+
+2003-11-06 00:26  cbothamy
+
+	* README (1.5):
+
+	  - add changes for 0.4c release
+
+2003-11-06 00:22  cbothamy
+
+	* VGABIOS-lgpl-latest.bin (1.29), VGABIOS-lgpl-latest.debug.bin
+	  (1.29):
+
+	  - compile vgabios.c rev1.38
+
+2003-11-06 00:21  cbothamy
+
+	* vgabios.c (1.38):
+
+	  - activate char table after loading it when setting a text video
+	  mode
+
+2003-11-06 00:19  cbothamy
+
+	* Makefile (1.12):
+
+	  - when making a release, remove unwanted files first, and exclude
+	  CVS from the tarball
+
+2003-11-04 22:50  cbothamy
+
+	* ChangeLog (1.20, v0_4b):
+
+	  - update ChangeLog for 0.4b release
+
+2003-11-04 22:49  cbothamy
+
+	* README (1.4, v0_4b):
+
+	  - update Changes for 0.4b release
+
+2003-11-04 20:26  vruppert
+
+	* vgabios.c (1.37), VGABIOS-lgpl-latest.bin (1.28),
+	  VGABIOS-lgpl-latest.debug.bin (1.28) (utags: v0_4b):
+
+	  - biosfn_get_font_info(): character height must be returned in CX
+
+2003-11-03 21:57  vruppert
+
+	* vbe.c (1.35, v0_4b), vgabios.c (1.36), VGABIOS-lgpl-latest.bin
+	  (1.27), VGABIOS-lgpl-latest.debug.bin (1.27):
+
+	  - the 'noclearmem' flag is not stored in the 'current video mode'
+	  register (0040h:0049h) - VBE also stores the 'noclear' flag in
+	  the 'video control' register (0040h:0087h)
+
+2003-10-05 10:06  vruppert
+
+	* vbe.h (1.18, v0_4b), vbe_display_api.txt (1.8, v0_4b),
+	  VGABIOS-lgpl-latest.bin (1.26), VGABIOS-lgpl-latest.debug.bin
+	  (1.26):
+
+	  - changed VBE i/o registers to 0x01CE/CF (suggestion from Daniel
+	  Gimpelevich)
+
+2003-08-18 18:38  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.25), VGABIOS-lgpl-latest.debug.bin
+	  (1.25), vgabios.c (1.35):
+
+	  - wrong offsets to the character tables (INT 0x1F/0x43) fixed
+	  (underscore added) - functions accessing the CRT controller
+	  optimized using a local variable 'crtc_addr'
+
+2003-08-17 15:46  cbothamy
+
+	* ChangeLog (1.19, v0_4a):
+
+	  - ChangeLog is now automatically generated by running "cvs2cl -r
+	  -t -P -S" - update ChangeLog for 0.4a release
+
+2003-08-17 15:44  cbothamy
+
+	* README (1.3, v0_4a):
+
+	  - added the old ChangeLog in the HOSTORY section of the README
+	  file - update History for 0.4a release, with a summary of Changes
+
+2003-08-17 15:24  cbothamy
+
+	* Makefile (1.11, v0_4b, v0_4a):
+
+	  - fix Makefile for "release" target
+
+2003-08-16 01:49  cbothamy
+
+	* Makefile (1.10), README (1.2), VGABIOS-lgpl-latest.bin (1.24,
+	  v0_4a), VGABIOS-lgpl-latest.debug.bin (1.24, v0_4a), vgabios.c
+	  (1.34, v0_4a):
+
+	  - update the Makefile for releases - remove references to old
+	  plex86 website - update the Makefile so it build
+	  VGABIOS-lgpl-latest.bin and	VGABIOS-lgpl-latest.debug.bin
+
+2003-08-07 18:17  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.23), VGABIOS-lgpl-latest.debug.bin
+	  (1.23):
+
+	  - current VBE mode now stored in BDA (unused address 0xBA)
+
+2003-08-07 17:54  vruppert
+
+	* vbe.c (1.34), vgatables.h (1.5, v0_4b) (utags: v0_4a):
+
+	  - current VBE mode now stored in BDA (unused address 0xBA)
+
+2003-07-20 18:05  vruppert
+
+	* vgabios.c (1.33), VGABIOS-lgpl-latest.bin (1.22),
+	  VGABIOS-lgpl-latest.debug.bin (1.22):
+
+	  - fixed a few functions accessing the attribute controller
+
+2003-07-19 09:33  vruppert
+
+	* vgabios.c (1.32), VGABIOS-lgpl-latest.bin (1.21),
+	  VGABIOS-lgpl-latest.debug.bin (1.21):
+
+	  - re-enable video after programming the attribute controller -
+	  biosfn_set_all_palette_reg(): number of palette registers fixed
+
+2003-07-16 22:32  vruppert
+
+	* ChangeLog (1.18), vbe.c (1.33), vbe.h (1.17, v0_4a),
+	  vbe_display_api.txt (1.7, v0_4a), vgabios.c (1.31),
+	  VGABIOS-lgpl-latest.bin (1.20), VGABIOS-lgpl-latest.debug.bin
+	  (1.20):
+
+	  - LFB flag now stored in the register VBE_DISPI_INDEX_ENABLE -
+	  release date in Changelog fixed - release date of VBE BIOS 0.6
+	  was the same as VGA BIOS 0.3b - year changed in copyright
+	  messages
+
+2003-07-15 12:40  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.19), VGABIOS-lgpl-latest.debug.bin
+	  (1.19):
+
+	  - new function dispi_get_bpp() - function
+	  vbe_biosfn_set_get_logical_scan_line_length() fixed for >8bpp -
+	  number of image pages of all VBE modes fixed
+
+2003-07-15 12:35  vruppert
+
+	* vbe.c (1.32), vbetables.h (1.21, v0_4b, v0_4a):
+
+	  - new function dispi_get_bpp() - function
+	  vbe_biosfn_set_get_logical_scan_line_length() fixed for >8bpp -
+	  number of image pages of all VBE modes fixed
+
+2003-07-14 19:45  vruppert
+
+	* vbe_display_api.txt (1.6):
+
+	  - description of VBE_DISPI_ interface 0xb0c2 added
+
+2003-07-10 19:07  vruppert
+
+	* vbe.c (1.31), vbetables.h (1.20), VGABIOS-lgpl-latest.bin (1.18),
+	  VGABIOS-lgpl-latest.debug.bin (1.18):
+
+	  - 15 bpp VBE modes added - "Bochs own" mode 0x142 (640x480x32bpp)
+	  added
+
+2003-07-01 19:00  vruppert
+
+	* vbe.c (1.30), vbe.h (1.16), vbetables.h (1.19),
+	  VGABIOS-lgpl-latest.bin (1.17), VGABIOS-lgpl-latest.debug.bin
+	  (1.17):
+
+	  - VBE preserve display memory feature implemented - VBE mode
+	  entries 0x117 and 0x118 added
+
+2003-06-30 21:27  vruppert
+
+	* vbe.c (1.29), vbe.h (1.15), vbetables.h (1.18),
+	  VGABIOS-lgpl-latest.bin (1.16), VGABIOS-lgpl-latest.debug.bin
+	  (1.16):
+
+	  - VBE mode info blocks of modes with >8bpp enabled - VBE modes
+	  with 24 bpp: bytes per scanline fixed - vbe_biosfn_set_mode() now
+	  supports >8bpp - VBE will be enabled with new VBE_DISPI_ID2
+	  (0xB0C2)
+
+2003-06-29 12:53  vruppert
+
+	* vbetables.h (1.17), VGABIOS-lgpl-latest.bin (1.15),
+	  VGABIOS-lgpl-latest.debug.bin (1.15):
+
+	  - duplicate lines with VBE_MODE_ATTRIBUTE_GRAPHICS_MODE removed -
+	  VBE mode info items of currently unsupported modes fixed
+
+2003-06-15 21:19  vruppert
+
+	* vgabios.c (1.30), VGABIOS-lgpl-latest.bin (1.14),
+	  VGABIOS-lgpl-latest.debug.bin (1.14):
+
+	  - function write_gfx_char() rewritten
+
+2003-04-26 09:27  vruppert
+
+	* VGABIOS-lgpl-latest.debug.bin (1.13):
+
+	  - added missing VBE function dispi_get_bank() - added missing
+	  return codes for VBE function 4F05h - memory size is always
+	  reported in VBE function 4F00h - fixed scan line length for VBE
+	  mode 0102h - fixed function set_active_page() for graphics modes
+	  - fixed the page sizes of some VGA modes
+
+2003-04-26 09:22  vruppert
+
+	* vbe.c (1.28), vbetables.h (1.16), vgabios.c (1.29), vgatables.h
+	  (1.4), VGABIOS-lgpl-latest.bin (1.13):
+
+	  - added missing VBE function dispi_get_bank() - added missing
+	  return codes for VBE function 4F05h - memory size is always
+	  reported in VBE function 4F00h - fixed scan line length for VBE
+	  mode 0102h - fixed function set_active_page() for graphics modes
+	  - fixed the page sizes of some VGA modes
+
+2003-04-20 09:51  vruppert
+
+	* vgabios.c (1.28), vgatables.h (1.3), VGABIOS-lgpl-latest.bin
+	  (1.12), VGABIOS-lgpl-latest.debug.bin (1.12):
+
+	  - function write_gfx_char() now supports different font sizes -
+	  some entries of the static functionality table fixed
+
+2003-04-18 09:23  vruppert
+
+	* vbe.c (1.27), vbe.h (1.14), vbetables.h (1.15):
+
+	  - applied patch #1331   * new function dispi_set_bank_farcall()
+	  * VBE mode info item WinFuncPtr points to the new function if the
+	  flag	   VBE_WINDOW_ATTRIBUTE_RELOCATABLE is set   * flag
+	  VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE added
+
+2003-02-11 20:17  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.11), VGABIOS-lgpl-latest.debug.bin
+	  (1.11), vbe.c (1.26), vbetables.h (1.14):
+
+	  - VBE mode search rewritten	* improved function
+	  mode_info_find_mode() is now used by the VBE functions     0x4F01
+	  and 0x4F02   * removed all mode list entries with the LFB bit
+	  set. LFB detection is now	present in the function
+	  mode_info_find_mode()
+
+2003-02-09 20:59  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.10), VGABIOS-lgpl-latest.debug.bin
+	  (1.10), vgabios.c (1.27):
+
+	  - function write_gfx_char(): memory address now calculated in
+	  this function;   background color is always black - function
+	  biosfn_write_char_attr(): the count parameter is now used in
+	  graphics   modes too - function biosfn_write_char_only() works
+	  the same way as function   biosfn_write_char_attr() in graphics
+	  mode - copying charmap data optimized using memcpyb()
+
+2003-02-09 11:36  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.9), VGABIOS-lgpl-latest.debug.bin
+	  (1.9):
+
+	  - VESA mode 0x102 added (uses existing SVGA mode 0x6a) - all VESA
+	  modes with the LFB flag set removed from the list (Linux doesn't
+	   like mode numbers > 0x07ff)
+
+2003-02-09 11:02  vruppert
+
+	* vbe.c (1.25), vbe.h (1.13), vbetables.h (1.13):
+
+	  - VESA mode 0x102 added (uses existing SVGA mode 0x6a) - all VESA
+	  modes with the LFB flag set removed from the list (Linux doesn't
+	   like mode numbers > 0x07ff)
+
+2003-02-08 13:04  vruppert
+
+	* vbe.c (1.24), vgabios.c (1.26):
+
+	  - vbe_biosfn_return_current_mode() now returns the active
+	  standard VGA mode   TODO: return VESA mode if enabled -
+	  biosfn_set_video_mode() now clears the screen in CGA mode
+	  correctly - write character functions are now working in all
+	  PLANAR4 graphics modes - added stubs for unimplemented features
+	  in graphics modes
+
+2003-02-04 22:19  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.8), VGABIOS-lgpl-latest.debug.bin
+	  (1.8):
+
+	  - set video mode: clear vga memory in graphics mode - set video
+	  mode: load default font in text mode - write character
+	  implemented for graphics mode 0x12
+
+2003-02-04 22:06  vruppert
+
+	* vgabios.c (1.25):
+
+	  - set video mode: clear vga memory in graphics mode - set video
+	  mode: load default font in text mode - write character
+	  implemented for graphics mode 0x12
+
+2003-01-21 19:30  vruppert
+
+	* vgabios.c (1.24):
+
+	  - remap the cursor size if the char height is > 8 and the new
+	  values are < 8
+
+2003-01-20 18:24  cbothamy
+
+	* Makefile (1.9):
+
+	  - fix so make -j2 does not overwrite temp files
+
+2003-01-19 12:35  vruppert
+
+	* vgabios.c (1.23):
+
+	  - function set_scan_lines() recalculates the number of rows and
+	  the page size - new values for char height, text rows and page
+	  size are stored in the BIOS	data segment - asm helper function
+	  idiv_u added
+
+2003-01-15 18:49  cbothamy
+
+	* VGABIOS-lgpl-latest.bin (1.7), VGABIOS-lgpl-latest.debug.bin
+	  (1.7):
+
+	  - compile vgabios rev 1.22
+
+2003-01-15 18:49  cbothamy
+
+	* vgabios.c (1.22):
+
+	  - fix bug found by ams : a 8bits index value was compared to
+	  0x100 in some cases	in biosfn_set_all_dac_reg,
+	  biosfn_read_all_dac_reg, biosfn_perform_gray_scale_summing
+
+2003-01-15 17:34  cbothamy
+
+	* Makefile (1.8):
+
+	  - fix symbol table file names, discovered by ams
+
+2003-01-04 21:20  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.6), VGABIOS-lgpl-latest.debug.bin
+	  (1.6), vgabios.c (1.21):
+
+	  - biosfn_set_video_mode(): reset attribute controller flip-flop
+	  before setting   up the controller's registers (bug found with
+	  amidiag)
+
+2003-01-04 09:50  vruppert
+
+	* vbe.c (1.23):
+
+	  - VBE function 0x00 returns VBE 1.x compatible information if no
+	  VBE signature   is present
+
+2003-01-01 12:44  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.5), VGABIOS-lgpl-latest.debug.bin
+	  (1.5):
+
+	  - SVGA mode 0x6A (800x600x4) added to the list of graphics modes
+
+2002-12-31 18:07  vruppert
+
+	* vgatables.h (1.2):
+
+	  - SVGA mode 0x6A (800x600x4) added to the list of graphics modes
+
+2002-11-23 10:38  cbothamy
+
+	* ChangeLog (1.17, v0_3b):
+
+	  - fix changelog for 0.3b release
+
+2002-10-20 17:12  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.4), VGABIOS-lgpl-latest.debug.bin
+	  (1.4), vgabios.c (1.20) (utags: v0_3b):
+
+	  - new function set_scan_lines() for the font size change (patch
+	  from Hartmut Birr) - cursor shape start and end must be updated
+	  in set_scan_lines() - set_scan_lines() is called by the functions
+	  0x1110, 0x1111, 0x1112 and 0x1114   after copying the font data
+
+2002-10-04 08:20  vruppert
+
+	* VGABIOS-lgpl-latest.bin (1.3), VGABIOS-lgpl-latest.debug.bin
+	  (1.3), vgabios.c (1.19):
+
+	  - biosfn_set_single_dac_reg(): the red value is stored in DH
+
+2002-09-19 19:05  cbothamy
+
+	* VGABIOS-lgpl-latest.bin (1.2), VGABIOS-lgpl-latest.debug.bin
+	  (1.2):
+
+	  - updated with latest changes
+
+2002-09-19 19:03  cbothamy
+
+	* ChangeLog (1.16), Makefile (1.7, v0_3b), vbe.c (1.22, v0_3b),
+	  vgabios.c (1.18), vgabios.h (1.3, v0_4b, v0_4a, v0_3b):
+
+	  - updated the Makefile - removed display of copyrights.  -
+	  changed the Copyright string to "LGPL VGABios developers"
+
+2002-09-08 21:14  vruppert
+
+	* vgabios.c (1.17):
+
+	  - set the cursor shape depending on the current font height -
+	  clear BL before calling int 0x10 function 0x1103 in
+	  vgabios_init_func
+
+2002-08-23 22:58  cbothamy
+
+	* vbe.c (1.21), vbetables.h (1.12, v0_3b):
+
+	  - added lfb-mode numbers (patch from mathis)
+
+2002-07-21 21:57  japj
+
+	* vbe.c (1.20), vgabios.c (1.16):
+
+	  gcc2/3 preprocessing fix
+
+2002-05-18 16:55  cbothamy
+
+	* vgabios.c (1.15):
+
+	  - include patch from Volker that adds some text font functions
+
+2002-05-01 23:13  japj
+
+	* VGABIOS-lgpl-latest.bin (1.1), VGABIOS-lgpl-latest.debug.bin
+	  (1.1):
+
+	  adding latest bin & debug bin of the vgabios
+
+2002-04-29 14:50  japj
+
+	* ChangeLog (1.15), vbe.c (1.19), vbe.h (1.12, v0_3b), vbetables.h
+	  (1.11), vgabios.c (1.14):
+
+	  - applying hw scrolling/multibuffering patch
+
+2002-04-25 21:59  japj
+
+	* Makefile (1.6), vbe.c (1.18), vgabios.c (1.13):
+
+	  - reverting #asm/##asm & endasm patch (does not work with with
+	  cygwin)
+
+2002-04-19 19:38  japj
+
+	* Makefile (1.5), vbe.c (1.17), vgabios.c (1.12):
+
+	  - fixing preprocessing of vgabios with latest gcc (from Mandrake
+	  8.2)
+
+2002-04-08 23:44  japj
+
+	* ChangeLog (1.14), vbe_display_api.txt (1.5, v0_3b):
+
+	  - preparing docs for new DISPI interface (for hardware scrolling)
+
+2002-04-03 19:06  japj
+
+	* ChangeLog (1.13), TODO (1.9, v0_4b, v0_4a, v0_3b), vbe.c (1.16):
+
+	  - defaulting LFB on + updated changelog & todo
+
+2002-04-03 00:38  cbothamy
+
+	* vbe.c (1.15), vgabios.c (1.11):
+
+	  - changed the logging ports to 0x500 -> 0x502
+
+2002-03-14 17:54  japj
+
+	* vbe.c (1.14):
+
+	  - vbetables.h is dependant upon some defines (VBE_HAVE_LFB), so
+	  put the include *after* the define
+
+2002-03-13 21:47  japj
+
+	* ChangeLog (1.12), TODO (1.8), vbe.c (1.13), vbetables.h (1.10),
+	  vgabios.c (1.10):
+
+	  - made LFB dependant upon define - not implement vbe functions
+	  return failure - updated todo & docs for things after bochs 1.4
+
+2002-03-13 19:46  japj
+
+	* vbe.h (1.11), vbe_display_api.txt (1.4):
+
+	  - added max video memory + documented what is in the 0xb0c0
+	  interface
+
+2002-03-12 02:33  cbothamy
+
+	* ChangeLog (1.11), Makefile (1.4):
+
+	  - updated for 0.3a. Merged vgabios.bin and vbebios.bin
+
+2002-03-10 21:36  japj
+
+	* ChangeLog (1.10), vbetables.h (1.9):
+
+	  - added LFB modes for testing with vbe-lfb patch in Bochs
+
+2002-03-10 17:42  japj
+
+	* vbe.c (1.12, v0_3a):
+
+	  - show people when they do NOT have VBE support available
+
+2002-03-10 17:36  japj
+
+	* TODO (1.7, v0_3a), vbe.c (1.11), vbe.h (1.10, v0_3a), vgabios.c
+	  (1.9, v0_3a):
+
+	  - cleanup of vbe internal functions (set 8bpp mode is now
+	  dependant on ModeInfo content instead of hardcoded functions)
+
+2002-03-10 17:20  cbothamy
+
+	* ChangeLog (1.9, v0_3a), TODO (1.6):
+
+	  - updated for 0.3a
+
+2002-03-10 17:19  cbothamy
+
+	* vbe.c (1.10), vbe.h (1.9):
+
+	  - added vbe_has_vbe_display function that detects an attached vbe
+	  display
+
+2002-03-10 17:12  cbothamy
+
+	* vgabios.c (1.8):
+
+	  - vbe calls are done only if a vbe display is detected
+
+2002-03-10 11:25  japj
+
+	* vbe.h (1.8), vbe_display_api.txt (1.3, v0_3a):
+
+	  - preparing for LFB support
+
+2002-03-09 14:25  japj
+
+	* vgabios.c (1.7):
+
+	  - fixing initial cursor shape to _ instead of -
+
+2002-03-08 23:08  japj
+
+	* ChangeLog (1.8), TODO (1.5), vbe.c (1.9), vbe.h (1.7), vgabios.c
+	  (1.6):
+
+	  - updating vbe code to new API
+
+2002-03-08 21:48  japj
+
+	* vbe.c (1.8), vbe.h (1.6), vbetables.h (1.8, v0_3a):
+
+	  - updating vbe code with #defines from API
+
+2002-03-08 21:31  japj
+
+	* vbe_display_api.txt (1.2):
+
+	  - adding some text about how banks work
+
+2002-03-08 21:09  japj
+
+	* ChangeLog (1.7), vbe_display_api.txt (1.1):
+
+	  - adding vbe_display_api documentation
+
+2002-03-07 21:36  japj
+
+	* ChangeLog (1.6), vbe.c (1.7), vbetables.h (1.7):
+
+	  - added 1024x768xbpp support - some more cleanups/comments
+
+2002-03-06 21:55  japj
+
+	* ChangeLog (1.5), TODO (1.4), vbe.c (1.6), vbetables.h (1.6),
+	  vgabios.c (1.5):
+
+	  - updated changelog with new modi - added 640x480x8 (Mandrake
+	  Installer can use this!) - added pre VBE2 compatible 'detection'
+	  - fixed problem when normal vga set mode wouldn't disable vbe
+	  mode
+
+2002-03-06 20:59  japj
+
+	* TODO (1.3), vbe.c (1.5), vbe.h (1.5), vbetables.h (1.5),
+	  vgabios.c (1.4):
+
+	  - adding 640x400x8 and 800x600x8 vbe support	 (this depends
+	  HEAVILY on my bochs vga code patch - japj)
+
+2002-03-06 18:00  japj
+
+	* vbe.c (1.4), vbe.h (1.4), vbetables.h (1.4):
+
+	  - implemented banked & lfb support for 320x200x8bpp	(some fixes
+	  for vbetest program not displaying anything)
+
+2002-03-05 20:25  japj
+
+	* Makefile (1.3, v0_3a):
+
+	  for vbe debug bios: - print debugging information in assembly
+	  output - print source code in assembly output
+
+2002-03-01 19:39  japj
+
+	* ChangeLog (1.4), TODO (1.2), vbe.c (1.3), vbe.h (1.3),
+	  vbetables.h (1.3):
+
+	  - added vbe support for 320x200x8 using the standard vgamode
+	  (0x13)
+
+2002-02-19 00:29  japj
+
+	* ChangeLog (1.3):
+
+	  - updating ChangeLog with lfbprof
+
+2002-02-18 23:26  japj
+
+	* tests/lfbprof/: lfbprof.c (1.2), lfbprof.h (1.2) (utags: v0_3a,
+	  v0_3b, v0_4a, v0_4b):
+
+	  - fixed unsigned short for mode list (-1 != 0xffff otherwise) -
+	  fixed LfbMapRealPointer macro mask problem (some modes were
+	  skipped) - added some extra 'debugging' printf's
+
+2002-02-18 23:07  japj
+
+	* tests/lfbprof/: Makefile (1.1, v0_4b, v0_4a, v0_3b, v0_3a),
+	  lfbprof.c (1.1), lfbprof.h (1.1):
+
+	  - Adding lfbprof testprogram (for vbe testing purposes)   It
+	  needs to be compiled with the Watcom C Compiler
+
+2002-02-18 18:48  japj
+
+	* vbe.c (1.2), vbe.h (1.2):
+
+	  - cosmetic updates to vbe.c/h + added bunch of FIXMEs for work
+	  that needs to be done
+
+2002-02-18 18:34  japj
+
+	* vbetables.h (1.2):
+
+	  - cosmetic updates in vbetables.h
+
+2002-02-18 18:32  japj
+
+	* ChangeLog (1.2):
+
+	  updated changelog with merge of vbebios 0.2
+
+2002-02-18 18:07  japj
+
+	* vgabios.c (1.3):
+
+	  - small cosmetic cleanup in vgabios vbe code + added FIXMEs
+
+2002-02-18 17:55  japj
+
+	* Makefile (1.2), dataseghack (1.2, v0_4b, v0_4a, v0_3b, v0_3a),
+	  vbe.c (1.1), vbe.h (1.1), vbetables.h (1.1), vgabios.c (1.2),
+	  vgabios.h (1.2, v0_3a):
+
+	  - merging with vbebios 0.2 release
+
+2002-02-18 11:31  cbothamy
+
+	* BUGS (1.1, v0_4b, v0_4a, v0_3b, v0_3a), COPYING (1.1, v0_4b,
+	  v0_4a, v0_3b, v0_3a), ChangeLog (1.1), Makefile (1.1), Notes
+	  (1.1, v0_4b, v0_4a, v0_3b, v0_3a), README (1.1, v0_3b, v0_3a),
+	  TODO (1.1), dataseghack (1.1), vgabios.c (1.1), vgabios.h (1.1),
+	  vgafonts.h (1.1, v0_4b, v0_4a, v0_3b, v0_3a), vgatables.h (1.1,
+	  v0_3b, v0_3a), tests/testbios.c (1.1, v0_4b, v0_4a, v0_3b,
+	  v0_3a):
+
+	  - initial import
+
Index: /trunk/src/VBox/Devices/Graphics/BIOS/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/Makefile.kmk	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/Makefile.kmk	(revision 43609)
@@ -0,0 +1,139 @@
+# $Id$
+## @file
+# Sub-Makefile for the New VGA BIOS ROM.
+#
+
+#
+# Copyright (C) 2012 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+SUB_DEPTH = ../../../../..
+include $(KBUILD_PATH)/subheader.kmk
+
+
+ifdef VBOX_WITH_OPEN_WATCOM
+
+ #
+ # VBoxVgaBios - The VGA BIOS.
+ #
+ MISCBINS += VBoxVgaBios
+ VBoxVgaBios_TEMPLATE = VBoxBios
+ VBoxVgaBios_ASFLAGS = -0
+ VBoxVgaBios_DEFS = VBE
+ VBoxVgaBios_SOURCES = \
+ 	vgarom.asm \
+ 	vberom.asm \
+ 	vgabios.c \
+ 	vbe.c
+ VBoxVgaBios_LDFLAGS = \
+ 	output raw offset=0xC0000 \
+ 	order \
+ 	 clname CODE  \
+	  segment VGAROM segaddr=0xC000 \
+ 	  segment _TEXT  segaddr=0xC000 offset=0xA00 \
+ 	  segment VBE32  segaddr=0xC000 offset=0x4600 \
+ 	 clname DATA \
+ 	  segment _DATA  segaddr=0xC000 offset=0x4800 \
+
+ #
+ # Updates the alternative source file.
+ #
+ update-vgabios-source +| $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.asm $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.md5sum: \
+ 		$$(VBoxVgaBios_1_TARGET) \
+ 		$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
+		$(VBOX_VBOXCMP)
+ if1of ($(KBUILD_TYPE), release)
+	$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
+		--bios-image $< \
+		--bios-map $(basename $<).map \
+		--bios-sym $(basename $<).sym \
+               --bios-type vga \
+		--output $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm
+	$(QUIET)yasm -f bin -o $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.bin $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm
+	$(VBOX_VBOXCMP) $< $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.bin
+	$(CP) --changed -- $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS-new/VBoxVgaBiosAlternative.asm
+	$(REDIRECT) -C $(dir $(VBoxVgaBios_1_TARGET)) -- \
+		$(MD5SUM_EXT) -bo $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.md5sum $(notdir $(VBoxVgaBios_1_TARGET))
+	$(CP) --changed -- $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.md5sum $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS-new/VBoxVgaBiosAlternative.md5sum
+	$(RM) -f -- $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.asm $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.bin $(VBoxVgaBios_0_OUTDIR)/VBoxVgaBiosAlternative.md5sum
+ else
+	$(QUIET)$(ECHO) "Fatal error: Can only update VBoxVgaBiosAlternative.asm/md5sum with a release build."
+	$(QUIET)exit 1
+ endif
+
+endif # VBOX_WITH_OPEN_WATCOM
+
+
+#
+# The library containing the VGA BIOS image.
+#
+LIBRARIES += VgaBiosBin
+VgaBiosBin_TEMPLATE  = VBOXR3
+VgaBiosBin_DEFS      = IN_VBOXDD2
+VgaBiosBin_SOURCES   = \
+	$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c
+VgaBiosBin_DEPS      = \
+	$(VgaBiosBin_0_OUTDIR)/vbetables.h
+VgaBiosBin_CLEAN     = \
+	$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c \
+	$(VgaBiosBin_0_OUTDIR)/vbetables.h
+
+ifdef VBOX_WITH_OPEN_WATCOM
+ $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c: $$(VBoxVgaBios_1_TARGET) $(VBOX_BIN2C) | $$(dir $$@)
+	$(call MSG_TOOL,bin2c,VgaBiosBin,$<,$@)
+	$(QUIET)$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary $< $@
+else
+ VgaBiosBin_CLEAN    += $(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom
+
+ $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin.c + $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom: \
+		$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.asm \
+		$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative.md5sum \
+		$(VBOX_BIN2C) | $$(dir $$@)
+	$(call MSG_TOOL,bin2c,VgaBiosBin,$<,$@)
+	$(QUIET)yasm -f bin -o $(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom $<
+	$(QUIET)$(REDIRECT) -C $(VgaBiosBin_0_OUTDIR) -- \
+		$(MD5SUM_EXT) -c $(basename $<).md5sum
+	$(QUIET)$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary $(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom $@
+	$(QUIET)$(RM) -f -- $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios.rom
+endif
+
+
+# Rule for making the vbetables.h that DevVGA uses.
+$$(VgaBiosBin_0_OUTDIR)/vbetables.h: $(MAKEFILE_CURRENT) $$(vbetables-gen_1_TARGET) | $$(dir $$@)
+	$(QUIET)$(REDIRECT) -wo $@ -- $(vbetables-gen_1_TARGET)
+
+
+#
+# The VBE tables.
+#
+BLDPROGS += vbetables-gen
+vbetables-gen_TEMPLATE = VBOXBLDPROG
+vbetables-gen_SOURCES  = vbetables-gen.c
+vbetables-gen_CLEAN    = $(vbetables-gen)
+
+
+#
+# The VGA BIOS Logo.
+#
+LIBRARIES += VgaDefBiosLogo
+VgaDefBiosLogo_TEMPLATE  = VBOXR3
+VgaDefBiosLogo_INCS      = $(VBOX_PATH_DEVICES_SRC)
+VgaDefBiosLogo_SOURCES   = $(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogo.c
+VgaDefBiosLogo_CLEAN     = $(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogo.c
+
+# Rule for making the bios logo.
+$$(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogo.c: $(VBOX_BRAND_BIOS_LOGO) $(VBOX_BIN2C) | $$(dir $$@)
+	$(call MSG_TOOL,bin2c,VgaDefBiosLogo,$<,$@)
+	$(QUIET)$(VBOX_BIN2C) VgaDefBiosLogo $< $@
+
+
+include $(FILE_KBUILD_SUB_FOOTER)
+
Index: /trunk/src/VBox/Devices/Graphics/BIOS/Notes
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/Notes	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/Notes	(revision 43609)
@@ -0,0 +1,11 @@
+Development notes
+-----------------
+
+- need to split video init function
+    1. set bios variables
+    2. do the real init with io based on bios variables
+
+- characters format switching will set the bios
+  variables and call function #2 above
+
+- need to rework the tables as explained in Interrupt list
Index: /trunk/src/VBox/Devices/Graphics/BIOS/README
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/README	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/README	(revision 43609)
@@ -0,0 +1,214 @@
+Plex86/Bochs VGABios
+--------------------
+
+The goal of this project is to have a LGPL'd Video Bios in plex86,
+Bochs and qemu.
+This VGA Bios is very specific to the emulated VGA card.
+It is NOT meant to drive a physical vga card.
+
+
+Cirrus SVGA extension
+---------------------
+
+The Cirrus SVGA extension is designed for the Cirrus emulation in Bochs and
+qemu. The initial patch for the Cirrus extension has been written by Makoto
+Suzuki (suzu).
+
+
+Install
+-------
+To compile the VGA Bios you will need :
+- gcc
+- bcc
+- as86
+- ld86
+
+Untar the archive, and type make. You should get a "VGABIOS-lgpl-latest.bin"
+file. Alternatively, you can use the binary file "VGABIOS-lgpl-latest.bin",
+i have compiled for you.
+
+Edit your plex86/bochs conf file, and modify the load-rom command in the
+VGA BIOS section, to point to the new vgabios image file.
+
+
+Debugging
+---------
+You can get a very basic debugging system: messages printed by the vgabios.
+You have to register the "unmapped" device driver in plex86 or bochs, and make
+sure it grabs port 0xfff0.
+
+Comment the #undef DEBUG at the beginning of vgabios.c. 
+You can then use the "printf" function in the bios. 
+
+
+Testing
+-------
+Look at the "testvga.c" file in the archive. This is a minimal Turbo C 2.0 
+source file that calls a few int10 functions. Feel free to modify it to suit 
+your needs.
+
+
+Copyright and License
+---------------------
+This program has been written by Christophe Bothamy
+It is protected by the GNU Lesser Public License, which you should
+have received a copy of along with this package. 
+
+
+Reverse Engineering
+-------------------
+The VGA Bios has been written without reverse-engineering any existing Bios.
+
+
+Acknowledgment
+--------------
+The source code contains code ripped from rombios.c of plex86, written
+by Kevin Lawton <kevin2001@yahoo.com>
+
+The source code contains fonts from fntcol16.zip (c) by Joseph Gil avalable at :
+ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+These fonts are public domain
+
+The source code is based on information taken from :
+- Kevin Lawton's vga card emulation for bochs/plex86
+- Ralf Brown's interrupts list avalaible at 
+  http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+- Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+- Michael Abrash's Graphics Programming Black Book
+- Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" 
+  edited by sybex
+- DOSEMU 1.0.1 source code for several tables values and formulas
+
+
+Feedback
+--------
+Please report any bugs, comments, patches for this VGA Bios to info@vruppert.de
+You can find the latest release at : http://www.nongnu.org/vgabios/
+For any information on bochs, visit the website http://bochs.sourceforge.net/
+For any information on qemu, visit the website http://fabrice.bellard.free.fr/qemu/
+
+
+History
+-------
+vgabios-0.6a : Aug 19 2006
+  - Volker
+    . added minimal support for the video parameter table (VPT)
+    . Cirrus SVGA now supports the "no clear" bit in Cirrus and VESA mode
+    . Bochs VBE protected mode interface improved
+    . save/restore video state support for Bochs VBE and standard VGA added
+    . generate vbetables.h dynamicly
+    . VBE video memory increased to 8 MB (VBE dispi ID changed to B0C4)
+    . lots of 4bpp VBE fixes (all 4bpp VBE modes now enabled)
+    . VGA compatible setup for VBE modes added
+
+vgabios-0.5d : Dec 29 2005
+  - Volker
+    . Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com)
+    . biossums utility now supports VGABIOS sizes up to 64 kBytes
+    . VGA mode 0x11: all color planes must be enabled in this 2-color VGA mode
+
+vgabios-0.5c : Jul 07 2005
+  - Volker
+    . BIOS configuration word usually reports initial mode 80x25 color text
+    . vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the
+      cursor row value
+
+vgabios-0.5b : May 24 2005
+  - Volker
+    . fixed return value for the default case in the VBE section (non-debug mode)
+    . removed unused stuff
+
+vgabios-0.5a : Mar 07 2005
+  - Volker
+    . Cirrus SVGA extension (initial patches from Makoto Suzuki, improvements
+      from Fabrice Bellard)
+    . vgabios image size is now exactly 32k with a checksum
+    . a lot of vgabios and vbe functions rewritten in assembler
+    . dynamicly generated VBE mode info list
+    . write character function for CGA and LINEAR8 modes
+    . read/write graphics pixel for some graphics modes
+    . text scroll feature for some graphics modes
+    . VBE 8-bit DAC support
+
+vgabios-0.4c : Nov 06 2003
+  - Christophe
+    . fix font problem on initial screen of NT4 Loader
+    
+vgabios-0.4b : Nov 04 2003
+  - Volker 
+    . fix offset of character tables
+    . optimizations of CRT controller accesses
+    . VBE i/o registers changed to 0x01CE/CF 
+      (suggestion from Daniel Gimpelevich)
+    . "noclear" flag stored in BIOS area
+    . fix character height returned by get_font_info function
+
+vgabios-0.4a : Aug 17 2003
+  - Volker
+    . VBE mode search rewritten (VBE modes with LFB bit removed)
+    . many bugfixes and optimizations
+    . write character function implemented for graphics modes
+    . support for 15bpp, 16bpp, 24bpp and 32bpp VBE modes added
+    . SVGA mode 0x6A added
+    . VBE modes 0x102, 0x117, 0x118 and 0x142 (Bochs specific)
+
+vgabios-0.3b : Nov 23 2002
+  - Christophe
+    . added lfb-mode numbers (patch from mathis)
+    . updated the Makefile
+    . removed display of copyrights. 
+    . changed the Copyright string to "LGPL VGABios developers"
+  - Volker 
+    . set the cursor shape depending on the current font height
+    . clear BL before calling int 0x10 function 0x1103 in vgabios_init_func
+    . added some text font functions
+  - Jeroen
+    . Forced to new DISPI (0xb0c1) interface (requires latest bochs vbe code)
+    . Added multibuffering support
+    . Added new DISPI interface for: virt width, height, x offset, y offset
+    . Added LFB modes (to be used with the vbe-lfb patch in bochs)
+      see VBE_HAVE_LFB in vbe.c (currently default enabled)
+    . updated TODO & docs for changes after bochs 1.4
+
+vgabios-0.3a : Mar 10 2002
+  - Christophe
+    . Fixed bug in function ah=13
+  - Jeroen
+    . updated vbebios implementation to new api
+    . added vbe_display_api documentation
+    . added 640x400x8, 640x480x8, 800x600x8, 1024x768 
+      (>640x480 needs a special bochs patch atm)
+    . added 320x200x8 vbe support (uses the standard 320x200x8 vga mode to
+      display, this allows for testing & having something on screen as well,
+      at least until bochs host side display is up & running)
+    . adding lfbprof (vbe) testprogram (+some small fixes to it)
+    . merging with vbebios 0.2
+
+vgabios-0.2b : Nov 19 2001
+  - Christophe
+    . Fixed bug in function ah=13
+
+vgabios-0.2a : Nov 09 2001
+  - Christophe
+    . Included bugfix from techt@pikeonline.net about grayscale summing
+    . Added the "IBM" string at org 0x1e as Bart Oldeman suggested
+    . Fixed DS and ES that where inverted in the int10 parameters list!
+    . The following have been implemented :
+	- function ax=1a00, ax=1a01, ah=1b
+	- function ax=1130                
+    . Added debug messages for unimplemented/unknown functions
+      Must be compiled with DEBUG defined. The output is trapped
+      by the unknown-ioport driver of plex/bochs (port 0xfff0 is used)
+
+vgabios-0.1a : May 8 2001
+  - Christophe
+    . First release. The work has been focused only on text mode.
+    . The following have been implemented :
+	- inits
+	- int 10 handler
+	- functions ah=00, ah=01, ah=02, ah=03, ah=05, ah=06, ah=07, ah=08
+	  ah=09, ah=0a, ah=0e, ah=0f, ax=1000, ax=1001, ax=1002, ax=1003
+	  ax=1007, ax=1008, ax=1009, ax=1010, ax=1012, ax=1013, ax=1015
+	  ax=1017, ax=1018, ax=1019, ax=101a, ax=101b, ah=12 bl=10,
+	  ah=12 bl=30, ah=12 bl=31, ah=12 bl=32, ah=12 bl=33, ah=12 bl=34
+	  ah=13
Index: /trunk/src/VBox/Devices/Graphics/BIOS/TODO
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/TODO	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/TODO	(revision 43609)
@@ -0,0 +1,26 @@
+Short term :
+------------
+
+General
+  - Fix init mode (ah=00). Should use more BIOS variables
+  - Add new functionalities and modify static functionality table 
+  - Performance : 16 bits IO
+
+v0.7
+  - Implement the remaining functions (don't know if all are needed):
+	- chargen ax=1120, ax=1121, ax=1122, ax=1123, ax=1124
+	- display switch interface ah=12 bl=35
+	- video refresh control ah=12 bl=36
+  - Graphic modes
+
+v1.0
+  - Bugfixes
+
+
+=================================================================================================
+VBE:
+----
+Long term:
+- have plex86 host side display interface
+- have text io functions in vbe mode
+
Index: /trunk/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm	(revision 43609)
@@ -0,0 +1,7563 @@
+; $Id$ 
+;; @file
+; Auto Generated source file. Do not edit.
+;
+
+;
+; Source file: vgarom.asm
+;
+;  ============================================================================================
+;  
+;   Copyright (C) 2001,2002 the LGPL VGABios developers Team
+;  
+;   This library is free software; you can redistribute it and/or
+;   modify it under the terms of the GNU Lesser General Public
+;   License as published by the Free Software Foundation; either
+;   version 2 of the License, or (at your option) any later version.
+;  
+;   This library 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
+;   Lesser General Public License for more details.
+;  
+;   You should have received a copy of the GNU Lesser General Public
+;   License along with this library; if not, write to the Free Software
+;   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+;  
+;  ============================================================================================
+;  
+;   This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+;   You can NOT drive any physical vga card with it.
+;  
+;  ============================================================================================
+;  
+
+;
+; Source file: vberom.asm
+;
+;  ============================================================================================
+;  
+;   Copyright (C) 2002 Jeroen Janssen
+;  
+;   This library is free software; you can redistribute it and/or
+;   modify it under the terms of the GNU Lesser General Public
+;   License as published by the Free Software Foundation; either
+;   version 2 of the License, or (at your option) any later version.
+;  
+;   This library 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
+;   Lesser General Public License for more details.
+;  
+;   You should have received a copy of the GNU Lesser General Public
+;   License along with this library; if not, write to the Free Software
+;   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+;  
+;  ============================================================================================
+;  
+;   This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+;   You can NOT drive any physical vga card with it.
+;  
+;  ============================================================================================
+;  
+;   This VBE Bios is based on information taken from :
+;    - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+;  
+;  ============================================================================================
+
+;
+; Source file: vgabios.c
+;
+;  // ============================================================================================
+;  
+;  vgabios.c
+;  
+;  // ============================================================================================
+;  //
+;  //  Copyright (C) 2001,2002 the LGPL VGABios developers Team
+;  //
+;  //  This library is free software; you can redistribute it and/or
+;  //  modify it under the terms of the GNU Lesser General Public
+;  //  License as published by the Free Software Foundation; either
+;  //  version 2 of the License, or (at your option) any later version.
+;  //
+;  //  This library 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
+;  //  Lesser General Public License for more details.
+;  //
+;  //  You should have received a copy of the GNU Lesser General Public
+;  //  License along with this library; if not, write to the Free Software
+;  //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+;  //
+;  // ============================================================================================
+;  //
+;  //  This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+;  //  You can NOT drive any physical vga card with it.
+;  //
+;  // ============================================================================================
+;  //
+;  //  This file contains code ripped from :
+;  //   - rombios.c of plex86
+;  //
+;  //  This VGA Bios contains fonts from :
+;  //   - fntcol16.zip (c) by Joseph Gil avalable at :
+;  //      ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+;  //     These fonts are public domain
+;  //
+;  //  This VGA Bios is based on information taken from :
+;  //   - Kevin Lawton's vga card emulation for bochs/plex86
+;  //   - Ralf Brown's interrupts list available at http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+;  //   - Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+;  //   - Michael Abrash's Graphics Programming Black Book
+;  //   - Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" edited by sybex
+;  //   - DOSEMU 1.0.1 source code for several tables values and formulas
+;  //
+;  // Thanks for patches, comments and ideas to :
+;  //   - techt@pikeonline.net
+;  //
+;  // ============================================================================================
+
+;
+; Source file: vbe.c
+;
+;  // ============================================================================================
+;  //
+;  //  Copyright (C) 2002 Jeroen Janssen
+;  //
+;  //  This library is free software; you can redistribute it and/or
+;  //  modify it under the terms of the GNU Lesser General Public
+;  //  License as published by the Free Software Foundation; either
+;  //  version 2 of the License, or (at your option) any later version.
+;  //
+;  //  This library 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
+;  //  Lesser General Public License for more details.
+;  //
+;  //  You should have received a copy of the GNU Lesser General Public
+;  //  License along with this library; if not, write to the Free Software
+;  //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+;  //
+;  // ============================================================================================
+;  //
+;  //  This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+;  //  You can NOT drive any physical vga card with it.
+;  //
+;  // ============================================================================================
+;  //
+;  //  This VBE Bios is based on information taken from :
+;  //   - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+;  //
+;  // ============================================================================================
+
+
+
+
+section VGAROM progbits vstart=0x0 align=1 ; size=0x92e class=CODE group=AUTO
+    db  055h, 0aah, 040h, 0e9h, 05fh, 00ah, 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, 049h, 042h
+    db  04dh, 000h
+vgabios_int10_handler:                       ; 0xc0022 LB 0x575
+    pushfw                                    ; 9c
+    cmp ah, 00fh                              ; 80 fc 0f
+    jne short 0002eh                          ; 75 06
+    call 00175h                               ; e8 4a 01
+    jmp near 000f3h                           ; e9 c5 00
+    cmp ah, 01ah                              ; 80 fc 1a
+    jne short 00039h                          ; 75 06
+    call 0052ah                               ; e8 f4 04
+    jmp near 000f3h                           ; e9 ba 00
+    cmp ah, 00bh                              ; 80 fc 0b
+    jne short 00044h                          ; 75 06
+    call 000f5h                               ; e8 b4 00
+    jmp near 000f3h                           ; e9 af 00
+    cmp ax, 01103h                            ; 3d 03 11
+    jne short 0004fh                          ; 75 06
+    call 00421h                               ; e8 d5 03
+    jmp near 000f3h                           ; e9 a4 00
+    cmp ah, 012h                              ; 80 fc 12
+    jne short 00092h                          ; 75 3e
+    cmp bl, 010h                              ; 80 fb 10
+    jne short 0005fh                          ; 75 06
+    call 0042eh                               ; e8 d2 03
+    jmp near 000f3h                           ; e9 94 00
+    cmp bl, 030h                              ; 80 fb 30
+    jne short 0006ah                          ; 75 06
+    call 00451h                               ; e8 ea 03
+    jmp near 000f3h                           ; e9 89 00
+    cmp bl, 031h                              ; 80 fb 31
+    jne short 00074h                          ; 75 05
+    call 004a4h                               ; e8 32 04
+    jmp short 000f3h                          ; eb 7f
+    cmp bl, 032h                              ; 80 fb 32
+    jne short 0007eh                          ; 75 05
+    call 004c6h                               ; e8 4a 04
+    jmp short 000f3h                          ; eb 75
+    cmp bl, 033h                              ; 80 fb 33
+    jne short 00088h                          ; 75 05
+    call 004e4h                               ; e8 5e 04
+    jmp short 000f3h                          ; eb 6b
+    cmp bl, 034h                              ; 80 fb 34
+    jne short 000e5h                          ; 75 58
+    call 00508h                               ; e8 78 04
+    jmp short 000f3h                          ; eb 61
+    cmp ax, 0101bh                            ; 3d 1b 10
+    je short 000e5h                           ; 74 4e
+    cmp ah, 010h                              ; 80 fc 10
+    jne short 000a1h                          ; 75 05
+    call 0019ch                               ; e8 fd 00
+    jmp short 000f3h                          ; eb 52
+    cmp ah, 04fh                              ; 80 fc 4f
+    jne short 000e5h                          ; 75 3f
+    cmp AL, strict byte 003h                  ; 3c 03
+    jne short 000afh                          ; 75 05
+    call 007a7h                               ; e8 fa 06
+    jmp short 000f3h                          ; eb 44
+    cmp AL, strict byte 005h                  ; 3c 05
+    jne short 000b8h                          ; 75 05
+    call 007cch                               ; e8 16 07
+    jmp short 000f3h                          ; eb 3b
+    cmp AL, strict byte 006h                  ; 3c 06
+    jne short 000c1h                          ; 75 05
+    call 007f9h                               ; e8 3a 07
+    jmp short 000f3h                          ; eb 32
+    cmp AL, strict byte 007h                  ; 3c 07
+    jne short 000cah                          ; 75 05
+    call 00846h                               ; e8 7e 07
+    jmp short 000f3h                          ; eb 29
+    cmp AL, strict byte 008h                  ; 3c 08
+    jne short 000d3h                          ; 75 05
+    call 0087ah                               ; e8 a9 07
+    jmp short 000f3h                          ; eb 20
+    cmp AL, strict byte 009h                  ; 3c 09
+    jne short 000dch                          ; 75 05
+    call 008b1h                               ; e8 d7 07
+    jmp short 000f3h                          ; eb 17
+    cmp AL, strict byte 00ah                  ; 3c 0a
+    jne short 000e5h                          ; 75 05
+    call 00915h                               ; e8 32 08
+    jmp short 000f3h                          ; eb 0e
+    push ES                                   ; 06
+    push DS                                   ; 1e
+    pushaw                                    ; 60
+    mov bx, 0c000h                            ; bb 00 c0
+    mov ds, bx                                ; 8e db
+    call 02fb4h                               ; e8 c4 2e
+    popaw                                     ; 61
+    pop DS                                    ; 1f
+    pop ES                                    ; 07
+    popfw                                     ; 9d
+    iret                                      ; cf
+    cmp bh, 000h                              ; 80 ff 00
+    je short 00100h                           ; 74 06
+    cmp bh, 001h                              ; 80 ff 01
+    je short 00143h                           ; 74 44
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 000h                  ; b0 00
+    out DX, AL                                ; ee
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    and AL, strict byte 00fh                  ; 24 0f
+    test AL, strict byte 008h                 ; a8 08
+    je short 00118h                           ; 74 02
+    add AL, strict byte 008h                  ; 04 08
+    out DX, AL                                ; ee
+    mov CL, strict byte 001h                  ; b1 01
+    and bl, 010h                              ; 80 e3 10
+    mov dx, 003c0h                            ; ba c0 03
+    db  08ah, 0c1h
+    ; mov al, cl                                ; 8a c1
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    and AL, strict byte 0efh                  ; 24 ef
+    db  00ah, 0c3h
+    ; or al, bl                                 ; 0a c3
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    db  0feh, 0c1h
+    ; inc cl                                    ; fe c1
+    cmp cl, 004h                              ; 80 f9 04
+    jne short 0011eh                          ; 75 e7
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov CL, strict byte 001h                  ; b1 01
+    and bl, 001h                              ; 80 e3 01
+    mov dx, 003c0h                            ; ba c0 03
+    db  08ah, 0c1h
+    ; mov al, cl                                ; 8a c1
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    and AL, strict byte 0feh                  ; 24 fe
+    db  00ah, 0c3h
+    ; or al, bl                                 ; 0a c3
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    db  0feh, 0c1h
+    ; inc cl                                    ; fe c1
+    cmp cl, 004h                              ; 80 f9 04
+    jne short 00150h                          ; 75 e7
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push DS                                   ; 1e
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    push bx                                   ; 53
+    mov bx, strict word 00062h                ; bb 62 00
+    mov al, byte [bx]                         ; 8a 07
+    pop bx                                    ; 5b
+    db  08ah, 0f8h
+    ; mov bh, al                                ; 8a f8
+    push bx                                   ; 53
+    mov bx, 00087h                            ; bb 87 00
+    mov ah, byte [bx]                         ; 8a 27
+    and ah, 080h                              ; 80 e4 80
+    mov bx, strict word 00049h                ; bb 49 00
+    mov al, byte [bx]                         ; 8a 07
+    db  00ah, 0c4h
+    ; or al, ah                                 ; 0a c4
+    mov bx, strict word 0004ah                ; bb 4a 00
+    mov ah, byte [bx]                         ; 8a 27
+    pop bx                                    ; 5b
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    cmp AL, strict byte 000h                  ; 3c 00
+    jne short 001a2h                          ; 75 02
+    jmp short 00203h                          ; eb 61
+    cmp AL, strict byte 001h                  ; 3c 01
+    jne short 001a8h                          ; 75 02
+    jmp short 00221h                          ; eb 79
+    cmp AL, strict byte 002h                  ; 3c 02
+    jne short 001aeh                          ; 75 02
+    jmp short 00229h                          ; eb 7b
+    cmp AL, strict byte 003h                  ; 3c 03
+    jne short 001b5h                          ; 75 03
+    jmp near 0025ah                           ; e9 a5 00
+    cmp AL, strict byte 007h                  ; 3c 07
+    jne short 001bch                          ; 75 03
+    jmp near 00284h                           ; e9 c8 00
+    cmp AL, strict byte 008h                  ; 3c 08
+    jne short 001c3h                          ; 75 03
+    jmp near 002ach                           ; e9 e9 00
+    cmp AL, strict byte 009h                  ; 3c 09
+    jne short 001cah                          ; 75 03
+    jmp near 002bah                           ; e9 f0 00
+    cmp AL, strict byte 010h                  ; 3c 10
+    jne short 001d1h                          ; 75 03
+    jmp near 002ffh                           ; e9 2e 01
+    cmp AL, strict byte 012h                  ; 3c 12
+    jne short 001d8h                          ; 75 03
+    jmp near 00318h                           ; e9 40 01
+    cmp AL, strict byte 013h                  ; 3c 13
+    jne short 001dfh                          ; 75 03
+    jmp near 00340h                           ; e9 61 01
+    cmp AL, strict byte 015h                  ; 3c 15
+    jne short 001e6h                          ; 75 03
+    jmp near 00387h                           ; e9 a1 01
+    cmp AL, strict byte 017h                  ; 3c 17
+    jne short 001edh                          ; 75 03
+    jmp near 003a2h                           ; e9 b5 01
+    cmp AL, strict byte 018h                  ; 3c 18
+    jne short 001f4h                          ; 75 03
+    jmp near 003cah                           ; e9 d6 01
+    cmp AL, strict byte 019h                  ; 3c 19
+    jne short 001fbh                          ; 75 03
+    jmp near 003d5h                           ; e9 da 01
+    cmp AL, strict byte 01ah                  ; 3c 1a
+    jne short 00202h                          ; 75 03
+    jmp near 003e0h                           ; e9 de 01
+    retn                                      ; c3
+    cmp bl, 014h                              ; 80 fb 14
+    jnbe short 00220h                         ; 77 18
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    out DX, AL                                ; ee
+    db  08ah, 0c7h
+    ; mov al, bh                                ; 8a c7
+    out DX, AL                                ; ee
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push bx                                   ; 53
+    mov BL, strict byte 011h                  ; b3 11
+    call 00203h                               ; e8 dc ff
+    pop bx                                    ; 5b
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    db  08bh, 0dah
+    ; mov bx, dx                                ; 8b da
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov CL, strict byte 000h                  ; b1 00
+    mov dx, 003c0h                            ; ba c0 03
+    db  08ah, 0c1h
+    ; mov al, cl                                ; 8a c1
+    out DX, AL                                ; ee
+    mov al, byte [es:bx]                      ; 26 8a 07
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    db  0feh, 0c1h
+    ; inc cl                                    ; fe c1
+    cmp cl, 010h                              ; 80 f9 10
+    jne short 00238h                          ; 75 f1
+    mov AL, strict byte 011h                  ; b0 11
+    out DX, AL                                ; ee
+    mov al, byte [es:bx]                      ; 26 8a 07
+    out DX, AL                                ; ee
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 010h                  ; b0 10
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    and AL, strict byte 0f7h                  ; 24 f7
+    and bl, 001h                              ; 80 e3 01
+    sal bl, 003h                              ; c0 e3 03
+    db  00ah, 0c3h
+    ; or al, bl                                 ; 0a c3
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    cmp bl, 014h                              ; 80 fb 14
+    jnbe short 002abh                         ; 77 22
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    db  08ah, 0f8h
+    ; mov bh, al                                ; 8a f8
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    mov BL, strict byte 011h                  ; b3 11
+    call 00284h                               ; e8 d1 ff
+    db  08ah, 0c7h
+    ; mov al, bh                                ; 8a c7
+    pop bx                                    ; 5b
+    db  08ah, 0f8h
+    ; mov bh, al                                ; 8a f8
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    db  08bh, 0dah
+    ; mov bx, dx                                ; 8b da
+    mov CL, strict byte 000h                  ; b1 00
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    db  08ah, 0c1h
+    ; mov al, cl                                ; 8a c1
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    mov byte [es:bx], al                      ; 26 88 07
+    inc bx                                    ; 43
+    db  0feh, 0c1h
+    ; inc cl                                    ; fe c1
+    cmp cl, 010h                              ; 80 f9 10
+    jne short 002c2h                          ; 75 e7
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 011h                  ; b0 11
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    mov byte [es:bx], al                      ; 26 88 07
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003c8h                            ; ba c8 03
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    out DX, AL                                ; ee
+    mov dx, 003c9h                            ; ba c9 03
+    pop ax                                    ; 58
+    push ax                                   ; 50
+    db  08ah, 0c4h
+    ; mov al, ah                                ; 8a c4
+    out DX, AL                                ; ee
+    db  08ah, 0c5h
+    ; mov al, ch                                ; 8a c5
+    out DX, AL                                ; ee
+    db  08ah, 0c1h
+    ; mov al, cl                                ; 8a c1
+    out DX, AL                                ; ee
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    mov dx, 003c8h                            ; ba c8 03
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    out DX, AL                                ; ee
+    pop dx                                    ; 5a
+    push dx                                   ; 52
+    db  08bh, 0dah
+    ; mov bx, dx                                ; 8b da
+    mov dx, 003c9h                            ; ba c9 03
+    mov al, byte [es:bx]                      ; 26 8a 07
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    mov al, byte [es:bx]                      ; 26 8a 07
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    mov al, byte [es:bx]                      ; 26 8a 07
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    dec cx                                    ; 49
+    jne short 00329h                          ; 75 ee
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 010h                  ; b0 10
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    and bl, 001h                              ; 80 e3 01
+    jne short 00363h                          ; 75 0d
+    and AL, strict byte 07fh                  ; 24 7f
+    sal bh, 007h                              ; c0 e7 07
+    db  00ah, 0c7h
+    ; or al, bh                                 ; 0a c7
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    jmp short 0037ch                          ; eb 19
+    push ax                                   ; 50
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 014h                  ; b0 14
+    out DX, AL                                ; ee
+    pop ax                                    ; 58
+    and AL, strict byte 080h                  ; 24 80
+    jne short 00376h                          ; 75 03
+    sal bh, 002h                              ; c0 e7 02
+    and bh, 00fh                              ; 80 e7 0f
+    db  08ah, 0c7h
+    ; mov al, bh                                ; 8a c7
+    out DX, AL                                ; ee
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003c7h                            ; ba c7 03
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    out DX, AL                                ; ee
+    pop ax                                    ; 58
+    db  08ah, 0e0h
+    ; mov ah, al                                ; 8a e0
+    mov dx, 003c9h                            ; ba c9 03
+    in AL, DX                                 ; ec
+    xchg al, ah                               ; 86 e0
+    push ax                                   ; 50
+    in AL, DX                                 ; ec
+    db  08ah, 0e8h
+    ; mov ch, al                                ; 8a e8
+    in AL, DX                                 ; ec
+    db  08ah, 0c8h
+    ; mov cl, al                                ; 8a c8
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    mov dx, 003c7h                            ; ba c7 03
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    out DX, AL                                ; ee
+    pop dx                                    ; 5a
+    push dx                                   ; 52
+    db  08bh, 0dah
+    ; mov bx, dx                                ; 8b da
+    mov dx, 003c9h                            ; ba c9 03
+    in AL, DX                                 ; ec
+    mov byte [es:bx], al                      ; 26 88 07
+    inc bx                                    ; 43
+    in AL, DX                                 ; ec
+    mov byte [es:bx], al                      ; 26 88 07
+    inc bx                                    ; 43
+    in AL, DX                                 ; ec
+    mov byte [es:bx], al                      ; 26 88 07
+    inc bx                                    ; 43
+    dec cx                                    ; 49
+    jne short 003b3h                          ; 75 ee
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003c6h                            ; ba c6 03
+    db  08ah, 0c3h
+    ; mov al, bl                                ; 8a c3
+    out DX, AL                                ; ee
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003c6h                            ; ba c6 03
+    in AL, DX                                 ; ec
+    db  08ah, 0d8h
+    ; mov bl, al                                ; 8a d8
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 010h                  ; b0 10
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    db  08ah, 0d8h
+    ; mov bl, al                                ; 8a d8
+    shr bl, 007h                              ; c0 eb 07
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 014h                  ; b0 14
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    db  08ah, 0f8h
+    ; mov bh, al                                ; 8a f8
+    and bh, 00fh                              ; 80 e7 0f
+    test bl, 001h                             ; f6 c3 01
+    jne short 00410h                          ; 75 03
+    shr bh, 002h                              ; c0 ef 02
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003c4h                            ; ba c4 03
+    db  08ah, 0e3h
+    ; mov ah, bl                                ; 8a e3
+    mov AL, strict byte 003h                  ; b0 03
+    out DX, ax                                ; ef
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push DS                                   ; 1e
+    push ax                                   ; 50
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    db  032h, 0edh
+    ; xor ch, ch                                ; 32 ed
+    mov bx, 00088h                            ; bb 88 00
+    mov cl, byte [bx]                         ; 8a 0f
+    and cl, 00fh                              ; 80 e1 0f
+    mov bx, strict word 00063h                ; bb 63 00
+    mov ax, word [bx]                         ; 8b 07
+    mov bx, strict word 00003h                ; bb 03 00
+    cmp ax, 003b4h                            ; 3d b4 03
+    jne short 0044eh                          ; 75 02
+    mov BH, strict byte 001h                  ; b7 01
+    pop ax                                    ; 58
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    push DS                                   ; 1e
+    push bx                                   ; 53
+    push dx                                   ; 52
+    db  08ah, 0d0h
+    ; mov dl, al                                ; 8a d0
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    mov bx, 00089h                            ; bb 89 00
+    mov al, byte [bx]                         ; 8a 07
+    mov bx, 00088h                            ; bb 88 00
+    mov ah, byte [bx]                         ; 8a 27
+    cmp dl, 001h                              ; 80 fa 01
+    je short 0047fh                           ; 74 15
+    jc short 00489h                           ; 72 1d
+    cmp dl, 002h                              ; 80 fa 02
+    je short 00473h                           ; 74 02
+    jmp short 0049dh                          ; eb 2a
+    and AL, strict byte 07fh                  ; 24 7f
+    or AL, strict byte 010h                   ; 0c 10
+    and ah, 0f0h                              ; 80 e4 f0
+    or ah, 009h                               ; 80 cc 09
+    jne short 00493h                          ; 75 14
+    and AL, strict byte 06fh                  ; 24 6f
+    and ah, 0f0h                              ; 80 e4 f0
+    or ah, 009h                               ; 80 cc 09
+    jne short 00493h                          ; 75 0a
+    and AL, strict byte 0efh                  ; 24 ef
+    or AL, strict byte 080h                   ; 0c 80
+    and ah, 0f0h                              ; 80 e4 f0
+    or ah, 008h                               ; 80 cc 08
+    mov bx, 00089h                            ; bb 89 00
+    mov byte [bx], al                         ; 88 07
+    mov bx, 00088h                            ; bb 88 00
+    mov byte [bx], ah                         ; 88 27
+    mov ax, 01212h                            ; b8 12 12
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    push DS                                   ; 1e
+    push bx                                   ; 53
+    push dx                                   ; 52
+    db  08ah, 0d0h
+    ; mov dl, al                                ; 8a d0
+    and dl, 001h                              ; 80 e2 01
+    sal dl, 003h                              ; c0 e2 03
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    mov bx, 00089h                            ; bb 89 00
+    mov al, byte [bx]                         ; 8a 07
+    and AL, strict byte 0f7h                  ; 24 f7
+    db  00ah, 0c2h
+    ; or al, dl                                 ; 0a c2
+    mov byte [bx], al                         ; 88 07
+    mov ax, 01212h                            ; b8 12 12
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    push bx                                   ; 53
+    push dx                                   ; 52
+    db  08ah, 0d8h
+    ; mov bl, al                                ; 8a d8
+    and bl, 001h                              ; 80 e3 01
+    xor bl, 001h                              ; 80 f3 01
+    sal bl, 1                                 ; d0 e3
+    mov dx, 003cch                            ; ba cc 03
+    in AL, DX                                 ; ec
+    and AL, strict byte 0fdh                  ; 24 fd
+    db  00ah, 0c3h
+    ; or al, bl                                 ; 0a c3
+    mov dx, 003c2h                            ; ba c2 03
+    out DX, AL                                ; ee
+    mov ax, 01212h                            ; b8 12 12
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    retn                                      ; c3
+    push DS                                   ; 1e
+    push bx                                   ; 53
+    push dx                                   ; 52
+    db  08ah, 0d0h
+    ; mov dl, al                                ; 8a d0
+    and dl, 001h                              ; 80 e2 01
+    xor dl, 001h                              ; 80 f2 01
+    sal dl, 1                                 ; d0 e2
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    mov bx, 00089h                            ; bb 89 00
+    mov al, byte [bx]                         ; 8a 07
+    and AL, strict byte 0fdh                  ; 24 fd
+    db  00ah, 0c2h
+    ; or al, dl                                 ; 0a c2
+    mov byte [bx], al                         ; 88 07
+    mov ax, 01212h                            ; b8 12 12
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    push DS                                   ; 1e
+    push bx                                   ; 53
+    push dx                                   ; 52
+    db  08ah, 0d0h
+    ; mov dl, al                                ; 8a d0
+    and dl, 001h                              ; 80 e2 01
+    xor dl, 001h                              ; 80 f2 01
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    mov bx, 00089h                            ; bb 89 00
+    mov al, byte [bx]                         ; 8a 07
+    and AL, strict byte 0feh                  ; 24 fe
+    db  00ah, 0c2h
+    ; or al, dl                                 ; 0a c2
+    mov byte [bx], al                         ; 88 07
+    mov ax, 01212h                            ; b8 12 12
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    cmp AL, strict byte 000h                  ; 3c 00
+    je short 00533h                           ; 74 05
+    cmp AL, strict byte 001h                  ; 3c 01
+    je short 00548h                           ; 74 16
+    retn                                      ; c3
+    push DS                                   ; 1e
+    push ax                                   ; 50
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    mov bx, 0008ah                            ; bb 8a 00
+    mov al, byte [bx]                         ; 8a 07
+    db  08ah, 0d8h
+    ; mov bl, al                                ; 8a d8
+    db  032h, 0ffh
+    ; xor bh, bh                                ; 32 ff
+    pop ax                                    ; 58
+    db  08ah, 0c4h
+    ; mov al, ah                                ; 8a c4
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    push DS                                   ; 1e
+    push ax                                   ; 50
+    push bx                                   ; 53
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    db  08bh, 0c3h
+    ; mov ax, bx                                ; 8b c3
+    mov bx, 0008ah                            ; bb 8a 00
+    mov byte [bx], al                         ; 88 07
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    db  08ah, 0c4h
+    ; mov al, ah                                ; 8a c4
+    pop DS                                    ; 1f
+    retn                                      ; c3
+    add byte [bx+si], al                      ; 00 00
+    add byte [bx+si+052h], dl                 ; 00 50 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    test AL, strict byte 008h                 ; a8 08
+    je short 00565h                           ; 74 fb
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    test AL, strict byte 008h                 ; a8 08
+    jne short 00572h                          ; 75 fb
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+    retn                                      ; c3
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00003h                ; b8 03 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    cmp AL, strict byte 004h                  ; 3c 04
+    jbe short 00595h                          ; 76 0b
+    db  08ah, 0e0h
+    ; mov ah, al                                ; 8a e0
+    shr ah, 003h                              ; c0 ec 03
+    test AL, strict byte 007h                 ; a8 07
+    je short 00595h                           ; 74 02
+    db  0feh, 0c4h
+    ; inc ah                                    ; fe c4
+    pop dx                                    ; 5a
+    retn                                      ; c3
+_dispi_get_max_bpp:                          ; 0xc0597 LB 0x22
+    push dx                                   ; 52
+    push bx                                   ; 53
+    call 005c9h                               ; e8 2d 00
+    db  08bh, 0d8h
+    ; mov bx, ax                                ; 8b d8
+    or ax, strict byte 00002h                 ; 83 c8 02
+    call 005b9h                               ; e8 15 00
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00003h                ; b8 03 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    push ax                                   ; 50
+    db  08bh, 0c3h
+    ; mov ax, bx                                ; 8b c3
+    call 005b9h                               ; e8 04 00
+    pop ax                                    ; 58
+    pop bx                                    ; 5b
+    pop dx                                    ; 5a
+    retn                                      ; c3
+dispi_set_enable_:                           ; 0xc05b9 LB 0x1e
+    push dx                                   ; 52
+    push ax                                   ; 50
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00004h                ; b8 04 00
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00004h                ; b8 04 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    pop dx                                    ; 5a
+    retn                                      ; c3
+dispi_set_bank_:                             ; 0xc05d7 LB 0x1e
+    push dx                                   ; 52
+    push ax                                   ; 50
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00005h                ; b8 05 00
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00005h                ; b8 05 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    pop dx                                    ; 5a
+    retn                                      ; c3
+_dispi_set_bank_farcall:                     ; 0xc05f5 LB 0xbe
+    cmp bx, 00100h                            ; 81 fb 00 01
+    je short 00619h                           ; 74 1e
+    db  00bh, 0dbh
+    ; or bx, bx                                 ; 0b db
+    jne short 00627h                          ; 75 28
+    db  08bh, 0c2h
+    ; mov ax, dx                                ; 8b c2
+    push dx                                   ; 52
+    push ax                                   ; 50
+    mov ax, strict word 00005h                ; b8 05 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    in ax, DX                                 ; ed
+    pop dx                                    ; 5a
+    db  03bh, 0d0h
+    ; cmp dx, ax                                ; 3b d0
+    jne short 00627h                          ; 75 12
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retf                                      ; cb
+    mov ax, strict word 00005h                ; b8 05 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    retf                                      ; cb
+    mov ax, 0014fh                            ; b8 4f 01
+    retf                                      ; cb
+    push dx                                   ; 52
+    push ax                                   ; 50
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00008h                ; b8 08 00
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00008h                ; b8 08 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push dx                                   ; 52
+    push ax                                   ; 50
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00009h                ; b8 09 00
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00009h                ; b8 09 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push ax                                   ; 50
+    push bx                                   ; 53
+    push dx                                   ; 52
+    db  08bh, 0d8h
+    ; mov bx, ax                                ; 8b d8
+    call 0057ah                               ; e8 0b ff
+    cmp AL, strict byte 004h                  ; 3c 04
+    jnbe short 00675h                         ; 77 02
+    shr bx, 1                                 ; d1 eb
+    shr bx, 003h                              ; c1 eb 03
+    mov dx, 003d4h                            ; ba d4 03
+    db  08ah, 0e3h
+    ; mov ah, bl                                ; 8a e3
+    mov AL, strict byte 013h                  ; b0 13
+    out DX, ax                                ; ef
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    pop ax                                    ; 58
+    retn                                      ; c3
+    call 00667h                               ; e8 e0 ff
+    push dx                                   ; 52
+    push ax                                   ; 50
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00006h                ; b8 06 00
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00006h                ; b8 06 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    pop dx                                    ; 5a
+    retn                                      ; c3
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00007h                ; b8 07 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    pop dx                                    ; 5a
+    retn                                      ; c3
+_vga_compat_setup:                           ; 0xc06b3 LB 0xe1
+    push ax                                   ; 50
+    push dx                                   ; 52
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00001h                ; b8 01 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    push ax                                   ; 50
+    mov dx, 003d4h                            ; ba d4 03
+    mov ax, strict word 00011h                ; b8 11 00
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    push ax                                   ; 50
+    shr ax, 003h                              ; c1 e8 03
+    dec ax                                    ; 48
+    db  08ah, 0e0h
+    ; mov ah, al                                ; 8a e0
+    mov AL, strict byte 001h                  ; b0 01
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    call 00667h                               ; e8 90 ff
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00002h                ; b8 02 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    dec ax                                    ; 48
+    push ax                                   ; 50
+    mov dx, 003d4h                            ; ba d4 03
+    db  08ah, 0e0h
+    ; mov ah, al                                ; 8a e0
+    mov AL, strict byte 012h                  ; b0 12
+    out DX, ax                                ; ef
+    pop ax                                    ; 58
+    mov AL, strict byte 007h                  ; b0 07
+    out DX, AL                                ; ee
+    inc dx                                    ; 42
+    in AL, DX                                 ; ec
+    and AL, strict byte 0bdh                  ; 24 bd
+    test ah, 001h                             ; f6 c4 01
+    je short 006fbh                           ; 74 02
+    or AL, strict byte 002h                   ; 0c 02
+    test ah, 002h                             ; f6 c4 02
+    je short 00702h                           ; 74 02
+    or AL, strict byte 040h                   ; 0c 40
+    out DX, AL                                ; ee
+    mov dx, 003d4h                            ; ba d4 03
+    mov ax, strict word 00009h                ; b8 09 00
+    out DX, AL                                ; ee
+    mov dx, 003d5h                            ; ba d5 03
+    in AL, DX                                 ; ec
+    and AL, strict byte 060h                  ; 24 60
+    out DX, AL                                ; ee
+    mov dx, 003d4h                            ; ba d4 03
+    mov AL, strict byte 017h                  ; b0 17
+    out DX, AL                                ; ee
+    mov dx, 003d5h                            ; ba d5 03
+    in AL, DX                                 ; ec
+    or AL, strict byte 003h                   ; 0c 03
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 010h                  ; b0 10
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    or AL, strict byte 001h                   ; 0c 01
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003ceh                            ; ba ce 03
+    mov ax, 00506h                            ; b8 06 05
+    out DX, ax                                ; ef
+    mov dx, 003c4h                            ; ba c4 03
+    mov ax, 00f02h                            ; b8 02 0f
+    out DX, ax                                ; ef
+    mov dx, 001ceh                            ; ba ce 01
+    mov ax, strict word 00003h                ; b8 03 00
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    cmp AL, strict byte 008h                  ; 3c 08
+    jc short 00792h                           ; 72 40
+    mov dx, 003d4h                            ; ba d4 03
+    mov AL, strict byte 014h                  ; b0 14
+    out DX, AL                                ; ee
+    mov dx, 003d5h                            ; ba d5 03
+    in AL, DX                                 ; ec
+    or AL, strict byte 040h                   ; 0c 40
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    mov dx, 003c0h                            ; ba c0 03
+    mov AL, strict byte 010h                  ; b0 10
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    or AL, strict byte 040h                   ; 0c 40
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 020h                  ; b0 20
+    out DX, AL                                ; ee
+    mov dx, 003c4h                            ; ba c4 03
+    mov AL, strict byte 004h                  ; b0 04
+    out DX, AL                                ; ee
+    mov dx, 003c5h                            ; ba c5 03
+    in AL, DX                                 ; ec
+    or AL, strict byte 008h                   ; 0c 08
+    out DX, AL                                ; ee
+    mov dx, 003ceh                            ; ba ce 03
+    mov AL, strict byte 005h                  ; b0 05
+    out DX, AL                                ; ee
+    mov dx, 003cfh                            ; ba cf 03
+    in AL, DX                                 ; ec
+    and AL, strict byte 09fh                  ; 24 9f
+    or AL, strict byte 040h                   ; 0c 40
+    out DX, AL                                ; ee
+    pop dx                                    ; 5a
+    pop ax                                    ; 58
+_vbe_has_vbe_display:                        ; 0xc0794 LB 0x13
+    push DS                                   ; 1e
+    push bx                                   ; 53
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    mov bx, 000b9h                            ; bb b9 00
+    mov al, byte [bx]                         ; 8a 07
+    and AL, strict byte 001h                  ; 24 01
+    db  032h, 0e4h
+    ; xor ah, ah                                ; 32 e4
+    pop bx                                    ; 5b
+    pop DS                                    ; 1f
+    retn                                      ; c3
+vbe_biosfn_return_current_mode:              ; 0xc07a7 LB 0x25
+    push DS                                   ; 1e
+    mov ax, strict word 00040h                ; b8 40 00
+    mov ds, ax                                ; 8e d8
+    call 005c9h                               ; e8 19 fe
+    and ax, strict byte 00001h                ; 83 e0 01
+    je short 007beh                           ; 74 09
+    mov bx, 000bah                            ; bb ba 00
+    mov ax, word [bx]                         ; 8b 07
+    db  08bh, 0d8h
+    ; mov bx, ax                                ; 8b d8
+    jne short 007c7h                          ; 75 09
+    mov bx, strict word 00049h                ; bb 49 00
+    mov al, byte [bx]                         ; 8a 07
+    db  08ah, 0d8h
+    ; mov bl, al                                ; 8a d8
+    db  032h, 0ffh
+    ; xor bh, bh                                ; 32 ff
+    mov ax, strict word 0004fh                ; b8 4f 00
+    pop DS                                    ; 1f
+    retn                                      ; c3
+vbe_biosfn_display_window_control:           ; 0xc07cc LB 0x2d
+    cmp bl, 000h                              ; 80 fb 00
+    jne short 007f5h                          ; 75 24
+    cmp bh, 001h                              ; 80 ff 01
+    je short 007ech                           ; 74 16
+    jc short 007dch                           ; 72 04
+    mov ax, 00100h                            ; b8 00 01
+    retn                                      ; c3
+    db  08bh, 0c2h
+    ; mov ax, dx                                ; 8b c2
+    call 005d7h                               ; e8 f6 fd
+    call 005e7h                               ; e8 03 fe
+    db  03bh, 0c2h
+    ; cmp ax, dx                                ; 3b c2
+    jne short 007f5h                          ; 75 0d
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+    call 005e7h                               ; e8 f8 fd
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+    mov ax, 0014fh                            ; b8 4f 01
+    retn                                      ; c3
+vbe_biosfn_set_get_logical_scan_line_length: ; 0xc07f9 LB 0x4d
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    cmp bl, 001h                              ; 80 fb 01
+    je short 00824h                           ; 74 24
+    cmp bl, 002h                              ; 80 fb 02
+    je short 0080bh                           ; 74 06
+    jc short 00821h                           ; 72 1a
+    mov ax, 00100h                            ; b8 00 01
+    retn                                      ; c3
+    push ax                                   ; 50
+    call 0057ah                               ; e8 6b fd
+    db  032h, 0ffh
+    ; xor bh, bh                                ; 32 ff
+    db  08ah, 0dch
+    ; mov bl, ah                                ; 8a dc
+    db  00ah, 0dbh
+    ; or bl, bl                                 ; 0a db
+    jne short 0081ch                          ; 75 05
+    sal ax, 003h                              ; c1 e0 03
+    mov BL, strict byte 001h                  ; b3 01
+    db  033h, 0d2h
+    ; xor dx, dx                                ; 33 d2
+    pop ax                                    ; 58
+    div bx                                    ; f7 f3
+    call 00684h                               ; e8 60 fe
+    call 0057ah                               ; e8 53 fd
+    db  032h, 0ffh
+    ; xor bh, bh                                ; 32 ff
+    db  08ah, 0dch
+    ; mov bl, ah                                ; 8a dc
+    call 00697h                               ; e8 69 fe
+    db  08bh, 0c8h
+    ; mov cx, ax                                ; 8b c8
+    db  00ah, 0dbh
+    ; or bl, bl                                 ; 0a db
+    jne short 00839h                          ; 75 05
+    shr ax, 003h                              ; c1 e8 03
+    mov BL, strict byte 001h                  ; b3 01
+    mul bx                                    ; f7 e3
+    db  08bh, 0d8h
+    ; mov bx, ax                                ; 8b d8
+    call 006a5h                               ; e8 65 fe
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+vbe_biosfn_set_get_display_start:            ; 0xc0846 LB 0x34
+    cmp bl, 080h                              ; 80 fb 80
+    je short 00856h                           ; 74 0b
+    cmp bl, 001h                              ; 80 fb 01
+    je short 0086ah                           ; 74 1a
+    jc short 0085ch                           ; 72 0a
+    mov ax, 00100h                            ; b8 00 01
+    retn                                      ; c3
+    call 0056dh                               ; e8 14 fd
+    call 00560h                               ; e8 04 fd
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    call 0062bh                               ; e8 ca fd
+    db  08bh, 0c2h
+    ; mov ax, dx                                ; 8b c2
+    call 00649h                               ; e8 e3 fd
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+    call 0063bh                               ; e8 ce fd
+    db  08bh, 0c8h
+    ; mov cx, ax                                ; 8b c8
+    call 00659h                               ; e8 e7 fd
+    db  08bh, 0d0h
+    ; mov dx, ax                                ; 8b d0
+    db  032h, 0ffh
+    ; xor bh, bh                                ; 32 ff
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+vbe_biosfn_set_get_dac_palette_format:       ; 0xc087a LB 0x37
+    cmp bl, 001h                              ; 80 fb 01
+    je short 0089dh                           ; 74 1e
+    jc short 00885h                           ; 72 04
+    mov ax, 00100h                            ; b8 00 01
+    retn                                      ; c3
+    call 005c9h                               ; e8 41 fd
+    cmp bh, 006h                              ; 80 ff 06
+    je short 00897h                           ; 74 0a
+    cmp bh, 008h                              ; 80 ff 08
+    jne short 008adh                          ; 75 1b
+    or ax, strict byte 00020h                 ; 83 c8 20
+    jne short 0089ah                          ; 75 03
+    and ax, strict byte 0ffdfh                ; 83 e0 df
+    call 005b9h                               ; e8 1c fd
+    mov BH, strict byte 006h                  ; b7 06
+    call 005c9h                               ; e8 27 fd
+    and ax, strict byte 00020h                ; 83 e0 20
+    je short 008a9h                           ; 74 02
+    mov BH, strict byte 008h                  ; b7 08
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+    mov ax, 0014fh                            ; b8 4f 01
+    retn                                      ; c3
+vbe_biosfn_set_get_palette_data:             ; 0xc08b1 LB 0x64
+    test bl, bl                               ; 84 db
+    je short 008c4h                           ; 74 0f
+    cmp bl, 001h                              ; 80 fb 01
+    je short 008ech                           ; 74 32
+    cmp bl, 003h                              ; 80 fb 03
+    jbe short 00911h                          ; 76 52
+    cmp bl, 080h                              ; 80 fb 80
+    jne short 0090dh                          ; 75 49
+    pushad                                    ; 66 60
+    push DS                                   ; 1e
+    push ES                                   ; 06
+    pop DS                                    ; 1f
+    db  08ah, 0c2h
+    ; mov al, dl                                ; 8a c2
+    mov dx, 003c8h                            ; ba c8 03
+    out DX, AL                                ; ee
+    inc dx                                    ; 42
+    db  08bh, 0f7h
+    ; mov si, di                                ; 8b f7
+    lodsd                                     ; 66 ad
+    ror eax, 010h                             ; 66 c1 c8 10
+    out DX, AL                                ; ee
+    rol eax, 008h                             ; 66 c1 c0 08
+    out DX, AL                                ; ee
+    rol eax, 008h                             ; 66 c1 c0 08
+    out DX, AL                                ; ee
+    loop 008d2h                               ; e2 ed
+    pop DS                                    ; 1f
+    popad                                     ; 66 61
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+    pushad                                    ; 66 60
+    db  08ah, 0c2h
+    ; mov al, dl                                ; 8a c2
+    mov dx, 003c7h                            ; ba c7 03
+    out DX, AL                                ; ee
+    add dl, 002h                              ; 80 c2 02
+    db  066h, 033h, 0c0h
+    ; xor eax, eax                              ; 66 33 c0
+    in AL, DX                                 ; ec
+    sal eax, 008h                             ; 66 c1 e0 08
+    in AL, DX                                 ; ec
+    sal eax, 008h                             ; 66 c1 e0 08
+    in AL, DX                                 ; ec
+    stosd                                     ; 66 ab
+    loop 008f7h                               ; e2 ee
+    popad                                     ; 66 61
+    jmp short 008e8h                          ; eb db
+    mov ax, 0014fh                            ; b8 4f 01
+    retn                                      ; c3
+    mov ax, 0024fh                            ; b8 4f 02
+    retn                                      ; c3
+vbe_biosfn_return_protected_mode_interface: ; 0xc0915 LB 0x19
+    test bl, bl                               ; 84 db
+    jne short 0092ah                          ; 75 11
+    mov di, 0c000h                            ; bf 00 c0
+    mov es, di                                ; 8e c7
+    mov di, 04600h                            ; bf 00 46
+    mov cx, 00115h                            ; b9 15 01
+    db  02bh, 0cfh
+    ; sub cx, di                                ; 2b cf
+    mov ax, strict word 0004fh                ; b8 4f 00
+    retn                                      ; c3
+    mov ax, 0014fh                            ; b8 4f 01
+    retn                                      ; c3
+
+  ; Padding 0xd2 bytes at 0xc092e
+  times 210 db 0
+
+section _TEXT progbits vstart=0xa00 align=1 ; size=0x2ebf class=CODE group=AUTO
+set_int_vector_:                             ; 0xc0a00 LB 0x1a
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    movzx bx, al                              ; 0f b6 d8
+    sal bx, 002h                              ; c1 e3 02
+    xor ax, ax                                ; 31 c0
+    mov es, ax                                ; 8e c0
+    mov word [es:bx], dx                      ; 26 89 17
+    mov word [es:bx+002h], 0c000h             ; 26 c7 47 02 00 c0
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+init_vga_card_:                              ; 0xc0a1a LB 0x19
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov AL, strict byte 0c3h                  ; b0 c3
+    mov dx, 003c2h                            ; ba c2 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 004h                  ; b0 04
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 002h                  ; b0 02
+    mov dx, 003c5h                            ; ba c5 03
+    out DX, AL                                ; ee
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    retn                                      ; c3
+init_bios_area_:                             ; 0xc0a33 LB 0x32
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    xor bx, bx                                ; 31 db
+    mov ax, strict word 00040h                ; b8 40 00
+    mov es, ax                                ; 8e c0
+    mov al, byte [es:bx+010h]                 ; 26 8a 47 10
+    and AL, strict byte 0cfh                  ; 24 cf
+    or AL, strict byte 020h                   ; 0c 20
+    mov byte [es:bx+010h], al                 ; 26 88 47 10
+    mov byte [es:bx+00085h], 010h             ; 26 c6 87 85 00 10
+    mov word [es:bx+00087h], 0f960h           ; 26 c7 87 87 00 60 f9
+    mov byte [es:bx+00089h], 051h             ; 26 c6 87 89 00 51
+    mov byte [es:bx+065h], 009h               ; 26 c6 47 65 09
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+_vgabios_init_func:                          ; 0xc0a65 LB 0x1e
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    call 00a1ah                               ; e8 af ff
+    call 00a33h                               ; e8 c5 ff
+    call 0340bh                               ; e8 9a 29
+    mov dx, strict word 00022h                ; ba 22 00
+    mov ax, strict word 00010h                ; b8 10 00
+    call 00a00h                               ; e8 86 ff
+    mov ax, strict word 00003h                ; b8 03 00
+    db  032h, 0e4h
+    ; xor ah, ah                                ; 32 e4
+    int 010h                                  ; cd 10
+    pop bp                                    ; 5d
+    retf                                      ; cb
+vga_get_cursor_pos_:                         ; 0xc0a83 LB 0x40
+    push cx                                   ; 51
+    push si                                   ; 56
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov cl, al                                ; 88 c1
+    mov si, dx                                ; 89 d6
+    cmp AL, strict byte 007h                  ; 3c 07
+    jbe short 00a9eh                          ; 76 0e
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:si], strict word 00000h      ; 26 c7 04 00 00
+    mov word [es:bx], strict word 00000h      ; 26 c7 07 00 00
+    jmp short 00abfh                          ; eb 21
+    mov dx, strict word 00060h                ; ba 60 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 60 24
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:si], ax                      ; 26 89 04
+    movzx dx, cl                              ; 0f b6 d1
+    add dx, dx                                ; 01 d2
+    add dx, strict byte 00050h                ; 83 c2 50
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 4d 24
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:bx], ax                      ; 26 89 07
+    pop bp                                    ; 5d
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    retn                                      ; c3
+vga_read_char_attr_:                         ; 0xc0ac3 LB 0xa3
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00008h, 000h                        ; c8 08 00 00
+    mov cl, al                                ; 88 c1
+    mov si, dx                                ; 89 d6
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 13 24
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 e7 23
+    mov ch, al                                ; 88 c5
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je short 00b50h                           ; 74 6d
+    movzx ax, cl                              ; 0f b6 c1
+    lea bx, [bp-008h]                         ; 8d 5e f8
+    lea dx, [bp-006h]                         ; 8d 56 fa
+    call 00a83h                               ; e8 94 ff
+    mov al, byte [bp-008h]                    ; 8a 46 f8
+    mov byte [bp-002h], al                    ; 88 46 fe
+    mov ax, word [bp-008h]                    ; 8b 46 f8
+    xor al, al                                ; 30 c0
+    shr ax, 008h                              ; c1 e8 08
+    mov word [bp-004h], ax                    ; 89 46 fc
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 e2 23
+    movzx di, al                              ; 0f b6 f8
+    inc di                                    ; 47
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 f1 23
+    movzx bx, ch                              ; 0f b6 dd
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+0482fh], 000h                ; 80 bf 2f 48 00
+    jne short 00b50h                          ; 75 2d
+    mov dx, ax                                ; 89 c2
+    imul dx, di                               ; 0f af d7
+    add dx, dx                                ; 01 d2
+    or dl, 0ffh                               ; 80 ca ff
+    xor ch, ch                                ; 30 ed
+    inc dx                                    ; 42
+    imul cx, dx                               ; 0f af ca
+    movzx dx, byte [bp-004h]                  ; 0f b6 56 fc
+    imul dx, ax                               ; 0f af d0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    add ax, dx                                ; 01 d0
+    add ax, ax                                ; 01 c0
+    mov dx, cx                                ; 89 ca
+    add dx, ax                                ; 01 c2
+    mov ax, word [bx+04832h]                  ; 8b 87 32 48
+    call 02f07h                               ; e8 ba 23
+    mov word [ss:si], ax                      ; 36 89 04
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+    or word [bp+di], 00bbdh                   ; 81 0b bd 0b
+    retn 0ca0bh                               ; c2 0b ca
+    db  00bh, 0cfh
+    ; or cx, di                                 ; 0b cf
+    db  00bh, 0d4h
+    ; or dx, sp                                 ; 0b d4
+    db  00bh, 0d9h
+    ; or bx, cx                                 ; 0b d9
+    db  00bh, 0deh
+    ; or bx, si                                 ; 0b de
+    db  00bh
+vga_get_font_info_:                          ; 0xc0b66 LB 0x7f
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00002h, 000h                        ; c8 02 00 00
+    mov si, dx                                ; 89 d6
+    mov word [bp-002h], bx                    ; 89 5e fe
+    mov bx, cx                                ; 89 cb
+    cmp ax, strict word 00007h                ; 3d 07 00
+    jnbe short 00bb7h                         ; 77 3f
+    mov di, ax                                ; 89 c7
+    add di, ax                                ; 01 c7
+    jmp word [cs:di+00b56h]                   ; 2e ff a5 56 0b
+    mov dx, strict word 0007ch                ; ba 7c 00
+    xor ax, ax                                ; 31 c0
+    call 02f23h                               ; e8 9a 23
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov di, word [bp-002h]                    ; 8b 7e fe
+    mov word [es:di], ax                      ; 26 89 05
+    mov word [es:si], dx                      ; 26 89 14
+    mov dx, 00085h                            ; ba 85 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 4e 23
+    xor ah, ah                                ; 30 e4
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:bx], ax                      ; 26 89 07
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 3e 23
+    xor ah, ah                                ; 30 e4
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov bx, word [bp+008h]                    ; 8b 5e 08
+    mov word [es:bx], ax                      ; 26 89 07
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00002h                               ; c2 02 00
+    mov dx, 0010ch                            ; ba 0c 01
+    jmp short 00b84h                          ; eb c2
+    mov ax, 05daeh                            ; b8 ae 5d
+    mov dx, 0c000h                            ; ba 00 c0
+    jmp short 00b89h                          ; eb bf
+    mov ax, 055aeh                            ; b8 ae 55
+    jmp short 00bc5h                          ; eb f6
+    mov ax, 059aeh                            ; b8 ae 59
+    jmp short 00bc5h                          ; eb f1
+    mov ax, 07baeh                            ; b8 ae 7b
+    jmp short 00bc5h                          ; eb ec
+    mov ax, 06baeh                            ; b8 ae 6b
+    jmp short 00bc5h                          ; eb e7
+    mov ax, 07cdbh                            ; b8 db 7c
+    jmp short 00bc5h                          ; eb e2
+    jmp short 00bb7h                          ; eb d2
+vga_read_pixel_:                             ; 0xc0be5 LB 0x134
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00006h, 000h                        ; c8 06 00 00
+    mov si, dx                                ; 89 d6
+    mov word [bp-006h], bx                    ; 89 5e fa
+    mov di, cx                                ; 89 cf
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 f0 22
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 c4 22
+    mov cl, al                                ; 88 c1
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 00d15h                            ; 0f 84 0d 01
+    movzx bx, al                              ; 0f b6 d8
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+0482fh], 000h                ; 80 bf 2f 48 00
+    je near 00d15h                            ; 0f 84 fe 00
+    mov bl, byte [bx+04830h]                  ; 8a 9f 30 48
+    cmp bl, 003h                              ; 80 fb 03
+    jc short 00c31h                           ; 72 11
+    jbe short 00c39h                          ; 76 17
+    cmp bl, 005h                              ; 80 fb 05
+    je near 00cf2h                            ; 0f 84 c9 00
+    cmp bl, 004h                              ; 80 fb 04
+    je short 00c39h                           ; 74 0b
+    jmp near 00d10h                           ; e9 df 00
+    cmp bl, 002h                              ; 80 fb 02
+    je short 00c91h                           ; 74 5b
+    jmp near 00d10h                           ; e9 d7 00
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 c5 22
+    imul ax, word [bp-006h]                   ; 0f af 46 fa
+    mov bx, si                                ; 89 f3
+    shr bx, 003h                              ; c1 eb 03
+    add bx, ax                                ; 01 c3
+    mov cx, si                                ; 89 f1
+    and cx, strict byte 00007h                ; 83 e1 07
+    mov ax, 00080h                            ; b8 80 00
+    sar ax, CL                                ; d3 f8
+    mov byte [bp-004h], al                    ; 88 46 fc
+    mov byte [bp-002h], ch                    ; 88 6e fe
+    jmp short 00c67h                          ; eb 08
+    cmp byte [bp-002h], 004h                  ; 80 7e fe 04
+    jnc near 00d12h                           ; 0f 83 ab 00
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    sal ax, 008h                              ; c1 e0 08
+    or AL, strict byte 004h                   ; 0c 04
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    mov dx, bx                                ; 89 da
+    mov ax, 0a000h                            ; b8 00 a0
+    call 02eebh                               ; e8 6f 22
+    and al, byte [bp-004h]                    ; 22 46 fc
+    test al, al                               ; 84 c0
+    jbe short 00c8ch                          ; 76 09
+    mov cl, byte [bp-002h]                    ; 8a 4e fe
+    mov AL, strict byte 001h                  ; b0 01
+    sal al, CL                                ; d2 e0
+    or ch, al                                 ; 08 c5
+    inc byte [bp-002h]                        ; fe 46 fe
+    jmp short 00c5fh                          ; eb ce
+    mov ax, word [bp-006h]                    ; 8b 46 fa
+    shr ax, 1                                 ; d1 e8
+    imul ax, ax, strict byte 00050h           ; 6b c0 50
+    mov bx, si                                ; 89 f3
+    shr bx, 002h                              ; c1 eb 02
+    add bx, ax                                ; 01 c3
+    test byte [bp-006h], 001h                 ; f6 46 fa 01
+    je short 00ca9h                           ; 74 03
+    add bh, 020h                              ; 80 c7 20
+    mov dx, bx                                ; 89 da
+    mov ax, 0b800h                            ; b8 00 b8
+    call 02eebh                               ; e8 3a 22
+    movzx bx, cl                              ; 0f b6 d9
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+04831h], 002h                ; 80 bf 31 48 02
+    jne short 00cd9h                          ; 75 1b
+    mov cx, si                                ; 89 f1
+    xor ch, ch                                ; 30 ed
+    and cl, 003h                              ; 80 e1 03
+    mov bx, strict word 00003h                ; bb 03 00
+    sub bx, cx                                ; 29 cb
+    mov cx, bx                                ; 89 d9
+    add cx, bx                                ; 01 d9
+    xor ah, ah                                ; 30 e4
+    sar ax, CL                                ; d3 f8
+    mov ch, al                                ; 88 c5
+    and ch, 003h                              ; 80 e5 03
+    jmp short 00d12h                          ; eb 39
+    mov cx, si                                ; 89 f1
+    xor ch, ch                                ; 30 ed
+    and cl, 007h                              ; 80 e1 07
+    mov bx, strict word 00007h                ; bb 07 00
+    sub bx, cx                                ; 29 cb
+    mov cx, bx                                ; 89 d9
+    xor ah, ah                                ; 30 e4
+    sar ax, CL                                ; d3 f8
+    mov ch, al                                ; 88 c5
+    and ch, 001h                              ; 80 e5 01
+    jmp short 00d12h                          ; eb 20
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 0c 22
+    sal ax, 003h                              ; c1 e0 03
+    imul ax, word [bp-006h]                   ; 0f af 46 fa
+    mov dx, si                                ; 89 f2
+    add dx, ax                                ; 01 c2
+    mov ax, 0a000h                            ; b8 00 a0
+    call 02eebh                               ; e8 df 21
+    mov ch, al                                ; 88 c5
+    jmp short 00d12h                          ; eb 02
+    xor ch, ch                                ; 30 ed
+    mov byte [ss:di], ch                      ; 36 88 2d
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn                                      ; c3
+biosfn_perform_gray_scale_summing_:          ; 0xc0d19 LB 0x88
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov bx, ax                                ; 89 c3
+    mov di, dx                                ; 89 d7
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    xor al, al                                ; 30 c0
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    xor si, si                                ; 31 f6
+    cmp si, di                                ; 39 fe
+    jnc short 00d89h                          ; 73 52
+    mov al, bl                                ; 88 d8
+    mov dx, 003c7h                            ; ba c7 03
+    out DX, AL                                ; ee
+    mov dx, 003c9h                            ; ba c9 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov cx, ax                                ; 89 c1
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov word [bp-004h], ax                    ; 89 46 fc
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    xor ch, ch                                ; 30 ed
+    imul cx, cx, strict byte 0004dh           ; 6b c9 4d
+    mov word [bp-002h], cx                    ; 89 4e fe
+    movzx cx, byte [bp-004h]                  ; 0f b6 4e fc
+    imul cx, cx, 00097h                       ; 69 c9 97 00
+    add cx, word [bp-002h]                    ; 03 4e fe
+    xor ah, ah                                ; 30 e4
+    imul ax, ax, strict byte 0001ch           ; 6b c0 1c
+    add cx, ax                                ; 01 c1
+    add cx, 00080h                            ; 81 c1 80 00
+    sar cx, 008h                              ; c1 f9 08
+    cmp cx, strict byte 0003fh                ; 83 f9 3f
+    jbe short 00d77h                          ; 76 03
+    mov cx, strict word 0003fh                ; b9 3f 00
+    mov al, bl                                ; 88 d8
+    mov dx, 003c8h                            ; ba c8 03
+    out DX, AL                                ; ee
+    mov al, cl                                ; 88 c8
+    mov dx, 003c9h                            ; ba c9 03
+    out DX, AL                                ; ee
+    out DX, AL                                ; ee
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    inc si                                    ; 46
+    jmp short 00d33h                          ; eb aa
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov AL, strict byte 020h                  ; b0 20
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_set_cursor_shape_:                    ; 0xc0da1 LB 0xa1
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov ch, al                                ; 88 c5
+    mov cl, dl                                ; 88 d1
+    and ch, 03fh                              ; 80 e5 3f
+    and cl, 01fh                              ; 80 e1 1f
+    movzx di, ch                              ; 0f b6 fd
+    mov bx, di                                ; 89 fb
+    sal bx, 008h                              ; c1 e3 08
+    movzx si, cl                              ; 0f b6 f1
+    add bx, si                                ; 01 f3
+    mov dx, strict word 00060h                ; ba 60 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 4d 21
+    mov dx, 00089h                            ; ba 89 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 1a 21
+    mov bl, al                                ; 88 c3
+    mov dx, 00085h                            ; ba 85 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 2b 21
+    mov dx, ax                                ; 89 c2
+    test bl, 001h                             ; f6 c3 01
+    je short 00e1ah                           ; 74 37
+    cmp ax, strict word 00008h                ; 3d 08 00
+    jbe short 00e1ah                          ; 76 32
+    cmp cl, 008h                              ; 80 f9 08
+    jnc short 00e1ah                          ; 73 2d
+    cmp ch, 020h                              ; 80 fd 20
+    jnc short 00e1ah                          ; 73 28
+    inc di                                    ; 47
+    cmp si, di                                ; 39 fe
+    je short 00e00h                           ; 74 09
+    imul ax, di                               ; 0f af c7
+    shr ax, 003h                              ; c1 e8 03
+    dec ax                                    ; 48
+    jmp short 00e0bh                          ; eb 0b
+    lea si, [di+001h]                         ; 8d 75 01
+    imul ax, si                               ; 0f af c6
+    shr ax, 003h                              ; c1 e8 03
+    dec ax                                    ; 48
+    dec ax                                    ; 48
+    mov ch, al                                ; 88 c5
+    movzx ax, cl                              ; 0f b6 c1
+    inc ax                                    ; 40
+    imul ax, dx                               ; 0f af c2
+    shr ax, 003h                              ; c1 e8 03
+    dec ax                                    ; 48
+    mov cl, al                                ; 88 c1
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 e4 20
+    mov bx, ax                                ; 89 c3
+    mov AL, strict byte 00ah                  ; b0 0a
+    mov dx, bx                                ; 89 da
+    out DX, AL                                ; ee
+    lea si, [bx+001h]                         ; 8d 77 01
+    mov al, ch                                ; 88 e8
+    mov dx, si                                ; 89 f2
+    out DX, AL                                ; ee
+    mov AL, strict byte 00bh                  ; b0 0b
+    mov dx, bx                                ; 89 da
+    out DX, AL                                ; ee
+    mov al, cl                                ; 88 c8
+    mov dx, si                                ; 89 f2
+    out DX, AL                                ; ee
+    pop bp                                    ; 5d
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_set_cursor_pos_:                      ; 0xc0e42 LB 0x9e
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov byte [bp-002h], al                    ; 88 46 fe
+    mov cx, dx                                ; 89 d1
+    cmp AL, strict byte 007h                  ; 3c 07
+    jnbe near 00edbh                          ; 0f 87 87 00
+    movzx dx, al                              ; 0f b6 d0
+    add dx, dx                                ; 01 d2
+    add dx, strict byte 00050h                ; 83 c2 50
+    mov bx, cx                                ; 89 cb
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 b1 20
+    mov dx, strict word 00062h                ; ba 62 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 7e 20
+    cmp al, byte [bp-002h]                    ; 3a 46 fe
+    jne short 00edbh                          ; 75 69
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 8c 20
+    mov bx, ax                                ; 89 c3
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 65 20
+    xor ah, ah                                ; 30 e4
+    mov dx, ax                                ; 89 c2
+    inc dx                                    ; 42
+    mov al, cl                                ; 88 c8
+    xor cl, cl                                ; 30 c9
+    shr cx, 008h                              ; c1 e9 08
+    mov byte [bp-004h], cl                    ; 88 4e fc
+    imul dx, bx                               ; 0f af d3
+    or dl, 0ffh                               ; 80 ca ff
+    movzx cx, byte [bp-002h]                  ; 0f b6 4e fe
+    inc dx                                    ; 42
+    imul dx, cx                               ; 0f af d1
+    mov si, ax                                ; 89 c6
+    add si, dx                                ; 01 d6
+    movzx dx, byte [bp-004h]                  ; 0f b6 56 fc
+    imul bx, dx                               ; 0f af da
+    add si, bx                                ; 01 de
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 4e 20
+    mov bx, ax                                ; 89 c3
+    mov AL, strict byte 00eh                  ; b0 0e
+    mov dx, bx                                ; 89 da
+    out DX, AL                                ; ee
+    mov ax, si                                ; 89 f0
+    xor al, al                                ; 30 c0
+    shr ax, 008h                              ; c1 e8 08
+    lea cx, [bx+001h]                         ; 8d 4f 01
+    mov dx, cx                                ; 89 ca
+    out DX, AL                                ; ee
+    mov AL, strict byte 00fh                  ; b0 0f
+    mov dx, bx                                ; 89 da
+    out DX, AL                                ; ee
+    and si, 000ffh                            ; 81 e6 ff 00
+    mov ax, si                                ; 89 f0
+    mov dx, cx                                ; 89 ca
+    out DX, AL                                ; ee
+    leave                                     ; c9
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_set_active_page_:                     ; 0xc0ee0 LB 0xd8
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov cl, al                                ; 88 c1
+    cmp AL, strict byte 007h                  ; 3c 07
+    jnbe near 00fb1h                          ; 0f 87 c0 00
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 f1 1f
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 c5 1f
+    mov ch, al                                ; 88 c5
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 00fb1h                            ; 0f 84 aa 00
+    movzx ax, cl                              ; 0f b6 c1
+    lea bx, [bp-004h]                         ; 8d 5e fc
+    lea dx, [bp-002h]                         ; 8d 56 fe
+    call 00a83h                               ; e8 70 fb
+    movzx bx, ch                              ; 0f b6 dd
+    mov si, bx                                ; 89 de
+    sal si, 003h                              ; c1 e6 03
+    cmp byte [si+0482fh], 000h                ; 80 bc 2f 48 00
+    jne short 00f62h                          ; 75 40
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 dc 1f
+    mov bx, ax                                ; 89 c3
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 b5 1f
+    xor ah, ah                                ; 30 e4
+    inc ax                                    ; 40
+    mov si, bx                                ; 89 de
+    imul si, ax                               ; 0f af f0
+    mov ax, si                                ; 89 f0
+    add ax, si                                ; 01 f0
+    or AL, strict byte 0ffh                   ; 0c ff
+    movzx di, cl                              ; 0f b6 f9
+    mov bx, ax                                ; 89 c3
+    inc bx                                    ; 43
+    imul bx, di                               ; 0f af df
+    mov dx, strict word 0004eh                ; ba 4e 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 bf 1f
+    or si, 000ffh                             ; 81 ce ff 00
+    lea bx, [si+001h]                         ; 8d 5c 01
+    imul bx, di                               ; 0f af df
+    jmp short 00f74h                          ; eb 12
+    movzx bx, byte [bx+048aeh]                ; 0f b6 9f ae 48
+    sal bx, 006h                              ; c1 e3 06
+    movzx ax, cl                              ; 0f b6 c1
+    mov bx, word [bx+048c5h]                  ; 8b 9f c5 48
+    imul bx, ax                               ; 0f af d8
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 8a 1f
+    mov si, ax                                ; 89 c6
+    mov AL, strict byte 00ch                  ; b0 0c
+    mov dx, si                                ; 89 f2
+    out DX, AL                                ; ee
+    mov ax, bx                                ; 89 d8
+    xor al, bl                                ; 30 d8
+    shr ax, 008h                              ; c1 e8 08
+    lea di, [si+001h]                         ; 8d 7c 01
+    mov dx, di                                ; 89 fa
+    out DX, AL                                ; ee
+    mov AL, strict byte 00dh                  ; b0 0d
+    mov dx, si                                ; 89 f2
+    out DX, AL                                ; ee
+    mov al, bl                                ; 88 d8
+    mov dx, di                                ; 89 fa
+    out DX, AL                                ; ee
+    movzx si, cl                              ; 0f b6 f1
+    mov bx, si                                ; 89 f3
+    mov dx, strict word 00062h                ; ba 62 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 50 1f
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    mov ax, si                                ; 89 f0
+    call 00e42h                               ; e8 91 fe
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_set_video_mode_:                      ; 0xc0fb8 LB 0x382
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00010h, 000h                        ; c8 10 00 00
+    mov byte [bp-004h], al                    ; 88 46 fc
+    and AL, strict byte 080h                  ; 24 80
+    mov byte [bp-006h], al                    ; 88 46 fa
+    call 00794h                               ; e8 c8 f7
+    test ax, ax                               ; 85 c0
+    je short 00fdch                           ; 74 0c
+    mov AL, strict byte 007h                  ; b0 07
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    xor al, al                                ; 30 c0
+    mov dx, 003c5h                            ; ba c5 03
+    out DX, AL                                ; ee
+    and byte [bp-004h], 07fh                  ; 80 66 fc 7f
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    call 02ec4h                               ; e8 dd 1e
+    mov byte [bp-008h], al                    ; 88 46 f8
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 01333h                            ; 0f 84 43 03
+    movzx si, al                              ; 0f b6 f0
+    mov al, byte [si+048aeh]                  ; 8a 84 ae 48
+    mov byte [bp-002h], al                    ; 88 46 fe
+    movzx bx, al                              ; 0f b6 d8
+    sal bx, 006h                              ; c1 e3 06
+    movzx ax, byte [bx+048c2h]                ; 0f b6 87 c2 48
+    mov word [bp-00eh], ax                    ; 89 46 f2
+    movzx ax, byte [bx+048c3h]                ; 0f b6 87 c3 48
+    mov word [bp-00ch], ax                    ; 89 46 f4
+    movzx ax, byte [bx+048c4h]                ; 0f b6 87 c4 48
+    mov word [bp-00ah], ax                    ; 89 46 f6
+    mov dx, 00087h                            ; ba 87 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 ca 1e
+    mov dx, 00088h                            ; ba 88 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 c1 1e
+    mov dx, 00089h                            ; ba 89 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 b8 1e
+    mov ah, al                                ; 88 c4
+    test AL, strict byte 008h                 ; a8 08
+    jne near 010c5h                           ; 0f 85 8a 00
+    mov bx, si                                ; 89 f3
+    sal bx, 003h                              ; c1 e3 03
+    mov al, byte [bx+04834h]                  ; 8a 87 34 48
+    mov dx, 003c6h                            ; ba c6 03
+    out DX, AL                                ; ee
+    xor al, al                                ; 30 c0
+    mov dx, 003c8h                            ; ba c8 03
+    out DX, AL                                ; ee
+    mov bl, byte [bx+04835h]                  ; 8a 9f 35 48
+    cmp bl, 001h                              ; 80 fb 01
+    jc short 01065h                           ; 72 0e
+    jbe short 0106eh                          ; 76 15
+    cmp bl, 003h                              ; 80 fb 03
+    je short 01078h                           ; 74 1a
+    cmp bl, 002h                              ; 80 fb 02
+    je short 01073h                           ; 74 10
+    jmp short 0107bh                          ; eb 16
+    test bl, bl                               ; 84 db
+    jne short 0107bh                          ; 75 12
+    mov di, 05042h                            ; bf 42 50
+    jmp short 0107bh                          ; eb 0d
+    mov di, 05102h                            ; bf 02 51
+    jmp short 0107bh                          ; eb 08
+    mov di, 051c2h                            ; bf c2 51
+    jmp short 0107bh                          ; eb 03
+    mov di, 05282h                            ; bf 82 52
+    xor bx, bx                                ; 31 db
+    jmp short 0108eh                          ; eb 0f
+    xor al, al                                ; 30 c0
+    mov dx, 003c9h                            ; ba c9 03
+    out DX, AL                                ; ee
+    out DX, AL                                ; ee
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    cmp bx, 00100h                            ; 81 fb 00 01
+    jnc short 010b8h                          ; 73 2a
+    movzx si, byte [bp-008h]                  ; 0f b6 76 f8
+    sal si, 003h                              ; c1 e6 03
+    movzx si, byte [si+04835h]                ; 0f b6 b4 35 48
+    movzx dx, byte [si+048beh]                ; 0f b6 94 be 48
+    cmp bx, dx                                ; 39 d3
+    jnbe short 0107fh                         ; 77 dc
+    imul si, bx, strict byte 00003h           ; 6b f3 03
+    add si, di                                ; 01 fe
+    mov al, byte [si]                         ; 8a 04
+    mov dx, 003c9h                            ; ba c9 03
+    out DX, AL                                ; ee
+    mov al, byte [si+001h]                    ; 8a 44 01
+    out DX, AL                                ; ee
+    mov al, byte [si+002h]                    ; 8a 44 02
+    out DX, AL                                ; ee
+    jmp short 01087h                          ; eb cf
+    test ah, 002h                             ; f6 c4 02
+    je short 010c5h                           ; 74 08
+    mov dx, 00100h                            ; ba 00 01
+    xor ax, ax                                ; 31 c0
+    call 00d19h                               ; e8 54 fc
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    xor bx, bx                                ; 31 db
+    jmp short 010d4h                          ; eb 05
+    cmp bx, strict byte 00013h                ; 83 fb 13
+    jnbe short 010ebh                         ; 77 17
+    mov al, bl                                ; 88 d8
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    movzx si, byte [bp-002h]                  ; 0f b6 76 fe
+    sal si, 006h                              ; c1 e6 06
+    add si, bx                                ; 01 de
+    mov al, byte [si+048e5h]                  ; 8a 84 e5 48
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    jmp short 010cfh                          ; eb e4
+    mov AL, strict byte 014h                  ; b0 14
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    xor al, al                                ; 30 c0
+    out DX, AL                                ; ee
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 003h                  ; b0 03
+    mov dx, 003c5h                            ; ba c5 03
+    out DX, AL                                ; ee
+    mov bx, strict word 00001h                ; bb 01 00
+    jmp short 01108h                          ; eb 05
+    cmp bx, strict byte 00004h                ; 83 fb 04
+    jnbe short 01122h                         ; 77 1a
+    mov al, bl                                ; 88 d8
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    movzx si, byte [bp-002h]                  ; 0f b6 76 fe
+    sal si, 006h                              ; c1 e6 06
+    add si, bx                                ; 01 de
+    mov al, byte [si+048c6h]                  ; 8a 84 c6 48
+    mov dx, 003c5h                            ; ba c5 03
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    jmp short 01103h                          ; eb e1
+    xor bx, bx                                ; 31 db
+    jmp short 0112bh                          ; eb 05
+    cmp bx, strict byte 00008h                ; 83 fb 08
+    jnbe short 01145h                         ; 77 1a
+    mov al, bl                                ; 88 d8
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, AL                                ; ee
+    movzx si, byte [bp-002h]                  ; 0f b6 76 fe
+    sal si, 006h                              ; c1 e6 06
+    add si, bx                                ; 01 de
+    mov al, byte [si+048f9h]                  ; 8a 84 f9 48
+    mov dx, 003cfh                            ; ba cf 03
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    jmp short 01126h                          ; eb e1
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+04830h], 001h                ; 80 bf 30 48 01
+    jne short 01158h                          ; 75 05
+    mov dx, 003b4h                            ; ba b4 03
+    jmp short 0115bh                          ; eb 03
+    mov dx, 003d4h                            ; ba d4 03
+    mov si, dx                                ; 89 d6
+    mov ax, strict word 00011h                ; b8 11 00
+    out DX, ax                                ; ef
+    xor bx, bx                                ; 31 db
+    jmp short 0116ah                          ; eb 05
+    cmp bx, strict byte 00018h                ; 83 fb 18
+    jnbe short 01185h                         ; 77 1b
+    mov al, bl                                ; 88 d8
+    mov dx, si                                ; 89 f2
+    out DX, AL                                ; ee
+    movzx cx, byte [bp-002h]                  ; 0f b6 4e fe
+    sal cx, 006h                              ; c1 e1 06
+    mov di, cx                                ; 89 cf
+    add di, bx                                ; 01 df
+    lea dx, [si+001h]                         ; 8d 54 01
+    mov al, byte [di+048cch]                  ; 8a 85 cc 48
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    jmp short 01165h                          ; eb e0
+    mov bx, cx                                ; 89 cb
+    mov al, byte [bx+048cbh]                  ; 8a 87 cb 48
+    mov dx, 003c2h                            ; ba c2 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 020h                  ; b0 20
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    cmp byte [bp-006h], 000h                  ; 80 7e fa 00
+    jne short 01200h                          ; 75 5f
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+0482fh], 000h                ; 80 bf 2f 48 00
+    jne short 011c2h                          ; 75 13
+    mov es, [bx+04832h]                       ; 8e 87 32 48
+    mov cx, 04000h                            ; b9 00 40
+    mov ax, 00720h                            ; b8 20 07
+    xor di, di                                ; 31 ff
+    cld                                       ; fc
+    jcxz 011c0h                               ; e3 02
+    rep stosw                                 ; f3 ab
+    jmp short 01200h                          ; eb 3e
+    cmp byte [bp-004h], 00dh                  ; 80 7e fc 0d
+    jnc short 011dah                          ; 73 12
+    mov es, [bx+04832h]                       ; 8e 87 32 48
+    mov cx, 04000h                            ; b9 00 40
+    xor ax, ax                                ; 31 c0
+    xor di, di                                ; 31 ff
+    cld                                       ; fc
+    jcxz 011d8h                               ; e3 02
+    rep stosw                                 ; f3 ab
+    jmp short 01200h                          ; eb 26
+    mov AL, strict byte 002h                  ; b0 02
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    mov dx, 003c5h                            ; ba c5 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov word [bp-010h], ax                    ; 89 46 f0
+    mov AL, strict byte 00fh                  ; b0 0f
+    out DX, AL                                ; ee
+    mov es, [bx+04832h]                       ; 8e 87 32 48
+    mov cx, 08000h                            ; b9 00 80
+    xor ax, ax                                ; 31 c0
+    xor di, di                                ; 31 ff
+    cld                                       ; fc
+    jcxz 011fch                               ; e3 02
+    rep stosw                                 ; f3 ab
+    mov al, byte [bp-010h]                    ; 8a 46 f0
+    out DX, AL                                ; ee
+    movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 ec 1c
+    mov bx, word [bp-00eh]                    ; 8b 5e f2
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 fc 1c
+    movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
+    sal bx, 006h                              ; c1 e3 06
+    mov bx, word [bx+048c5h]                  ; 8b 9f c5 48
+    mov dx, strict word 0004ch                ; ba 4c 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 e8 1c
+    mov bx, si                                ; 89 f3
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 dd 1c
+    movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 b4 1c
+    mov bx, word [bp-00ah]                    ; 8b 5e f6
+    mov dx, 00085h                            ; ba 85 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 c4 1c
+    mov al, byte [bp-006h]                    ; 8a 46 fa
+    or AL, strict byte 060h                   ; 0c 60
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00087h                            ; ba 87 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 97 1c
+    mov bx, 000f9h                            ; bb f9 00
+    mov dx, 00088h                            ; ba 88 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 8b 1c
+    mov dx, 00089h                            ; ba 89 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 74 1c
+    and AL, strict byte 07fh                  ; 24 7f
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00089h                            ; ba 89 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 74 1c
+    mov bx, strict word 00008h                ; bb 08 00
+    mov dx, 0008ah                            ; ba 8a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 68 1c
+    mov cx, ds                                ; 8c d9
+    mov bx, 05592h                            ; bb 92 55
+    mov dx, 000a8h                            ; ba a8 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f35h                               ; e8 96 1c
+    xor bx, bx                                ; 31 db
+    mov dx, strict word 00065h                ; ba 65 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 4f 1c
+    xor bx, bx                                ; 31 db
+    mov dx, strict word 00066h                ; ba 66 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 44 1c
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+0482fh], 000h                ; 80 bf 2f 48 00
+    jne short 012cch                          ; 75 09
+    mov dx, strict word 00007h                ; ba 07 00
+    mov ax, strict word 00006h                ; b8 06 00
+    call 00da1h                               ; e8 d5 fa
+    xor bx, bx                                ; 31 db
+    jmp short 012d5h                          ; eb 05
+    cmp bx, strict byte 00008h                ; 83 fb 08
+    jnc short 012e0h                          ; 73 0b
+    movzx ax, bl                              ; 0f b6 c3
+    xor dx, dx                                ; 31 d2
+    call 00e42h                               ; e8 65 fb
+    inc bx                                    ; 43
+    jmp short 012d0h                          ; eb f0
+    xor ax, ax                                ; 31 c0
+    call 00ee0h                               ; e8 fb fb
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+0482fh], 000h                ; 80 bf 2f 48 00
+    jne short 01303h                          ; 75 10
+    xor bl, bl                                ; 30 db
+    mov AL, strict byte 004h                  ; b0 04
+    mov AH, strict byte 011h                  ; b4 11
+    int 010h                                  ; cd 10
+    xor bl, bl                                ; 30 db
+    mov AL, strict byte 003h                  ; b0 03
+    mov AH, strict byte 011h                  ; b4 11
+    int 010h                                  ; cd 10
+    mov dx, 059aeh                            ; ba ae 59
+    mov ax, strict word 0001fh                ; b8 1f 00
+    call 00a00h                               ; e8 f4 f6
+    mov ax, word [bp-00ah]                    ; 8b 46 f6
+    cmp ax, strict word 00010h                ; 3d 10 00
+    je short 0132eh                           ; 74 1a
+    cmp ax, strict word 0000eh                ; 3d 0e 00
+    je short 01329h                           ; 74 10
+    cmp ax, strict word 00008h                ; 3d 08 00
+    jne short 01333h                          ; 75 15
+    mov dx, 055aeh                            ; ba ae 55
+    mov ax, strict word 00043h                ; b8 43 00
+    call 00a00h                               ; e8 d9 f6
+    jmp short 01333h                          ; eb 0a
+    mov dx, 05daeh                            ; ba ae 5d
+    jmp short 01321h                          ; eb f3
+    mov dx, 06baeh                            ; ba ae 6b
+    jmp short 01321h                          ; eb ee
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+vgamem_copy_pl4_:                            ; 0xc133a LB 0x72
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov bh, cl                                ; 88 cf
+    movzx di, dl                              ; 0f b6 fa
+    movzx cx, byte [bp+00ah]                  ; 0f b6 4e 0a
+    imul di, cx                               ; 0f af f9
+    movzx si, byte [bp+008h]                  ; 0f b6 76 08
+    imul di, si                               ; 0f af fe
+    xor ah, ah                                ; 30 e4
+    add di, ax                                ; 01 c7
+    mov word [bp-004h], di                    ; 89 7e fc
+    movzx di, bl                              ; 0f b6 fb
+    imul cx, di                               ; 0f af cf
+    imul cx, si                               ; 0f af ce
+    add cx, ax                                ; 01 c1
+    mov word [bp-002h], cx                    ; 89 4e fe
+    mov ax, 00105h                            ; b8 05 01
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    xor bl, bl                                ; 30 db
+    cmp bl, byte [bp+00ah]                    ; 3a 5e 0a
+    jnc short 0139fh                          ; 73 29
+    movzx cx, bh                              ; 0f b6 cf
+    movzx si, bl                              ; 0f b6 f3
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    imul ax, si                               ; 0f af c6
+    mov si, word [bp-004h]                    ; 8b 76 fc
+    add si, ax                                ; 01 c6
+    mov di, word [bp-002h]                    ; 8b 7e fe
+    add di, ax                                ; 01 c7
+    mov dx, 0a000h                            ; ba 00 a0
+    mov es, dx                                ; 8e c2
+    cld                                       ; fc
+    jcxz 0139bh                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    db  0feh, 0c3h
+    ; inc bl                                    ; fe c3
+    jmp short 01371h                          ; eb d2
+    mov ax, strict word 00005h                ; b8 05 00
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00004h                               ; c2 04 00
+vgamem_fill_pl4_:                            ; 0xc13ac LB 0x5d
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov byte [bp-002h], bl                    ; 88 5e fe
+    mov bh, cl                                ; 88 cf
+    movzx cx, dl                              ; 0f b6 ca
+    movzx dx, byte [bp+006h]                  ; 0f b6 56 06
+    imul cx, dx                               ; 0f af ca
+    movzx dx, bh                              ; 0f b6 d7
+    imul dx, cx                               ; 0f af d1
+    xor ah, ah                                ; 30 e4
+    add dx, ax                                ; 01 c2
+    mov word [bp-004h], dx                    ; 89 56 fc
+    mov ax, 00205h                            ; b8 05 02
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    xor bl, bl                                ; 30 db
+    cmp bl, byte [bp+006h]                    ; 3a 5e 06
+    jnc short 013fdh                          ; 73 22
+    movzx cx, byte [bp-002h]                  ; 0f b6 4e fe
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    movzx dx, bl                              ; 0f b6 d3
+    movzx di, bh                              ; 0f b6 ff
+    imul di, dx                               ; 0f af fa
+    add di, word [bp-004h]                    ; 03 7e fc
+    mov dx, 0a000h                            ; ba 00 a0
+    mov es, dx                                ; 8e c2
+    cld                                       ; fc
+    jcxz 013f9h                               ; e3 02
+    rep stosb                                 ; f3 aa
+    db  0feh, 0c3h
+    ; inc bl                                    ; fe c3
+    jmp short 013d6h                          ; eb d9
+    mov ax, strict word 00005h                ; b8 05 00
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    leave                                     ; c9
+    pop di                                    ; 5f
+    retn 00004h                               ; c2 04 00
+vgamem_copy_cga_:                            ; 0xc1409 LB 0xa0
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov bh, cl                                ; 88 cf
+    movzx di, dl                              ; 0f b6 fa
+    movzx cx, byte [bp+00ah]                  ; 0f b6 4e 0a
+    imul di, cx                               ; 0f af f9
+    movzx si, byte [bp+008h]                  ; 0f b6 76 08
+    imul di, si                               ; 0f af fe
+    sar di, 1                                 ; d1 ff
+    xor ah, ah                                ; 30 e4
+    add di, ax                                ; 01 c7
+    mov word [bp-002h], di                    ; 89 7e fe
+    movzx di, bl                              ; 0f b6 fb
+    imul cx, di                               ; 0f af cf
+    imul si, cx                               ; 0f af f1
+    sar si, 1                                 ; d1 fe
+    add si, ax                                ; 01 c6
+    mov word [bp-004h], si                    ; 89 76 fc
+    xor bl, bl                                ; 30 db
+    cmp bl, byte [bp+00ah]                    ; 3a 5e 0a
+    jnc short 014a3h                          ; 73 61
+    test bl, 001h                             ; f6 c3 01
+    je short 01478h                           ; 74 31
+    movzx cx, bh                              ; 0f b6 cf
+    movzx si, bl                              ; 0f b6 f3
+    sar si, 1                                 ; d1 fe
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    imul ax, si                               ; 0f af c6
+    mov si, word [bp-002h]                    ; 8b 76 fe
+    add si, 02000h                            ; 81 c6 00 20
+    add si, ax                                ; 01 c6
+    mov di, word [bp-004h]                    ; 8b 7e fc
+    add di, 02000h                            ; 81 c7 00 20
+    add di, ax                                ; 01 c7
+    mov dx, 0b800h                            ; ba 00 b8
+    mov es, dx                                ; 8e c2
+    cld                                       ; fc
+    jcxz 01476h                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    jmp short 0149fh                          ; eb 27
+    movzx cx, bh                              ; 0f b6 cf
+    movzx ax, bl                              ; 0f b6 c3
+    sar ax, 1                                 ; d1 f8
+    movzx si, byte [bp+008h]                  ; 0f b6 76 08
+    imul ax, si                               ; 0f af c6
+    mov si, word [bp-002h]                    ; 8b 76 fe
+    add si, ax                                ; 01 c6
+    mov di, word [bp-004h]                    ; 8b 7e fc
+    add di, ax                                ; 01 c7
+    mov dx, 0b800h                            ; ba 00 b8
+    mov es, dx                                ; 8e c2
+    cld                                       ; fc
+    jcxz 0149fh                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    db  0feh, 0c3h
+    ; inc bl                                    ; fe c3
+    jmp short 0143dh                          ; eb 9a
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00004h                               ; c2 04 00
+vgamem_fill_cga_:                            ; 0xc14a9 LB 0x86
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov byte [bp-002h], bl                    ; 88 5e fe
+    mov bh, cl                                ; 88 cf
+    movzx cx, dl                              ; 0f b6 ca
+    movzx dx, byte [bp+008h]                  ; 0f b6 56 08
+    imul dx, cx                               ; 0f af d1
+    movzx cx, bh                              ; 0f b6 cf
+    imul dx, cx                               ; 0f af d1
+    sar dx, 1                                 ; d1 fa
+    movzx si, al                              ; 0f b6 f0
+    add si, dx                                ; 01 d6
+    xor bl, bl                                ; 30 db
+    cmp bl, byte [bp+008h]                    ; 3a 5e 08
+    jnc short 01529h                          ; 73 57
+    test bl, 001h                             ; f6 c3 01
+    je short 01506h                           ; 74 2f
+    movzx cx, byte [bp-002h]                  ; 0f b6 4e fe
+    movzx ax, byte [bp+00ah]                  ; 0f b6 46 0a
+    movzx dx, bl                              ; 0f b6 d3
+    sar dx, 1                                 ; d1 fa
+    mov word [bp-004h], dx                    ; 89 56 fc
+    movzx dx, bh                              ; 0f b6 d7
+    mov di, word [bp-004h]                    ; 8b 7e fc
+    imul di, dx                               ; 0f af fa
+    mov word [bp-004h], di                    ; 89 7e fc
+    lea di, [si+02000h]                       ; 8d bc 00 20
+    add di, word [bp-004h]                    ; 03 7e fc
+    mov dx, 0b800h                            ; ba 00 b8
+    mov es, dx                                ; 8e c2
+    cld                                       ; fc
+    jcxz 01504h                               ; e3 02
+    rep stosb                                 ; f3 aa
+    jmp short 01525h                          ; eb 1f
+    movzx cx, byte [bp-002h]                  ; 0f b6 4e fe
+    movzx ax, byte [bp+00ah]                  ; 0f b6 46 0a
+    movzx di, bl                              ; 0f b6 fb
+    sar di, 1                                 ; d1 ff
+    movzx dx, bh                              ; 0f b6 d7
+    imul di, dx                               ; 0f af fa
+    add di, si                                ; 01 f7
+    mov dx, 0b800h                            ; ba 00 b8
+    mov es, dx                                ; 8e c2
+    cld                                       ; fc
+    jcxz 01525h                               ; e3 02
+    rep stosb                                 ; f3 aa
+    db  0feh, 0c3h
+    ; inc bl                                    ; fe c3
+    jmp short 014cdh                          ; eb a4
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00004h                               ; c2 04 00
+biosfn_scroll_:                              ; 0xc152f LB 0x501
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00018h, 000h                        ; c8 18 00 00
+    mov byte [bp-00ch], al                    ; 88 46 f4
+    mov byte [bp-008h], dl                    ; 88 56 f8
+    mov byte [bp-004h], bl                    ; 88 5e fc
+    mov byte [bp-002h], cl                    ; 88 4e fe
+    cmp bl, byte [bp+008h]                    ; 3a 5e 08
+    jnbe near 01a2ah                          ; 0f 87 e2 04
+    cmp cl, byte [bp+00ah]                    ; 3a 4e 0a
+    jnbe near 01a2ah                          ; 0f 87 db 04
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 93 19
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 67 19
+    mov byte [bp-00ah], al                    ; 88 46 f6
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 01a2ah                            ; 0f 84 c4 04
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 7c 19
+    movzx cx, al                              ; 0f b6 c8
+    inc cx                                    ; 41
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 8b 19
+    mov word [bp-012h], ax                    ; 89 46 ee
+    cmp byte [bp+00ch], 0ffh                  ; 80 7e 0c ff
+    jne short 01591h                          ; 75 0c
+    mov dx, strict word 00062h                ; ba 62 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 5d 19
+    mov byte [bp+00ch], al                    ; 88 46 0c
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    cmp ax, cx                                ; 39 c8
+    jc short 015a0h                           ; 72 07
+    mov al, cl                                ; 88 c8
+    db  0feh, 0c8h
+    ; dec al                                    ; fe c8
+    mov byte [bp+008h], al                    ; 88 46 08
+    movzx ax, byte [bp+00ah]                  ; 0f b6 46 0a
+    cmp ax, word [bp-012h]                    ; 3b 46 ee
+    jc short 015b1h                           ; 72 08
+    mov al, byte [bp-012h]                    ; 8a 46 ee
+    db  0feh, 0c8h
+    ; dec al                                    ; fe c8
+    mov byte [bp+00ah], al                    ; 88 46 0a
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    cmp ax, cx                                ; 39 c8
+    jbe short 015bdh                          ; 76 04
+    mov byte [bp-00ch], 000h                  ; c6 46 f4 00
+    mov al, byte [bp+00ah]                    ; 8a 46 0a
+    sub al, byte [bp-002h]                    ; 2a 46 fe
+    db  0feh, 0c0h
+    ; inc al                                    ; fe c0
+    mov byte [bp-00eh], al                    ; 88 46 f2
+    movzx si, byte [bp-00ah]                  ; 0f b6 76 f6
+    mov di, si                                ; 89 f7
+    sal di, 003h                              ; c1 e7 03
+    mov ax, word [bp-012h]                    ; 8b 46 ee
+    dec ax                                    ; 48
+    mov word [bp-014h], ax                    ; 89 46 ec
+    mov ax, cx                                ; 89 c8
+    dec ax                                    ; 48
+    mov word [bp-016h], ax                    ; 89 46 ea
+    mov ax, word [bp-012h]                    ; 8b 46 ee
+    imul ax, cx                               ; 0f af c1
+    cmp byte [di+0482fh], 000h                ; 80 bd 2f 48 00
+    jne near 0178ch                           ; 0f 85 9f 01
+    mov dx, ax                                ; 89 c2
+    add dx, ax                                ; 01 c2
+    or dl, 0ffh                               ; 80 ca ff
+    movzx bx, byte [bp+00ch]                  ; 0f b6 5e 0c
+    inc dx                                    ; 42
+    imul bx, dx                               ; 0f af da
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 0163ch                          ; 75 3a
+    cmp byte [bp-004h], 000h                  ; 80 7e fc 00
+    jne short 0163ch                          ; 75 34
+    cmp byte [bp-002h], 000h                  ; 80 7e fe 00
+    jne short 0163ch                          ; 75 2e
+    movzx dx, byte [bp+008h]                  ; 0f b6 56 08
+    cmp dx, word [bp-016h]                    ; 3b 56 ea
+    jne short 0163ch                          ; 75 25
+    movzx dx, byte [bp+00ah]                  ; 0f b6 56 0a
+    cmp dx, word [bp-014h]                    ; 3b 56 ec
+    jne short 0163ch                          ; 75 1c
+    movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
+    sal dx, 008h                              ; c1 e2 08
+    add dx, strict byte 00020h                ; 83 c2 20
+    mov es, [di+04832h]                       ; 8e 85 32 48
+    mov cx, ax                                ; 89 c1
+    mov ax, dx                                ; 89 d0
+    mov di, bx                                ; 89 df
+    cld                                       ; fc
+    jcxz 01639h                               ; e3 02
+    rep stosw                                 ; f3 ab
+    jmp near 01a2ah                           ; e9 ee 03
+    cmp byte [bp+00eh], 001h                  ; 80 7e 0e 01
+    jne near 016e1h                           ; 0f 85 9d 00
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    mov word [bp-010h], ax                    ; 89 46 f0
+    movzx dx, byte [bp+008h]                  ; 0f b6 56 08
+    cmp dx, word [bp-010h]                    ; 3b 56 f0
+    jc near 01a2ah                            ; 0f 82 d4 03
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    add ax, word [bp-010h]                    ; 03 46 f0
+    cmp ax, dx                                ; 39 d0
+    jnbe short 01667h                         ; 77 06
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 0169ah                          ; 75 33
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    sal ax, 008h                              ; c1 e0 08
+    add ax, strict word 00020h                ; 05 20 00
+    mov si, word [bp-010h]                    ; 8b 76 f0
+    imul si, word [bp-012h]                   ; 0f af 76 ee
+    movzx dx, byte [bp-002h]                  ; 0f b6 56 fe
+    add dx, si                                ; 01 f2
+    add dx, dx                                ; 01 d2
+    mov di, bx                                ; 89 df
+    add di, dx                                ; 01 d7
+    movzx si, byte [bp-00ah]                  ; 0f b6 76 f6
+    sal si, 003h                              ; c1 e6 03
+    mov es, [si+04832h]                       ; 8e 84 32 48
+    cld                                       ; fc
+    jcxz 01698h                               ; e3 02
+    rep stosw                                 ; f3 ab
+    jmp short 016dbh                          ; eb 41
+    movzx dx, byte [bp-00eh]                  ; 0f b6 56 f2
+    mov word [bp-018h], dx                    ; 89 56 e8
+    mov dx, ax                                ; 89 c2
+    imul dx, word [bp-012h]                   ; 0f af 56 ee
+    movzx cx, byte [bp-002h]                  ; 0f b6 4e fe
+    add dx, cx                                ; 01 ca
+    add dx, dx                                ; 01 d2
+    movzx si, byte [bp-00ah]                  ; 0f b6 76 f6
+    sal si, 003h                              ; c1 e6 03
+    mov ax, word [si+04832h]                  ; 8b 84 32 48
+    mov si, word [bp-010h]                    ; 8b 76 f0
+    imul si, word [bp-012h]                   ; 0f af 76 ee
+    add cx, si                                ; 01 f1
+    add cx, cx                                ; 01 c9
+    mov di, bx                                ; 89 df
+    add di, cx                                ; 01 cf
+    mov cx, word [bp-018h]                    ; 8b 4e e8
+    mov si, dx                                ; 89 d6
+    mov dx, ax                                ; 89 c2
+    mov es, ax                                ; 8e c0
+    cld                                       ; fc
+    jcxz 016dbh                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsw                                 ; f3 a5
+    pop DS                                    ; 1f
+    inc word [bp-010h]                        ; ff 46 f0
+    jmp near 0164bh                           ; e9 6a ff
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    mov word [bp-010h], ax                    ; 89 46 f0
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jnbe near 01a2ah                          ; 0f 87 37 03
+    movzx dx, byte [bp-004h]                  ; 0f b6 56 fc
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    add ax, dx                                ; 01 d0
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jnbe short 01708h                         ; 77 06
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 0173bh                          ; 75 33
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    sal ax, 008h                              ; c1 e0 08
+    add ax, strict word 00020h                ; 05 20 00
+    mov si, word [bp-010h]                    ; 8b 76 f0
+    imul si, word [bp-012h]                   ; 0f af 76 ee
+    movzx dx, byte [bp-002h]                  ; 0f b6 56 fe
+    add dx, si                                ; 01 f2
+    add dx, dx                                ; 01 d2
+    mov di, bx                                ; 89 df
+    add di, dx                                ; 01 d7
+    movzx si, byte [bp-00ah]                  ; 0f b6 76 f6
+    sal si, 003h                              ; c1 e6 03
+    mov es, [si+04832h]                       ; 8e 84 32 48
+    cld                                       ; fc
+    jcxz 01739h                               ; e3 02
+    rep stosw                                 ; f3 ab
+    jmp short 0177bh                          ; eb 40
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    mov dx, word [bp-010h]                    ; 8b 56 f0
+    sub dx, ax                                ; 29 c2
+    imul dx, word [bp-012h]                   ; 0f af 56 ee
+    movzx di, byte [bp-002h]                  ; 0f b6 7e fe
+    add dx, di                                ; 01 fa
+    add dx, dx                                ; 01 d2
+    movzx si, byte [bp-00ah]                  ; 0f b6 76 f6
+    sal si, 003h                              ; c1 e6 03
+    mov ax, word [si+04832h]                  ; 8b 84 32 48
+    mov si, word [bp-010h]                    ; 8b 76 f0
+    imul si, word [bp-012h]                   ; 0f af 76 ee
+    add di, si                                ; 01 f7
+    add di, di                                ; 01 ff
+    add di, bx                                ; 01 df
+    mov si, dx                                ; 89 d6
+    mov dx, ax                                ; 89 c2
+    mov es, ax                                ; 8e c0
+    cld                                       ; fc
+    jcxz 0177bh                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsw                                 ; f3 a5
+    pop DS                                    ; 1f
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jc near 01a2ah                            ; 0f 82 a4 02
+    dec word [bp-010h]                        ; ff 4e f0
+    jmp near 016e8h                           ; e9 5c ff
+    movzx bx, byte [si+048aeh]                ; 0f b6 9c ae 48
+    sal bx, 006h                              ; c1 e3 06
+    mov dl, byte [bx+048c4h]                  ; 8a 97 c4 48
+    mov byte [bp-006h], dl                    ; 88 56 fa
+    mov bl, byte [di+04830h]                  ; 8a 9d 30 48
+    cmp bl, 004h                              ; 80 fb 04
+    je short 017b3h                           ; 74 0f
+    cmp bl, 003h                              ; 80 fb 03
+    je short 017b3h                           ; 74 0a
+    cmp bl, 002h                              ; 80 fb 02
+    je near 018f2h                            ; 0f 84 42 01
+    jmp near 01a2ah                           ; e9 77 02
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 0180bh                          ; 75 52
+    cmp byte [bp-004h], 000h                  ; 80 7e fc 00
+    jne short 0180bh                          ; 75 4c
+    cmp byte [bp-002h], 000h                  ; 80 7e fe 00
+    jne short 0180bh                          ; 75 46
+    movzx dx, byte [bp+008h]                  ; 0f b6 56 08
+    mov ax, cx                                ; 89 c8
+    dec ax                                    ; 48
+    cmp dx, ax                                ; 39 c2
+    jne short 0180bh                          ; 75 3b
+    movzx dx, byte [bp+00ah]                  ; 0f b6 56 0a
+    mov ax, word [bp-012h]                    ; 8b 46 ee
+    dec ax                                    ; 48
+    cmp dx, ax                                ; 39 c2
+    jne short 0180bh                          ; 75 2f
+    mov ax, 00205h                            ; b8 05 02
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    imul cx, word [bp-012h]                   ; 0f af 4e ee
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    imul cx, ax                               ; 0f af c8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
+    sal bx, 003h                              ; c1 e3 03
+    mov es, [bx+04832h]                       ; 8e 87 32 48
+    xor di, di                                ; 31 ff
+    cld                                       ; fc
+    jcxz 01804h                               ; e3 02
+    rep stosb                                 ; f3 aa
+    mov ax, strict word 00005h                ; b8 05 00
+    out DX, ax                                ; ef
+    jmp near 01a2ah                           ; e9 1f 02
+    cmp byte [bp+00eh], 001h                  ; 80 7e 0e 01
+    jne short 0187ah                          ; 75 69
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    mov word [bp-010h], ax                    ; 89 46 f0
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jc near 01a2ah                            ; 0f 82 07 02
+    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    add dx, word [bp-010h]                    ; 03 56 f0
+    cmp dx, ax                                ; 39 c2
+    jnbe short 01834h                         ; 77 06
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 01853h                          ; 75 1f
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    push ax                                   ; 50
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx cx, byte [bp-012h]                  ; 0f b6 4e ee
+    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 013ach                               ; e8 5b fb
+    jmp short 01875h                          ; eb 22
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    movzx bx, byte [bp-010h]                  ; 0f b6 5e f0
+    mov al, byte [bp-010h]                    ; 8a 46 f0
+    add al, byte [bp-00ch]                    ; 02 46 f4
+    movzx dx, al                              ; 0f b6 d0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 0133ah                               ; e8 c5 fa
+    inc word [bp-010h]                        ; ff 46 f0
+    jmp short 01818h                          ; eb 9e
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    mov word [bp-010h], ax                    ; 89 46 f0
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jnbe near 01a2ah                          ; 0f 87 9e 01
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    add ax, dx                                ; 01 d0
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jnbe short 018a1h                         ; 77 06
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 018c0h                          ; 75 1f
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    push ax                                   ; 50
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx cx, byte [bp-012h]                  ; 0f b6 4e ee
+    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 013ach                               ; e8 ee fa
+    jmp short 018e2h                          ; eb 22
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    mov al, byte [bp-010h]                    ; 8a 46 f0
+    sub al, byte [bp-00ch]                    ; 2a 46 f4
+    movzx bx, al                              ; 0f b6 d8
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 0133ah                               ; e8 58 fa
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jc near 01a2ah                            ; 0f 82 3d 01
+    dec word [bp-010h]                        ; ff 4e f0
+    jmp short 01881h                          ; eb 8f
+    mov dl, byte [di+04831h]                  ; 8a 95 31 48
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 01939h                          ; 75 3d
+    cmp byte [bp-004h], 000h                  ; 80 7e fc 00
+    jne short 01939h                          ; 75 37
+    cmp byte [bp-002h], 000h                  ; 80 7e fe 00
+    jne short 01939h                          ; 75 31
+    movzx bx, byte [bp+008h]                  ; 0f b6 5e 08
+    cmp bx, word [bp-016h]                    ; 3b 5e ea
+    jne short 01939h                          ; 75 28
+    movzx bx, byte [bp+00ah]                  ; 0f b6 5e 0a
+    cmp bx, word [bp-014h]                    ; 3b 5e ec
+    jne short 01939h                          ; 75 1f
+    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    imul ax, bx                               ; 0f af c3
+    movzx cx, dl                              ; 0f b6 ca
+    imul cx, ax                               ; 0f af c8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    mov es, [di+04832h]                       ; 8e 85 32 48
+    xor di, di                                ; 31 ff
+    cld                                       ; fc
+    jcxz 01936h                               ; e3 02
+    rep stosb                                 ; f3 aa
+    jmp near 01a2ah                           ; e9 f1 00
+    cmp dl, 002h                              ; 80 fa 02
+    jne short 01947h                          ; 75 09
+    sal byte [bp-002h], 1                     ; d0 66 fe
+    sal byte [bp-00eh], 1                     ; d0 66 f2
+    sal word [bp-012h], 1                     ; d1 66 ee
+    cmp byte [bp+00eh], 001h                  ; 80 7e 0e 01
+    jne short 019b6h                          ; 75 69
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    mov word [bp-010h], ax                    ; 89 46 f0
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jc near 01a2ah                            ; 0f 82 cb 00
+    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    add dx, word [bp-010h]                    ; 03 56 f0
+    cmp dx, ax                                ; 39 c2
+    jnbe short 01970h                         ; 77 06
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 0198fh                          ; 75 1f
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    push ax                                   ; 50
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx cx, byte [bp-012h]                  ; 0f b6 4e ee
+    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 014a9h                               ; e8 1c fb
+    jmp short 019b1h                          ; eb 22
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    movzx bx, byte [bp-010h]                  ; 0f b6 5e f0
+    mov al, byte [bp-010h]                    ; 8a 46 f0
+    add al, byte [bp-00ch]                    ; 02 46 f4
+    movzx dx, al                              ; 0f b6 d0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 01409h                               ; e8 58 fa
+    inc word [bp-010h]                        ; ff 46 f0
+    jmp short 01954h                          ; eb 9e
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    mov word [bp-010h], ax                    ; 89 46 f0
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jnbe short 01a2ah                         ; 77 64
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    add ax, dx                                ; 01 d0
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jnbe short 019dbh                         ; 77 06
+    cmp byte [bp-00ch], 000h                  ; 80 7e f4 00
+    jne short 019fah                          ; 75 1f
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    push ax                                   ; 50
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx cx, byte [bp-012h]                  ; 0f b6 4e ee
+    movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 014a9h                               ; e8 b1 fa
+    jmp short 01a1ch                          ; eb 22
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    mov al, byte [bp-010h]                    ; 8a 46 f0
+    sub al, byte [bp-00ch]                    ; 2a 46 f4
+    movzx bx, al                              ; 0f b6 d8
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 01409h                               ; e8 ed f9
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jc short 01a2ah                           ; 72 05
+    dec word [bp-010h]                        ; ff 4e f0
+    jmp short 019bdh                          ; eb 93
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00008h                               ; c2 08 00
+write_gfx_char_pl4_:                         ; 0xc1a30 LB 0xe6
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 0000ah, 000h                        ; c8 0a 00 00
+    mov byte [bp-002h], dl                    ; 88 56 fe
+    mov ah, bl                                ; 88 dc
+    cmp byte [bp+00ah], 010h                  ; 80 7e 0a 10
+    je short 01a4ch                           ; 74 0b
+    cmp byte [bp+00ah], 00eh                  ; 80 7e 0a 0e
+    jne short 01a51h                          ; 75 0a
+    mov di, 05daeh                            ; bf ae 5d
+    jmp short 01a54h                          ; eb 08
+    mov di, 06baeh                            ; bf ae 6b
+    jmp short 01a54h                          ; eb 03
+    mov di, 055aeh                            ; bf ae 55
+    movzx si, cl                              ; 0f b6 f1
+    movzx bx, byte [bp+00ah]                  ; 0f b6 5e 0a
+    imul si, bx                               ; 0f af f3
+    movzx cx, byte [bp+008h]                  ; 0f b6 4e 08
+    imul cx, si                               ; 0f af ce
+    movzx si, ah                              ; 0f b6 f4
+    add si, cx                                ; 01 ce
+    mov word [bp-00ah], si                    ; 89 76 f6
+    xor ah, ah                                ; 30 e4
+    imul ax, bx                               ; 0f af c3
+    mov word [bp-006h], ax                    ; 89 46 fa
+    mov ax, 00f02h                            ; b8 02 0f
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, ax                                ; ef
+    mov ax, 00205h                            ; b8 05 02
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    test byte [bp-002h], 080h                 ; f6 46 fe 80
+    je short 01a8fh                           ; 74 06
+    mov ax, 01803h                            ; b8 03 18
+    out DX, ax                                ; ef
+    jmp short 01a93h                          ; eb 04
+    mov ax, strict word 00003h                ; b8 03 00
+    out DX, ax                                ; ef
+    xor ch, ch                                ; 30 ed
+    cmp ch, byte [bp+00ah]                    ; 3a 6e 0a
+    jnc short 01b01h                          ; 73 67
+    movzx si, ch                              ; 0f b6 f5
+    movzx ax, byte [bp+008h]                  ; 0f b6 46 08
+    imul si, ax                               ; 0f af f0
+    add si, word [bp-00ah]                    ; 03 76 f6
+    mov byte [bp-004h], 000h                  ; c6 46 fc 00
+    jmp short 01ac0h                          ; eb 13
+    xor bx, bx                                ; 31 db
+    mov dx, si                                ; 89 f2
+    mov ax, 0a000h                            ; b8 00 a0
+    call 02ef9h                               ; e8 42 14
+    inc byte [bp-004h]                        ; fe 46 fc
+    cmp byte [bp-004h], 008h                  ; 80 7e fc 08
+    jnc short 01afdh                          ; 73 3d
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    mov cl, al                                ; 88 c1
+    mov ax, 00080h                            ; b8 80 00
+    sar ax, CL                                ; d3 f8
+    xor ah, ah                                ; 30 e4
+    mov word [bp-008h], ax                    ; 89 46 f8
+    sal ax, 008h                              ; c1 e0 08
+    or AL, strict byte 008h                   ; 0c 08
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    mov dx, si                                ; 89 f2
+    mov ax, 0a000h                            ; b8 00 a0
+    call 02eebh                               ; e8 0a 14
+    movzx ax, ch                              ; 0f b6 c5
+    add ax, word [bp-006h]                    ; 03 46 fa
+    mov bx, di                                ; 89 fb
+    add bx, ax                                ; 01 c3
+    movzx ax, byte [bx]                       ; 0f b6 07
+    test word [bp-008h], ax                   ; 85 46 f8
+    je short 01aadh                           ; 74 ba
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    and AL, strict byte 00fh                  ; 24 0f
+    movzx bx, al                              ; 0f b6 d8
+    jmp short 01aafh                          ; eb b2
+    db  0feh, 0c5h
+    ; inc ch                                    ; fe c5
+    jmp short 01a95h                          ; eb 94
+    mov ax, 0ff08h                            ; b8 08 ff
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    mov ax, strict word 00005h                ; b8 05 00
+    out DX, ax                                ; ef
+    mov ax, strict word 00003h                ; b8 03 00
+    out DX, ax                                ; ef
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00004h                               ; c2 04 00
+write_gfx_char_cga_:                         ; 0xc1b16 LB 0x119
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00008h, 000h                        ; c8 08 00 00
+    mov byte [bp-004h], dl                    ; 88 56 fc
+    mov si, 055aeh                            ; be ae 55
+    xor bh, bh                                ; 30 ff
+    movzx di, byte [bp+00ah]                  ; 0f b6 7e 0a
+    imul di, bx                               ; 0f af fb
+    movzx bx, cl                              ; 0f b6 d9
+    imul bx, bx, 00140h                       ; 69 db 40 01
+    add di, bx                                ; 01 df
+    mov word [bp-008h], di                    ; 89 7e f8
+    movzx di, al                              ; 0f b6 f8
+    sal di, 003h                              ; c1 e7 03
+    mov byte [bp-002h], 000h                  ; c6 46 fe 00
+    jmp near 01b94h                           ; e9 50 00
+    xor al, al                                ; 30 c0
+    xor ah, ah                                ; 30 e4
+    jmp short 01b55h                          ; eb 0b
+    or al, bl                                 ; 08 d8
+    shr ch, 1                                 ; d0 ed
+    db  0feh, 0c4h
+    ; inc ah                                    ; fe c4
+    cmp ah, 008h                              ; 80 fc 08
+    jnc short 01b7dh                          ; 73 28
+    movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
+    add bx, di                                ; 01 fb
+    add bx, si                                ; 01 f3
+    movzx bx, byte [bx]                       ; 0f b6 1f
+    movzx dx, ch                              ; 0f b6 d5
+    test bx, dx                               ; 85 d3
+    je short 01b4ch                           ; 74 e5
+    mov CL, strict byte 007h                  ; b1 07
+    sub cl, ah                                ; 28 e1
+    mov bl, byte [bp-004h]                    ; 8a 5e fc
+    and bl, 001h                              ; 80 e3 01
+    sal bl, CL                                ; d2 e3
+    test byte [bp-004h], 080h                 ; f6 46 fc 80
+    je short 01b4ah                           ; 74 d1
+    xor al, bl                                ; 30 d8
+    jmp short 01b4ch                          ; eb cf
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, word [bp-006h]                    ; 8b 56 fa
+    mov ax, 0b800h                            ; b8 00 b8
+    call 02ef9h                               ; e8 70 13
+    inc byte [bp-002h]                        ; fe 46 fe
+    cmp byte [bp-002h], 008h                  ; 80 7e fe 08
+    jnc near 01c29h                           ; 0f 83 95 00
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    sar ax, 1                                 ; d1 f8
+    imul ax, ax, strict byte 00050h           ; 6b c0 50
+    mov bx, word [bp-008h]                    ; 8b 5e f8
+    add bx, ax                                ; 01 c3
+    mov word [bp-006h], bx                    ; 89 5e fa
+    test byte [bp-002h], 001h                 ; f6 46 fe 01
+    je short 01bafh                           ; 74 04
+    add byte [bp-005h], 020h                  ; 80 46 fb 20
+    mov CH, strict byte 080h                  ; b5 80
+    cmp byte [bp+00ah], 001h                  ; 80 7e 0a 01
+    jne short 01bc8h                          ; 75 11
+    test byte [bp-004h], ch                   ; 84 6e fc
+    je short 01b44h                           ; 74 88
+    mov dx, word [bp-006h]                    ; 8b 56 fa
+    mov ax, 0b800h                            ; b8 00 b8
+    call 02eebh                               ; e8 26 13
+    jmp near 01b46h                           ; e9 7e ff
+    test ch, ch                               ; 84 ed
+    jbe short 01b89h                          ; 76 bd
+    test byte [bp-004h], 080h                 ; f6 46 fc 80
+    je short 01bddh                           ; 74 0b
+    mov dx, word [bp-006h]                    ; 8b 56 fa
+    mov ax, 0b800h                            ; b8 00 b8
+    call 02eebh                               ; e8 10 13
+    jmp short 01bdfh                          ; eb 02
+    xor al, al                                ; 30 c0
+    xor ah, ah                                ; 30 e4
+    jmp short 01beeh                          ; eb 0b
+    or al, bl                                 ; 08 d8
+    shr ch, 1                                 ; d0 ed
+    db  0feh, 0c4h
+    ; inc ah                                    ; fe c4
+    cmp ah, 004h                              ; 80 fc 04
+    jnc short 01c18h                          ; 73 2a
+    movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
+    add bx, di                                ; 01 fb
+    add bx, si                                ; 01 f3
+    movzx dx, byte [bx]                       ; 0f b6 17
+    movzx bx, ch                              ; 0f b6 dd
+    test bx, dx                               ; 85 d3
+    je short 01be5h                           ; 74 e5
+    mov CL, strict byte 003h                  ; b1 03
+    sub cl, ah                                ; 28 e1
+    mov bl, byte [bp-004h]                    ; 8a 5e fc
+    and bl, 003h                              ; 80 e3 03
+    add cl, cl                                ; 00 c9
+    sal bl, CL                                ; d2 e3
+    test byte [bp-004h], 080h                 ; f6 46 fc 80
+    je short 01be3h                           ; 74 cf
+    xor al, bl                                ; 30 d8
+    jmp short 01be5h                          ; eb cd
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, word [bp-006h]                    ; 8b 56 fa
+    mov ax, 0b800h                            ; b8 00 b8
+    call 02ef9h                               ; e8 d5 12
+    inc word [bp-006h]                        ; ff 46 fa
+    jmp short 01bc8h                          ; eb 9f
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00004h                               ; c2 04 00
+write_gfx_char_lin_:                         ; 0xc1c2f LB 0x8c
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00008h, 000h                        ; c8 08 00 00
+    mov byte [bp-002h], dl                    ; 88 56 fe
+    mov di, 055aeh                            ; bf ae 55
+    movzx dx, cl                              ; 0f b6 d1
+    movzx cx, byte [bp+008h]                  ; 0f b6 4e 08
+    imul cx, dx                               ; 0f af ca
+    sal cx, 006h                              ; c1 e1 06
+    movzx dx, bl                              ; 0f b6 d3
+    sal dx, 003h                              ; c1 e2 03
+    add dx, cx                                ; 01 ca
+    mov word [bp-008h], dx                    ; 89 56 f8
+    movzx si, al                              ; 0f b6 f0
+    sal si, 003h                              ; c1 e6 03
+    xor cl, cl                                ; 30 c9
+    jmp short 01c98h                          ; eb 3b
+    cmp ch, 008h                              ; 80 fd 08
+    jnc short 01c91h                          ; 73 2f
+    xor al, al                                ; 30 c0
+    movzx dx, cl                              ; 0f b6 d1
+    add dx, si                                ; 01 f2
+    mov bx, di                                ; 89 fb
+    add bx, dx                                ; 01 d3
+    movzx dx, byte [bx]                       ; 0f b6 17
+    movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
+    test dx, bx                               ; 85 da
+    je short 01c7bh                           ; 74 03
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    movzx bx, al                              ; 0f b6 d8
+    movzx dx, ch                              ; 0f b6 d5
+    add dx, word [bp-006h]                    ; 03 56 fa
+    mov ax, 0a000h                            ; b8 00 a0
+    call 02ef9h                               ; e8 6f 12
+    shr byte [bp-004h], 1                     ; d0 6e fc
+    db  0feh, 0c5h
+    ; inc ch                                    ; fe c5
+    jmp short 01c5dh                          ; eb cc
+    db  0feh, 0c1h
+    ; inc cl                                    ; fe c1
+    cmp cl, 008h                              ; 80 f9 08
+    jnc short 01cb5h                          ; 73 1d
+    movzx bx, cl                              ; 0f b6 d9
+    movzx dx, byte [bp+008h]                  ; 0f b6 56 08
+    imul dx, bx                               ; 0f af d3
+    sal dx, 003h                              ; c1 e2 03
+    mov bx, word [bp-008h]                    ; 8b 5e f8
+    add bx, dx                                ; 01 d3
+    mov word [bp-006h], bx                    ; 89 5e fa
+    mov byte [bp-004h], 080h                  ; c6 46 fc 80
+    xor ch, ch                                ; 30 ed
+    jmp short 01c62h                          ; eb ad
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00002h                               ; c2 02 00
+biosfn_write_char_attr_:                     ; 0xc1cbb LB 0x163
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00018h, 000h                        ; c8 18 00 00
+    mov byte [bp-00ah], al                    ; 88 46 f6
+    mov byte [bp-00ch], dl                    ; 88 56 f4
+    mov byte [bp-00eh], bl                    ; 88 5e f2
+    mov si, cx                                ; 89 ce
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 16 12
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 ea 11
+    mov cl, al                                ; 88 c1
+    mov byte [bp-002h], al                    ; 88 46 fe
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 01e1ah                            ; 0f 84 35 01
+    movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
+    lea bx, [bp-018h]                         ; 8d 5e e8
+    lea dx, [bp-016h]                         ; 8d 56 ea
+    call 00a83h                               ; e8 91 ed
+    mov al, byte [bp-018h]                    ; 8a 46 e8
+    mov byte [bp-008h], al                    ; 88 46 f8
+    mov ax, word [bp-018h]                    ; 8b 46 e8
+    xor al, al                                ; 30 c0
+    shr ax, 008h                              ; c1 e8 08
+    mov byte [bp-006h], al                    ; 88 46 fa
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 df 11
+    xor ah, ah                                ; 30 e4
+    inc ax                                    ; 40
+    mov word [bp-014h], ax                    ; 89 46 ec
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 ec 11
+    mov word [bp-012h], ax                    ; 89 46 ee
+    movzx bx, cl                              ; 0f b6 d9
+    mov di, bx                                ; 89 df
+    sal di, 003h                              ; c1 e7 03
+    cmp byte [di+0482fh], 000h                ; 80 bd 2f 48 00
+    jne short 01d74h                          ; 75 47
+    mov bx, word [bp-014h]                    ; 8b 5e ec
+    imul bx, ax                               ; 0f af d8
+    add bx, bx                                ; 01 db
+    or bl, 0ffh                               ; 80 cb ff
+    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    inc bx                                    ; 43
+    imul dx, bx                               ; 0f af d3
+    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    imul ax, bx                               ; 0f af c3
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    add ax, bx                                ; 01 d8
+    add ax, ax                                ; 01 c0
+    add dx, ax                                ; 01 c2
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
+    sal ax, 008h                              ; c1 e0 08
+    movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
+    add ax, bx                                ; 01 d8
+    mov word [bp-016h], ax                    ; 89 46 ea
+    mov ax, word [bp-016h]                    ; 8b 46 ea
+    mov es, [di+04832h]                       ; 8e 85 32 48
+    mov cx, si                                ; 89 f1
+    mov di, dx                                ; 89 d7
+    cld                                       ; fc
+    jcxz 01d71h                               ; e3 02
+    rep stosw                                 ; f3 ab
+    jmp near 01e1ah                           ; e9 a6 00
+    movzx bx, byte [bx+048aeh]                ; 0f b6 9f ae 48
+    sal bx, 006h                              ; c1 e3 06
+    mov al, byte [bx+048c4h]                  ; 8a 87 c4 48
+    mov byte [bp-004h], al                    ; 88 46 fc
+    mov al, byte [di+04831h]                  ; 8a 85 31 48
+    mov byte [bp-010h], al                    ; 88 46 f0
+    dec si                                    ; 4e
+    cmp si, strict byte 0ffffh                ; 83 fe ff
+    je near 01e1ah                            ; 0f 84 88 00
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    cmp ax, word [bp-012h]                    ; 3b 46 ee
+    jnc near 01e1ah                           ; 0f 83 7d 00
+    movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
+    sal bx, 003h                              ; c1 e3 03
+    mov al, byte [bx+04830h]                  ; 8a 87 30 48
+    cmp AL, strict byte 003h                  ; 3c 03
+    jc short 01db8h                           ; 72 0c
+    jbe short 01dbeh                          ; 76 10
+    cmp AL, strict byte 005h                  ; 3c 05
+    je short 01dfch                           ; 74 4a
+    cmp AL, strict byte 004h                  ; 3c 04
+    je short 01dbeh                           ; 74 08
+    jmp short 01e14h                          ; eb 5c
+    cmp AL, strict byte 002h                  ; 3c 02
+    je short 01dddh                           ; 74 21
+    jmp short 01e14h                          ; eb 56
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-006h]                  ; 0f b6 4e fa
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    movzx dx, byte [bp-00eh]                  ; 0f b6 56 f2
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    call 01a30h                               ; e8 55 fc
+    jmp short 01e14h                          ; eb 37
+    movzx ax, byte [bp-010h]                  ; 0f b6 46 f0
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-006h]                  ; 0f b6 4e fa
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    movzx dx, byte [bp-00eh]                  ; 0f b6 56 f2
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    call 01b16h                               ; e8 1c fd
+    jmp short 01e14h                          ; eb 18
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-006h]                  ; 0f b6 4e fa
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    movzx dx, byte [bp-00eh]                  ; 0f b6 56 f2
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    call 01c2fh                               ; e8 1b fe
+    inc byte [bp-008h]                        ; fe 46 f8
+    jmp near 01d8ah                           ; e9 70 ff
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn                                      ; c3
+biosfn_write_char_only_:                     ; 0xc1e1e LB 0x16a
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00018h, 000h                        ; c8 18 00 00
+    mov byte [bp-00eh], al                    ; 88 46 f2
+    mov byte [bp-002h], dl                    ; 88 56 fe
+    mov byte [bp-010h], bl                    ; 88 5e f0
+    mov si, cx                                ; 89 ce
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 b3 10
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 87 10
+    mov cl, al                                ; 88 c1
+    mov byte [bp-00ah], al                    ; 88 46 f6
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 01f84h                            ; 0f 84 3c 01
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    lea bx, [bp-018h]                         ; 8d 5e e8
+    lea dx, [bp-016h]                         ; 8d 56 ea
+    call 00a83h                               ; e8 2e ec
+    mov al, byte [bp-018h]                    ; 8a 46 e8
+    mov byte [bp-008h], al                    ; 88 46 f8
+    mov ax, word [bp-018h]                    ; 8b 46 e8
+    xor al, al                                ; 30 c0
+    shr ax, 008h                              ; c1 e8 08
+    mov byte [bp-00ch], al                    ; 88 46 f4
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 7c 10
+    xor ah, ah                                ; 30 e4
+    inc ax                                    ; 40
+    mov word [bp-014h], ax                    ; 89 46 ec
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 89 10
+    mov word [bp-012h], ax                    ; 89 46 ee
+    movzx di, cl                              ; 0f b6 f9
+    mov bx, di                                ; 89 fb
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+0482fh], 000h                ; 80 bf 2f 48 00
+    jne short 01edah                          ; 75 4a
+    mov dx, word [bp-014h]                    ; 8b 56 ec
+    imul dx, ax                               ; 0f af d0
+    add dx, dx                                ; 01 d2
+    or dl, 0ffh                               ; 80 ca ff
+    movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
+    inc dx                                    ; 42
+    imul bx, dx                               ; 0f af da
+    movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
+    mov cx, ax                                ; 89 c1
+    imul cx, dx                               ; 0f af ca
+    movzx dx, byte [bp-008h]                  ; 0f b6 56 f8
+    add cx, dx                                ; 01 d1
+    add cx, cx                                ; 01 c9
+    add cx, bx                                ; 01 d9
+    dec si                                    ; 4e
+    cmp si, strict byte 0ffffh                ; 83 fe ff
+    je near 01f84h                            ; 0f 84 c6 00
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
+    movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
+    sal bx, 003h                              ; c1 e3 03
+    mov di, word [bx+04832h]                  ; 8b bf 32 48
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, di                                ; 89 f8
+    call 02ef9h                               ; e8 23 10
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    jmp short 01eb6h                          ; eb dc
+    movzx di, byte [di+048aeh]                ; 0f b6 bd ae 48
+    sal di, 006h                              ; c1 e7 06
+    mov al, byte [di+048c4h]                  ; 8a 85 c4 48
+    mov byte [bp-006h], al                    ; 88 46 fa
+    mov al, byte [bx+04831h]                  ; 8a 87 31 48
+    mov byte [bp-004h], al                    ; 88 46 fc
+    dec si                                    ; 4e
+    cmp si, strict byte 0ffffh                ; 83 fe ff
+    je near 01f84h                            ; 0f 84 8c 00
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    cmp ax, word [bp-012h]                    ; 3b 46 ee
+    jnc near 01f84h                           ; 0f 83 81 00
+    movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
+    sal bx, 003h                              ; c1 e3 03
+    mov bl, byte [bx+04830h]                  ; 8a 9f 30 48
+    cmp bl, 003h                              ; 80 fb 03
+    jc short 01f21h                           ; 72 0e
+    jbe short 01f28h                          ; 76 13
+    cmp bl, 005h                              ; 80 fb 05
+    je short 01f66h                           ; 74 4c
+    cmp bl, 004h                              ; 80 fb 04
+    je short 01f28h                           ; 74 09
+    jmp short 01f7eh                          ; eb 5d
+    cmp bl, 002h                              ; 80 fb 02
+    je short 01f47h                           ; 74 21
+    jmp short 01f7eh                          ; eb 56
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-00ch]                  ; 0f b6 4e f4
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
+    call 01a30h                               ; e8 eb fa
+    jmp short 01f7eh                          ; eb 37
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    push ax                                   ; 50
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-00ch]                  ; 0f b6 4e f4
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
+    call 01b16h                               ; e8 b2 fb
+    jmp short 01f7eh                          ; eb 18
+    movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
+    push ax                                   ; 50
+    movzx cx, byte [bp-00ch]                  ; 0f b6 4e f4
+    movzx bx, byte [bp-008h]                  ; 0f b6 5e f8
+    movzx dx, byte [bp-010h]                  ; 0f b6 56 f0
+    movzx ax, byte [bp-00eh]                  ; 0f b6 46 f2
+    call 01c2fh                               ; e8 b1 fc
+    inc byte [bp-008h]                        ; fe 46 f8
+    jmp near 01ef0h                           ; e9 6c ff
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn                                      ; c3
+biosfn_write_pixel_:                         ; 0xc1f88 LB 0x168
+    push si                                   ; 56
+    enter 00008h, 000h                        ; c8 08 00 00
+    mov byte [bp-004h], dl                    ; 88 56 fc
+    mov word [bp-008h], bx                    ; 89 5e f8
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 4f 0f
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 23 0f
+    mov byte [bp-002h], al                    ; 88 46 fe
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 020edh                            ; 0f 84 43 01
+    movzx bx, al                              ; 0f b6 d8
+    sal bx, 003h                              ; c1 e3 03
+    cmp byte [bx+0482fh], 000h                ; 80 bf 2f 48 00
+    je near 020edh                            ; 0f 84 34 01
+    mov al, byte [bx+04830h]                  ; 8a 87 30 48
+    cmp AL, strict byte 003h                  ; 3c 03
+    jc short 01fd0h                           ; 72 0f
+    jbe short 01fd7h                          ; 76 14
+    cmp AL, strict byte 005h                  ; 3c 05
+    je near 020cbh                            ; 0f 84 02 01
+    cmp AL, strict byte 004h                  ; 3c 04
+    je short 01fd7h                           ; 74 0a
+    leave                                     ; c9
+    pop si                                    ; 5e
+    retn                                      ; c3
+    cmp AL, strict byte 002h                  ; 3c 02
+    je short 0203ch                           ; 74 68
+    leave                                     ; c9
+    pop si                                    ; 5e
+    retn                                      ; c3
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 27 0f
+    imul ax, cx                               ; 0f af c1
+    mov bx, word [bp-008h]                    ; 8b 5e f8
+    shr bx, 003h                              ; c1 eb 03
+    add bx, ax                                ; 01 c3
+    mov word [bp-006h], bx                    ; 89 5e fa
+    mov cx, word [bp-008h]                    ; 8b 4e f8
+    and cl, 007h                              ; 80 e1 07
+    mov ax, 00080h                            ; b8 80 00
+    sar ax, CL                                ; d3 f8
+    xor ah, ah                                ; 30 e4
+    sal ax, 008h                              ; c1 e0 08
+    or AL, strict byte 008h                   ; 0c 08
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    mov ax, 00205h                            ; b8 05 02
+    out DX, ax                                ; ef
+    mov dx, bx                                ; 89 da
+    mov ax, 0a000h                            ; b8 00 a0
+    call 02eebh                               ; e8 db 0e
+    test byte [bp-004h], 080h                 ; f6 46 fc 80
+    je short 0201dh                           ; 74 07
+    mov ax, 01803h                            ; b8 03 18
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
+    mov dx, word [bp-006h]                    ; 8b 56 fa
+    mov ax, 0a000h                            ; b8 00 a0
+    call 02ef9h                               ; e8 cf 0e
+    mov ax, 0ff08h                            ; b8 08 ff
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    mov ax, strict word 00005h                ; b8 05 00
+    out DX, ax                                ; ef
+    mov ax, strict word 00003h                ; b8 03 00
+    out DX, ax                                ; ef
+    leave                                     ; c9
+    pop si                                    ; 5e
+    retn                                      ; c3
+    mov ax, cx                                ; 89 c8
+    shr ax, 1                                 ; d1 e8
+    imul ax, ax, strict byte 00050h           ; 6b c0 50
+    cmp byte [bx+04831h], 002h                ; 80 bf 31 48 02
+    jne short 02052h                          ; 75 08
+    mov bx, word [bp-008h]                    ; 8b 5e f8
+    shr bx, 002h                              ; c1 eb 02
+    jmp short 02058h                          ; eb 06
+    mov bx, word [bp-008h]                    ; 8b 5e f8
+    shr bx, 003h                              ; c1 eb 03
+    add bx, ax                                ; 01 c3
+    mov word [bp-006h], bx                    ; 89 5e fa
+    test cl, 001h                             ; f6 c1 01
+    je short 02066h                           ; 74 04
+    add byte [bp-005h], 020h                  ; 80 46 fb 20
+    mov dx, word [bp-006h]                    ; 8b 56 fa
+    mov ax, 0b800h                            ; b8 00 b8
+    call 02eebh                               ; e8 7c 0e
+    mov bl, al                                ; 88 c3
+    movzx si, byte [bp-002h]                  ; 0f b6 76 fe
+    sal si, 003h                              ; c1 e6 03
+    cmp byte [si+04831h], 002h                ; 80 bc 31 48 02
+    jne short 02098h                          ; 75 19
+    mov al, byte [bp-008h]                    ; 8a 46 f8
+    and AL, strict byte 003h                  ; 24 03
+    mov AH, strict byte 003h                  ; b4 03
+    sub ah, al                                ; 28 c4
+    mov cl, ah                                ; 88 e1
+    add cl, ah                                ; 00 e1
+    mov bh, byte [bp-004h]                    ; 8a 7e fc
+    and bh, 003h                              ; 80 e7 03
+    sal bh, CL                                ; d2 e7
+    mov AL, strict byte 003h                  ; b0 03
+    jmp short 020abh                          ; eb 13
+    mov al, byte [bp-008h]                    ; 8a 46 f8
+    and AL, strict byte 007h                  ; 24 07
+    mov CL, strict byte 007h                  ; b1 07
+    sub cl, al                                ; 28 c1
+    mov bh, byte [bp-004h]                    ; 8a 7e fc
+    and bh, 001h                              ; 80 e7 01
+    sal bh, CL                                ; d2 e7
+    mov AL, strict byte 001h                  ; b0 01
+    sal al, CL                                ; d2 e0
+    test byte [bp-004h], 080h                 ; f6 46 fc 80
+    je short 020b7h                           ; 74 04
+    xor bl, bh                                ; 30 fb
+    jmp short 020bdh                          ; eb 06
+    not al                                    ; f6 d0
+    and bl, al                                ; 20 c3
+    or bl, bh                                 ; 08 fb
+    xor bh, bh                                ; 30 ff
+    mov dx, word [bp-006h]                    ; 8b 56 fa
+    mov ax, 0b800h                            ; b8 00 b8
+    call 02ef9h                               ; e8 31 0e
+    leave                                     ; c9
+    pop si                                    ; 5e
+    retn                                      ; c3
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 33 0e
+    sal ax, 003h                              ; c1 e0 03
+    imul cx, ax                               ; 0f af c8
+    mov ax, word [bp-008h]                    ; 8b 46 f8
+    add ax, cx                                ; 01 c8
+    mov word [bp-006h], ax                    ; 89 46 fa
+    movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
+    mov dx, ax                                ; 89 c2
+    mov ax, 0a000h                            ; b8 00 a0
+    jmp short 020c5h                          ; eb d8
+    leave                                     ; c9
+    pop si                                    ; 5e
+    retn                                      ; c3
+biosfn_write_teletype_:                      ; 0xc20f0 LB 0x27f
+    push si                                   ; 56
+    enter 00016h, 000h                        ; c8 16 00 00
+    mov byte [bp-00ah], al                    ; 88 46 f6
+    mov byte [bp-002h], dl                    ; 88 56 fe
+    mov byte [bp-004h], bl                    ; 88 5e fc
+    mov byte [bp-00eh], cl                    ; 88 4e f2
+    cmp dl, 0ffh                              ; 80 fa ff
+    jne short 02112h                          ; 75 0c
+    mov dx, strict word 00062h                ; ba 62 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 dc 0d
+    mov byte [bp-002h], al                    ; 88 46 fe
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 d0 0d
+    xor ah, ah                                ; 30 e4
+    call 02ec4h                               ; e8 a4 0d
+    mov byte [bp-00ch], al                    ; 88 46 f4
+    cmp AL, strict byte 0ffh                  ; 3c ff
+    je near 0236ch                            ; 0f 84 43 02
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    lea bx, [bp-016h]                         ; 8d 5e ea
+    lea dx, [bp-014h]                         ; 8d 56 ec
+    call 00a83h                               ; e8 4d e9
+    mov al, byte [bp-016h]                    ; 8a 46 ea
+    mov byte [bp-006h], al                    ; 88 46 fa
+    mov ax, word [bp-016h]                    ; 8b 46 ea
+    xor al, al                                ; 30 c0
+    shr ax, 008h                              ; c1 e8 08
+    mov byte [bp-008h], al                    ; 88 46 f8
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 9b 0d
+    xor ah, ah                                ; 30 e4
+    inc ax                                    ; 40
+    mov word [bp-012h], ax                    ; 89 46 ee
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 a8 0d
+    mov word [bp-010h], ax                    ; 89 46 f0
+    mov al, byte [bp-00ah]                    ; 8a 46 f6
+    cmp AL, strict byte 009h                  ; 3c 09
+    jc short 02175h                           ; 72 0c
+    jbe short 0219ch                          ; 76 31
+    cmp AL, strict byte 00dh                  ; 3c 0d
+    je short 0218fh                           ; 74 20
+    cmp AL, strict byte 00ah                  ; 3c 0a
+    je short 02196h                           ; 74 23
+    jmp short 021ddh                          ; eb 68
+    cmp AL, strict byte 008h                  ; 3c 08
+    je short 02181h                           ; 74 08
+    cmp AL, strict byte 007h                  ; 3c 07
+    je near 022b9h                            ; 0f 84 3a 01
+    jmp short 021ddh                          ; eb 5c
+    cmp byte [bp-006h], 000h                  ; 80 7e fa 00
+    jbe near 022b9h                           ; 0f 86 30 01
+    dec byte [bp-006h]                        ; fe 4e fa
+    jmp near 022b9h                           ; e9 2a 01
+    mov byte [bp-006h], 000h                  ; c6 46 fa 00
+    jmp near 022b9h                           ; e9 23 01
+    inc byte [bp-008h]                        ; fe 46 f8
+    jmp near 022b9h                           ; e9 1d 01
+    movzx cx, byte [bp-00eh]                  ; 0f b6 4e f2
+    movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
+    movzx si, byte [bp-002h]                  ; 0f b6 76 fe
+    mov dx, si                                ; 89 f2
+    mov ax, strict word 00020h                ; b8 20 00
+    call 020f0h                               ; e8 40 ff
+    lea bx, [bp-016h]                         ; 8d 5e ea
+    lea dx, [bp-014h]                         ; 8d 56 ec
+    mov ax, si                                ; 89 f0
+    call 00a83h                               ; e8 c8 e8
+    mov al, byte [bp-016h]                    ; 8a 46 ea
+    mov byte [bp-006h], al                    ; 88 46 fa
+    mov ax, word [bp-016h]                    ; 8b 46 ea
+    xor al, al                                ; 30 c0
+    shr ax, 008h                              ; c1 e8 08
+    mov byte [bp-008h], al                    ; 88 46 f8
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    mov bx, strict word 00008h                ; bb 08 00
+    cwd                                       ; 99
+    idiv bx                                   ; f7 fb
+    test dx, dx                               ; 85 d2
+    je short 0219ch                           ; 74 c2
+    jmp near 022b9h                           ; e9 dc 00
+    movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
+    mov si, bx                                ; 89 de
+    sal si, 003h                              ; c1 e6 03
+    cmp byte [si+0482fh], 000h                ; 80 bc 2f 48 00
+    jne short 02238h                          ; 75 4b
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    imul ax, word [bp-012h]                   ; 0f af 46 ee
+    add ax, ax                                ; 01 c0
+    or AL, strict byte 0ffh                   ; 0c ff
+    movzx dx, byte [bp-002h]                  ; 0f b6 56 fe
+    inc ax                                    ; 40
+    imul dx, ax                               ; 0f af d0
+    movzx cx, byte [bp-008h]                  ; 0f b6 4e f8
+    imul cx, word [bp-010h]                   ; 0f af 4e f0
+    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    add cx, bx                                ; 01 d9
+    add cx, cx                                ; 01 c9
+    add cx, dx                                ; 01 d1
+    movzx bx, byte [bp-00ah]                  ; 0f b6 5e f6
+    mov ax, word [si+04832h]                  ; 8b 84 32 48
+    mov dx, cx                                ; 89 ca
+    call 02ef9h                               ; e8 da 0c
+    cmp byte [bp-00eh], 003h                  ; 80 7e f2 03
+    jne near 022b6h                           ; 0f 85 8f 00
+    movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
+    mov dx, cx                                ; 89 ca
+    inc dx                                    ; 42
+    mov ax, word [si+04832h]                  ; 8b 84 32 48
+    call 02ef9h                               ; e8 c4 0c
+    jmp near 022b6h                           ; e9 7e 00
+    movzx bx, byte [bx+048aeh]                ; 0f b6 9f ae 48
+    sal bx, 006h                              ; c1 e3 06
+    mov ah, byte [bx+048c4h]                  ; 8a a7 c4 48
+    mov dl, byte [si+04831h]                  ; 8a 94 31 48
+    mov al, byte [si+04830h]                  ; 8a 84 30 48
+    cmp AL, strict byte 003h                  ; 3c 03
+    jc short 0225ch                           ; 72 0c
+    jbe short 02262h                          ; 76 10
+    cmp AL, strict byte 005h                  ; 3c 05
+    je short 0229eh                           ; 74 48
+    cmp AL, strict byte 004h                  ; 3c 04
+    je short 02262h                           ; 74 08
+    jmp short 022b6h                          ; eb 5a
+    cmp AL, strict byte 002h                  ; 3c 02
+    je short 02280h                           ; 74 20
+    jmp short 022b6h                          ; eb 54
+    movzx ax, ah                              ; 0f b6 c4
+    push ax                                   ; 50
+    movzx ax, byte [bp-010h]                  ; 0f b6 46 f0
+    push ax                                   ; 50
+    movzx cx, byte [bp-008h]                  ; 0f b6 4e f8
+    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    movzx dx, byte [bp-004h]                  ; 0f b6 56 fc
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    call 01a30h                               ; e8 b2 f7
+    jmp short 022b6h                          ; eb 36
+    movzx ax, dl                              ; 0f b6 c2
+    push ax                                   ; 50
+    movzx ax, byte [bp-010h]                  ; 0f b6 46 f0
+    push ax                                   ; 50
+    movzx cx, byte [bp-008h]                  ; 0f b6 4e f8
+    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    movzx dx, byte [bp-004h]                  ; 0f b6 56 fc
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    call 01b16h                               ; e8 7a f8
+    jmp short 022b6h                          ; eb 18
+    movzx ax, byte [bp-010h]                  ; 0f b6 46 f0
+    push ax                                   ; 50
+    movzx cx, byte [bp-008h]                  ; 0f b6 4e f8
+    movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
+    movzx dx, byte [bp-004h]                  ; 0f b6 56 fc
+    movzx ax, byte [bp-00ah]                  ; 0f b6 46 f6
+    call 01c2fh                               ; e8 79 f9
+    inc byte [bp-006h]                        ; fe 46 fa
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    cmp ax, word [bp-010h]                    ; 3b 46 f0
+    jne short 022c9h                          ; 75 07
+    mov byte [bp-006h], 000h                  ; c6 46 fa 00
+    inc byte [bp-008h]                        ; fe 46 f8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    cmp ax, word [bp-012h]                    ; 3b 46 ee
+    jne near 02350h                           ; 0f 85 7c 00
+    movzx si, byte [bp-00ch]                  ; 0f b6 76 f4
+    sal si, 003h                              ; c1 e6 03
+    mov bl, byte [bp-012h]                    ; 8a 5e ee
+    db  0feh, 0cbh
+    ; dec bl                                    ; fe cb
+    mov bh, byte [bp-010h]                    ; 8a 7e f0
+    db  0feh, 0cfh
+    ; dec bh                                    ; fe cf
+    cmp byte [si+0482fh], 000h                ; 80 bc 2f 48 00
+    jne short 02332h                          ; 75 46
+    mov ax, word [bp-010h]                    ; 8b 46 f0
+    imul ax, word [bp-012h]                   ; 0f af 46 ee
+    add ax, ax                                ; 01 c0
+    or AL, strict byte 0ffh                   ; 0c ff
+    movzx dx, byte [bp-002h]                  ; 0f b6 56 fe
+    inc ax                                    ; 40
+    imul dx, ax                               ; 0f af d0
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    dec ax                                    ; 48
+    imul ax, word [bp-010h]                   ; 0f af 46 f0
+    movzx cx, byte [bp-006h]                  ; 0f b6 4e fa
+    add cx, ax                                ; 01 c1
+    add cx, cx                                ; 01 c9
+    add dx, cx                                ; 01 ca
+    inc dx                                    ; 42
+    mov ax, word [si+04832h]                  ; 8b 84 32 48
+    call 02eebh                               ; e8 d1 0b
+    push strict byte 00001h                   ; 6a 01
+    movzx dx, byte [bp-002h]                  ; 0f b6 56 fe
+    push dx                                   ; 52
+    movzx dx, bh                              ; 0f b6 d7
+    push dx                                   ; 52
+    movzx dx, bl                              ; 0f b6 d3
+    push dx                                   ; 52
+    movzx dx, al                              ; 0f b6 d0
+    xor cx, cx                                ; 31 c9
+    xor bx, bx                                ; 31 db
+    jmp short 02347h                          ; eb 15
+    push strict byte 00001h                   ; 6a 01
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    push ax                                   ; 50
+    movzx ax, bh                              ; 0f b6 c7
+    push ax                                   ; 50
+    movzx ax, bl                              ; 0f b6 c3
+    push ax                                   ; 50
+    xor cx, cx                                ; 31 c9
+    xor bx, bx                                ; 31 db
+    xor dx, dx                                ; 31 d2
+    mov ax, strict word 00001h                ; b8 01 00
+    call 0152fh                               ; e8 e2 f1
+    dec byte [bp-008h]                        ; fe 4e f8
+    movzx ax, byte [bp-008h]                  ; 0f b6 46 f8
+    mov word [bp-016h], ax                    ; 89 46 ea
+    sal word [bp-016h], 008h                  ; c1 66 ea 08
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    add word [bp-016h], ax                    ; 01 46 ea
+    mov dx, word [bp-016h]                    ; 8b 56 ea
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    call 00e42h                               ; e8 d6 ea
+    leave                                     ; c9
+    pop si                                    ; 5e
+    retn                                      ; c3
+get_font_access_:                            ; 0xc236f LB 0x29
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov ax, 00100h                            ; b8 00 01
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, ax                                ; ef
+    mov ax, 00402h                            ; b8 02 04
+    out DX, ax                                ; ef
+    mov ax, 00704h                            ; b8 04 07
+    out DX, ax                                ; ef
+    mov ax, 00300h                            ; b8 00 03
+    out DX, ax                                ; ef
+    mov ax, 00204h                            ; b8 04 02
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    mov ax, strict word 00005h                ; b8 05 00
+    out DX, ax                                ; ef
+    mov ax, 00406h                            ; b8 06 04
+    out DX, ax                                ; ef
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    retn                                      ; c3
+release_font_access_:                        ; 0xc2398 LB 0x39
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov ax, 00100h                            ; b8 00 01
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, ax                                ; ef
+    mov ax, 00302h                            ; b8 02 03
+    out DX, ax                                ; ef
+    mov ax, 00304h                            ; b8 04 03
+    out DX, ax                                ; ef
+    mov ax, 00300h                            ; b8 00 03
+    out DX, ax                                ; ef
+    mov dx, 003cch                            ; ba cc 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    and ax, strict word 00001h                ; 25 01 00
+    sal ax, 002h                              ; c1 e0 02
+    or AL, strict byte 00ah                   ; 0c 0a
+    sal ax, 008h                              ; c1 e0 08
+    or AL, strict byte 006h                   ; 0c 06
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, ax                                ; ef
+    mov ax, strict word 00004h                ; b8 04 00
+    out DX, ax                                ; ef
+    mov ax, 01005h                            ; b8 05 10
+    out DX, ax                                ; ef
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    retn                                      ; c3
+set_scan_lines_:                             ; 0xc23d1 LB 0xbc
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push dx                                   ; 52
+    push si                                   ; 56
+    push di                                   ; 57
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bl, al                                ; 88 c3
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 23 0b
+    mov dx, ax                                ; 89 c2
+    mov si, ax                                ; 89 c6
+    mov AL, strict byte 009h                  ; b0 09
+    out DX, AL                                ; ee
+    inc dx                                    ; 42
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov ah, al                                ; 88 c4
+    and ah, 0e0h                              ; 80 e4 e0
+    mov al, bl                                ; 88 d8
+    db  0feh, 0c8h
+    ; dec al                                    ; fe c8
+    or al, ah                                 ; 08 e0
+    out DX, AL                                ; ee
+    cmp bl, 008h                              ; 80 fb 08
+    jne short 02408h                          ; 75 08
+    mov dx, strict word 00007h                ; ba 07 00
+    mov ax, strict word 00006h                ; b8 06 00
+    jmp short 02415h                          ; eb 0d
+    mov al, bl                                ; 88 d8
+    sub AL, strict byte 003h                  ; 2c 03
+    movzx dx, al                              ; 0f b6 d0
+    mov al, bl                                ; 88 d8
+    sub AL, strict byte 004h                  ; 2c 04
+    xor ah, ah                                ; 30 e4
+    call 00da1h                               ; e8 89 e9
+    movzx di, bl                              ; 0f b6 fb
+    mov bx, di                                ; 89 fb
+    mov dx, 00085h                            ; ba 85 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 ef 0a
+    mov AL, strict byte 012h                  ; b0 12
+    mov dx, si                                ; 89 f2
+    out DX, AL                                ; ee
+    lea cx, [si+001h]                         ; 8d 4c 01
+    mov dx, cx                                ; 89 ca
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov bx, ax                                ; 89 c3
+    mov AL, strict byte 007h                  ; b0 07
+    mov dx, si                                ; 89 f2
+    out DX, AL                                ; ee
+    mov dx, cx                                ; 89 ca
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov ah, al                                ; 88 c4
+    and ah, 002h                              ; 80 e4 02
+    movzx dx, ah                              ; 0f b6 d4
+    sal dx, 007h                              ; c1 e2 07
+    and AL, strict byte 040h                  ; 24 40
+    xor ah, ah                                ; 30 e4
+    sal ax, 003h                              ; c1 e0 03
+    add ax, dx                                ; 01 d0
+    inc ax                                    ; 40
+    add ax, bx                                ; 01 d8
+    xor dx, dx                                ; 31 d2
+    div di                                    ; f7 f7
+    mov cx, ax                                ; 89 c1
+    db  0feh, 0c8h
+    ; dec al                                    ; fe c8
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 8f 0a
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 94 0a
+    movzx dx, cl                              ; 0f b6 d1
+    mov bx, ax                                ; 89 c3
+    imul bx, dx                               ; 0f af da
+    add bx, bx                                ; 01 db
+    mov dx, strict word 0004ch                ; ba 4c 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 8f 0a
+    pop bp                                    ; 5d
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_load_text_user_pat_:                  ; 0xc248d LB 0x78
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 0000ah, 000h                        ; c8 0a 00 00
+    mov byte [bp-002h], al                    ; 88 46 fe
+    mov word [bp-008h], dx                    ; 89 56 f8
+    mov word [bp-004h], bx                    ; 89 5e fc
+    mov word [bp-006h], cx                    ; 89 4e fa
+    call 0236fh                               ; e8 cd fe
+    mov al, byte [bp+00ah]                    ; 8a 46 0a
+    and AL, strict byte 003h                  ; 24 03
+    xor ah, ah                                ; 30 e4
+    mov bx, ax                                ; 89 c3
+    sal bx, 00eh                              ; c1 e3 0e
+    mov al, byte [bp+00ah]                    ; 8a 46 0a
+    and AL, strict byte 004h                  ; 24 04
+    xor ah, ah                                ; 30 e4
+    sal ax, 00bh                              ; c1 e0 0b
+    add bx, ax                                ; 01 c3
+    mov word [bp-00ah], bx                    ; 89 5e f6
+    xor bx, bx                                ; 31 db
+    cmp bx, word [bp-006h]                    ; 3b 5e fa
+    jnc short 024efh                          ; 73 2b
+    movzx cx, byte [bp+00ch]                  ; 0f b6 4e 0c
+    mov si, bx                                ; 89 de
+    imul si, cx                               ; 0f af f1
+    add si, word [bp-004h]                    ; 03 76 fc
+    mov di, word [bp+008h]                    ; 8b 7e 08
+    add di, bx                                ; 01 df
+    sal di, 005h                              ; c1 e7 05
+    add di, word [bp-00ah]                    ; 03 7e f6
+    mov dx, word [bp-008h]                    ; 8b 56 f8
+    mov ax, 0a000h                            ; b8 00 a0
+    mov es, ax                                ; 8e c0
+    cld                                       ; fc
+    jcxz 024ech                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    inc bx                                    ; 43
+    jmp short 024bfh                          ; eb d0
+    call 02398h                               ; e8 a6 fe
+    cmp byte [bp-002h], 010h                  ; 80 7e fe 10
+    jc short 024ffh                           ; 72 07
+    movzx ax, byte [bp+00ch]                  ; 0f b6 46 0c
+    call 023d1h                               ; e8 d2 fe
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00006h                               ; c2 06 00
+biosfn_load_text_8_14_pat_:                  ; 0xc2505 LB 0x6c
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov byte [bp-002h], al                    ; 88 46 fe
+    call 0236fh                               ; e8 5c fe
+    mov al, dl                                ; 88 d0
+    and AL, strict byte 003h                  ; 24 03
+    xor ah, ah                                ; 30 e4
+    mov bx, ax                                ; 89 c3
+    sal bx, 00eh                              ; c1 e3 0e
+    mov al, dl                                ; 88 d0
+    and AL, strict byte 004h                  ; 24 04
+    xor ah, ah                                ; 30 e4
+    sal ax, 00bh                              ; c1 e0 0b
+    add bx, ax                                ; 01 c3
+    mov word [bp-004h], bx                    ; 89 5e fc
+    xor bx, bx                                ; 31 db
+    jmp short 02536h                          ; eb 06
+    cmp bx, 00100h                            ; 81 fb 00 01
+    jnc short 0255ch                          ; 73 26
+    imul si, bx, strict byte 0000eh           ; 6b f3 0e
+    mov di, bx                                ; 89 df
+    sal di, 005h                              ; c1 e7 05
+    add di, word [bp-004h]                    ; 03 7e fc
+    add si, 05daeh                            ; 81 c6 ae 5d
+    mov cx, strict word 0000eh                ; b9 0e 00
+    mov dx, 0c000h                            ; ba 00 c0
+    mov ax, 0a000h                            ; b8 00 a0
+    mov es, ax                                ; 8e c0
+    cld                                       ; fc
+    jcxz 02559h                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    inc bx                                    ; 43
+    jmp short 02530h                          ; eb d4
+    call 02398h                               ; e8 39 fe
+    cmp byte [bp-002h], 010h                  ; 80 7e fe 10
+    jc short 0256bh                           ; 72 06
+    mov ax, strict word 0000eh                ; b8 0e 00
+    call 023d1h                               ; e8 66 fe
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_load_text_8_8_pat_:                   ; 0xc2571 LB 0x6e
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov byte [bp-002h], al                    ; 88 46 fe
+    call 0236fh                               ; e8 f0 fd
+    mov al, dl                                ; 88 d0
+    and AL, strict byte 003h                  ; 24 03
+    xor ah, ah                                ; 30 e4
+    mov bx, ax                                ; 89 c3
+    sal bx, 00eh                              ; c1 e3 0e
+    mov al, dl                                ; 88 d0
+    and AL, strict byte 004h                  ; 24 04
+    xor ah, ah                                ; 30 e4
+    sal ax, 00bh                              ; c1 e0 0b
+    add bx, ax                                ; 01 c3
+    mov word [bp-004h], bx                    ; 89 5e fc
+    xor bx, bx                                ; 31 db
+    jmp short 025a2h                          ; eb 06
+    cmp bx, 00100h                            ; 81 fb 00 01
+    jnc short 025cah                          ; 73 28
+    mov si, bx                                ; 89 de
+    sal si, 003h                              ; c1 e6 03
+    mov di, bx                                ; 89 df
+    sal di, 005h                              ; c1 e7 05
+    add di, word [bp-004h]                    ; 03 7e fc
+    add si, 055aeh                            ; 81 c6 ae 55
+    mov cx, strict word 00008h                ; b9 08 00
+    mov dx, 0c000h                            ; ba 00 c0
+    mov ax, 0a000h                            ; b8 00 a0
+    mov es, ax                                ; 8e c0
+    cld                                       ; fc
+    jcxz 025c7h                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    inc bx                                    ; 43
+    jmp short 0259ch                          ; eb d2
+    call 02398h                               ; e8 cb fd
+    cmp byte [bp-002h], 010h                  ; 80 7e fe 10
+    jc short 025d9h                           ; 72 06
+    mov ax, strict word 00008h                ; b8 08 00
+    call 023d1h                               ; e8 f8 fd
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_load_text_8_16_pat_:                  ; 0xc25df LB 0x6e
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    mov byte [bp-002h], al                    ; 88 46 fe
+    call 0236fh                               ; e8 82 fd
+    mov al, dl                                ; 88 d0
+    and AL, strict byte 003h                  ; 24 03
+    xor ah, ah                                ; 30 e4
+    mov bx, ax                                ; 89 c3
+    sal bx, 00eh                              ; c1 e3 0e
+    mov al, dl                                ; 88 d0
+    and AL, strict byte 004h                  ; 24 04
+    xor ah, ah                                ; 30 e4
+    sal ax, 00bh                              ; c1 e0 0b
+    add bx, ax                                ; 01 c3
+    mov word [bp-004h], bx                    ; 89 5e fc
+    xor bx, bx                                ; 31 db
+    jmp short 02610h                          ; eb 06
+    cmp bx, 00100h                            ; 81 fb 00 01
+    jnc short 02638h                          ; 73 28
+    mov si, bx                                ; 89 de
+    sal si, 004h                              ; c1 e6 04
+    mov di, bx                                ; 89 df
+    sal di, 005h                              ; c1 e7 05
+    add di, word [bp-004h]                    ; 03 7e fc
+    add si, 06baeh                            ; 81 c6 ae 6b
+    mov cx, strict word 00010h                ; b9 10 00
+    mov dx, 0c000h                            ; ba 00 c0
+    mov ax, 0a000h                            ; b8 00 a0
+    mov es, ax                                ; 8e c0
+    cld                                       ; fc
+    jcxz 02635h                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    inc bx                                    ; 43
+    jmp short 0260ah                          ; eb d2
+    call 02398h                               ; e8 5d fd
+    cmp byte [bp-002h], 010h                  ; 80 7e fe 10
+    jc short 02647h                           ; 72 06
+    mov ax, strict word 00010h                ; b8 10 00
+    call 023d1h                               ; e8 8a fd
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_load_gfx_8_8_chars_:                  ; 0xc264d LB 0x5
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn                                      ; c3
+biosfn_load_gfx_user_chars_:                 ; 0xc2652 LB 0x7
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn 00002h                               ; c2 02 00
+biosfn_load_gfx_8_14_chars_:                 ; 0xc2659 LB 0x5
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn                                      ; c3
+biosfn_load_gfx_8_8_dd_chars_:               ; 0xc265e LB 0x5
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn                                      ; c3
+biosfn_load_gfx_8_16_chars_:                 ; 0xc2663 LB 0x5
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn                                      ; c3
+biosfn_alternate_prtsc_:                     ; 0xc2668 LB 0x5
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn                                      ; c3
+biosfn_switch_video_interface_:              ; 0xc266d LB 0x5
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn                                      ; c3
+biosfn_enable_video_refresh_control_:        ; 0xc2672 LB 0x5
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    pop bp                                    ; 5d
+    retn                                      ; c3
+biosfn_write_string_:                        ; 0xc2677 LB 0x97
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 0000ah, 000h                        ; c8 0a 00 00
+    mov byte [bp-006h], al                    ; 88 46 fa
+    mov byte [bp-004h], dl                    ; 88 56 fc
+    mov byte [bp-002h], bl                    ; 88 5e fe
+    mov si, cx                                ; 89 ce
+    mov di, word [bp+00eh]                    ; 8b 7e 0e
+    movzx ax, dl                              ; 0f b6 c2
+    lea bx, [bp-00ah]                         ; 8d 5e f6
+    lea dx, [bp-008h]                         ; 8d 56 f8
+    call 00a83h                               ; e8 ec e3
+    cmp byte [bp+008h], 0ffh                  ; 80 7e 08 ff
+    jne short 026aeh                          ; 75 11
+    mov al, byte [bp-00ah]                    ; 8a 46 f6
+    mov byte [bp+00ah], al                    ; 88 46 0a
+    mov ax, word [bp-00ah]                    ; 8b 46 f6
+    xor al, al                                ; 30 c0
+    shr ax, 008h                              ; c1 e8 08
+    mov byte [bp+008h], al                    ; 88 46 08
+    movzx dx, byte [bp+008h]                  ; 0f b6 56 08
+    sal dx, 008h                              ; c1 e2 08
+    movzx ax, byte [bp+00ah]                  ; 0f b6 46 0a
+    add dx, ax                                ; 01 c2
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    call 00e42h                               ; e8 80 e7
+    dec si                                    ; 4e
+    cmp si, strict byte 0ffffh                ; 83 fe ff
+    je short 026f8h                           ; 74 30
+    mov dx, di                                ; 89 fa
+    inc di                                    ; 47
+    mov ax, word [bp+00ch]                    ; 8b 46 0c
+    call 02eebh                               ; e8 1a 08
+    mov cl, al                                ; 88 c1
+    test byte [bp-006h], 002h                 ; f6 46 fa 02
+    je short 026e5h                           ; 74 0c
+    mov dx, di                                ; 89 fa
+    inc di                                    ; 47
+    mov ax, word [bp+00ch]                    ; 8b 46 0c
+    call 02eebh                               ; e8 09 08
+    mov byte [bp-002h], al                    ; 88 46 fe
+    movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
+    movzx dx, byte [bp-004h]                  ; 0f b6 56 fc
+    movzx ax, cl                              ; 0f b6 c1
+    mov cx, strict word 00003h                ; b9 03 00
+    call 020f0h                               ; e8 fa f9
+    jmp short 026c2h                          ; eb ca
+    test byte [bp-006h], 001h                 ; f6 46 fa 01
+    jne short 02708h                          ; 75 0a
+    mov dx, word [bp-00ah]                    ; 8b 56 f6
+    movzx ax, byte [bp-004h]                  ; 0f b6 46 fc
+    call 00e42h                               ; e8 3a e7
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00008h                               ; c2 08 00
+biosfn_read_state_info_:                     ; 0xc270e LB 0xfe
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    push dx                                   ; 52
+    push bx                                   ; 53
+    mov cx, ds                                ; 8c d9
+    mov bx, 05582h                            ; bb 82 55
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02f35h                               ; e8 11 08
+    mov di, word [bp-004h]                    ; 8b 7e fc
+    add di, strict byte 00004h                ; 83 c7 04
+    mov cx, strict word 0001eh                ; b9 1e 00
+    mov si, strict word 00049h                ; be 49 00
+    mov dx, strict word 00040h                ; ba 40 00
+    mov es, [bp-002h]                         ; 8e 46 fe
+    cld                                       ; fc
+    jcxz 0273fh                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    mov di, word [bp-004h]                    ; 8b 7e fc
+    add di, strict byte 00022h                ; 83 c7 22
+    mov cx, strict word 00003h                ; b9 03 00
+    mov si, 00084h                            ; be 84 00
+    mov dx, strict word 00040h                ; ba 40 00
+    mov es, [bp-002h]                         ; 8e 46 fe
+    cld                                       ; fc
+    jcxz 0275ah                               ; e3 06
+    push DS                                   ; 1e
+    mov ds, dx                                ; 8e da
+    rep movsb                                 ; f3 a4
+    pop DS                                    ; 1f
+    mov dx, 0008ah                            ; ba 8a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 88 07
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 00025h                ; 83 c2 25
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 87 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 00026h                ; 83 c2 26
+    xor bx, bx                                ; 31 db
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 79 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 00027h                ; 83 c2 27
+    mov bx, strict word 00010h                ; bb 10 00
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 6a 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 00028h                ; 83 c2 28
+    xor bx, bx                                ; 31 db
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 5c 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 00029h                ; 83 c2 29
+    mov bx, strict word 00008h                ; bb 08 00
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 4d 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 0002ah                ; 83 c2 2a
+    mov bx, strict word 00002h                ; bb 02 00
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 3e 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 0002bh                ; 83 c2 2b
+    xor bx, bx                                ; 31 db
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 30 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 0002ch                ; 83 c2 2c
+    xor bx, bx                                ; 31 db
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 22 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 00031h                ; 83 c2 31
+    mov bx, strict word 00003h                ; bb 03 00
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 13 07
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, strict byte 00032h                ; 83 c2 32
+    xor bx, bx                                ; 31 db
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ef9h                               ; e8 05 07
+    mov di, word [bp-004h]                    ; 8b 7e fc
+    add di, strict byte 00033h                ; 83 c7 33
+    mov cx, strict word 0000dh                ; b9 0d 00
+    xor ax, ax                                ; 31 c0
+    mov es, [bp-002h]                         ; 8e 46 fe
+    cld                                       ; fc
+    jcxz 02807h                               ; e3 02
+    rep stosb                                 ; f3 aa
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    retn                                      ; c3
+biosfn_read_video_state_size2_:              ; 0xc280c LB 0x23
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov dx, ax                                ; 89 c2
+    xor ax, ax                                ; 31 c0
+    test dl, 001h                             ; f6 c2 01
+    je short 0281ch                           ; 74 03
+    mov ax, strict word 00046h                ; b8 46 00
+    test dl, 002h                             ; f6 c2 02
+    je short 02824h                           ; 74 03
+    add ax, strict word 0002ah                ; 05 2a 00
+    test dl, 004h                             ; f6 c2 04
+    je short 0282ch                           ; 74 03
+    add ax, 00304h                            ; 05 04 03
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    retn                                      ; c3
+vga_get_video_state_size_:                   ; 0xc282f LB 0xf
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, dx                                ; 89 d3
+    call 0280ch                               ; e8 d4 ff
+    mov word [ss:bx], ax                      ; 36 89 07
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+biosfn_save_video_state_:                    ; 0xc283e LB 0x365
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    push ax                                   ; 50
+    mov si, dx                                ; 89 d6
+    mov cx, bx                                ; 89 d9
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 b4 06
+    mov di, ax                                ; 89 c7
+    test byte [bp-006h], 001h                 ; f6 46 fa 01
+    je near 029c0h                            ; 0f 84 63 01
+    mov dx, 003c4h                            ; ba c4 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 8c 06
+    inc cx                                    ; 41
+    mov dx, di                                ; 89 fa
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 7c 06
+    inc cx                                    ; 41
+    mov dx, 003ceh                            ; ba ce 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 6b 06
+    inc cx                                    ; 41
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov dx, 003c0h                            ; ba c0 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov word [bp-002h], ax                    ; 89 46 fe
+    movzx bx, byte [bp-002h]                  ; 0f b6 5e fe
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 50 06
+    inc cx                                    ; 41
+    mov dx, 003cah                            ; ba ca 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 3f 06
+    mov ax, strict word 00001h                ; b8 01 00
+    mov word [bp-004h], ax                    ; 89 46 fc
+    add cx, ax                                ; 01 c1
+    jmp short 028cah                          ; eb 06
+    cmp word [bp-004h], strict byte 00004h    ; 83 7e fc 04
+    jnbe short 028e7h                         ; 77 1d
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    mov dx, 003c5h                            ; ba c5 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 18 06
+    inc cx                                    ; 41
+    inc word [bp-004h]                        ; ff 46 fc
+    jmp short 028c4h                          ; eb dd
+    xor al, al                                ; 30 c0
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    mov dx, 003c5h                            ; ba c5 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 fc 05
+    mov word [bp-004h], strict word 00000h    ; c7 46 fc 00 00
+    inc cx                                    ; 41
+    jmp short 0290bh                          ; eb 06
+    cmp word [bp-004h], strict byte 00018h    ; 83 7e fc 18
+    jnbe short 02927h                         ; 77 1c
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    mov dx, di                                ; 89 fa
+    out DX, AL                                ; ee
+    lea dx, [di+001h]                         ; 8d 55 01
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 d8 05
+    inc cx                                    ; 41
+    inc word [bp-004h]                        ; ff 46 fc
+    jmp short 02905h                          ; eb de
+    mov word [bp-004h], strict word 00000h    ; c7 46 fc 00 00
+    jmp short 02934h                          ; eb 06
+    cmp word [bp-004h], strict byte 00013h    ; 83 7e fc 13
+    jnbe short 0295dh                         ; 77 29
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    and ax, strict word 00020h                ; 25 20 00
+    or ax, word [bp-004h]                     ; 0b 46 fc
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov dx, 003c1h                            ; ba c1 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 a2 05
+    inc cx                                    ; 41
+    inc word [bp-004h]                        ; ff 46 fc
+    jmp short 0292eh                          ; eb d1
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov word [bp-004h], strict word 00000h    ; c7 46 fc 00 00
+    jmp short 02970h                          ; eb 06
+    cmp word [bp-004h], strict byte 00008h    ; 83 7e fc 08
+    jnbe short 0298dh                         ; 77 1d
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, AL                                ; ee
+    mov dx, 003cfh                            ; ba cf 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 72 05
+    inc cx                                    ; 41
+    inc word [bp-004h]                        ; ff 46 fc
+    jmp short 0296ah                          ; eb dd
+    mov bx, di                                ; 89 fb
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 7f 05
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    xor bx, bx                                ; 31 db
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 58 05
+    inc cx                                    ; 41
+    xor bx, bx                                ; 31 db
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 4e 05
+    inc cx                                    ; 41
+    xor bx, bx                                ; 31 db
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 44 05
+    inc cx                                    ; 41
+    xor bx, bx                                ; 31 db
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 3a 05
+    inc cx                                    ; 41
+    test byte [bp-006h], 002h                 ; f6 46 fa 02
+    je near 02b2fh                            ; 0f 84 67 01
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 1a 05
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 1e 05
+    inc cx                                    ; 41
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 22 05
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 27 05
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, strict word 0004ch                ; ba 4c 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 0e 05
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 13 05
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 fa 04
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 ff 04
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 ca 04
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 ce 04
+    inc cx                                    ; 41
+    mov dx, 00085h                            ; ba 85 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 d2 04
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 d7 04
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, 00087h                            ; ba 87 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 a2 04
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 a6 04
+    inc cx                                    ; 41
+    mov dx, 00088h                            ; ba 88 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 8e 04
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 92 04
+    inc cx                                    ; 41
+    mov dx, 00089h                            ; ba 89 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 7a 04
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 7e 04
+    inc cx                                    ; 41
+    mov dx, strict word 00060h                ; ba 60 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 82 04
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 87 04
+    mov word [bp-004h], strict word 00000h    ; c7 46 fc 00 00
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    jmp short 02a9dh                          ; eb 06
+    cmp word [bp-004h], strict byte 00008h    ; 83 7e fc 08
+    jnc short 02abbh                          ; 73 1e
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, dx                                ; 01 d2
+    add dx, strict byte 00050h                ; 83 c2 50
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 5c 04
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 61 04
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    inc word [bp-004h]                        ; ff 46 fc
+    jmp short 02a97h                          ; eb dc
+    mov dx, strict word 0004eh                ; ba 4e 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f07h                               ; e8 43 04
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 48 04
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, strict word 00062h                ; ba 62 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02eebh                               ; e8 13 04
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 17 04
+    inc cx                                    ; 41
+    mov dx, strict word 0007ch                ; ba 7c 00
+    xor ax, ax                                ; 31 c0
+    call 02f07h                               ; e8 1c 04
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 21 04
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, strict word 0007eh                ; ba 7e 00
+    xor ax, ax                                ; 31 c0
+    call 02f07h                               ; e8 09 04
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 0e 04
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, 0010ch                            ; ba 0c 01
+    xor ax, ax                                ; 31 c0
+    call 02f07h                               ; e8 f6 03
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 fb 03
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, 0010eh                            ; ba 0e 01
+    xor ax, ax                                ; 31 c0
+    call 02f07h                               ; e8 e3 03
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 e8 03
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    test byte [bp-006h], 004h                 ; f6 46 fa 04
+    je short 02b9ch                           ; 74 67
+    mov dx, 003c7h                            ; ba c7 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 b4 03
+    inc cx                                    ; 41
+    mov dx, 003c8h                            ; ba c8 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 a3 03
+    inc cx                                    ; 41
+    mov dx, 003c6h                            ; ba c6 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 92 03
+    inc cx                                    ; 41
+    xor al, al                                ; 30 c0
+    mov dx, 003c8h                            ; ba c8 03
+    out DX, AL                                ; ee
+    xor ah, ah                                ; 30 e4
+    mov word [bp-004h], ax                    ; 89 46 fc
+    jmp short 02b7ch                          ; eb 07
+    cmp word [bp-004h], 00300h                ; 81 7e fc 00 03
+    jnc short 02b92h                          ; 73 16
+    mov dx, 003c9h                            ; ba c9 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 6d 03
+    inc cx                                    ; 41
+    inc word [bp-004h]                        ; ff 46 fc
+    jmp short 02b75h                          ; eb e3
+    xor bx, bx                                ; 31 db
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 5e 03
+    inc cx                                    ; 41
+    mov ax, cx                                ; 89 c8
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    retn                                      ; c3
+biosfn_restore_video_state_:                 ; 0xc2ba3 LB 0x321
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00006h, 000h                        ; c8 06 00 00
+    push ax                                   ; 50
+    mov si, dx                                ; 89 d6
+    mov cx, bx                                ; 89 d9
+    test byte [bp-008h], 001h                 ; f6 46 f8 01
+    je near 02d01h                            ; 0f 84 4a 01
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    lea dx, [bx+040h]                         ; 8d 57 40
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 42 03
+    mov di, ax                                ; 89 c7
+    mov word [bp-002h], strict word 00001h    ; c7 46 fe 01 00
+    lea cx, [bx+005h]                         ; 8d 4f 05
+    jmp short 02bd7h                          ; eb 06
+    cmp word [bp-002h], strict byte 00004h    ; 83 7e fe 04
+    jnbe short 02befh                         ; 77 18
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 06 03
+    mov dx, 003c5h                            ; ba c5 03
+    out DX, AL                                ; ee
+    inc cx                                    ; 41
+    inc word [bp-002h]                        ; ff 46 fe
+    jmp short 02bd1h                          ; eb e2
+    xor al, al                                ; 30 c0
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 ef 02
+    mov dx, 003c5h                            ; ba c5 03
+    out DX, AL                                ; ee
+    inc cx                                    ; 41
+    mov ax, strict word 00011h                ; b8 11 00
+    mov dx, di                                ; 89 fa
+    out DX, ax                                ; ef
+    mov word [bp-002h], strict word 00000h    ; c7 46 fe 00 00
+    jmp short 02c14h                          ; eb 06
+    cmp word [bp-002h], strict byte 00018h    ; 83 7e fe 18
+    jnbe short 02c31h                         ; 77 1d
+    cmp word [bp-002h], strict byte 00011h    ; 83 7e fe 11
+    je short 02c2bh                           ; 74 11
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    mov dx, di                                ; 89 fa
+    out DX, AL                                ; ee
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 c4 02
+    lea dx, [di+001h]                         ; 8d 55 01
+    out DX, AL                                ; ee
+    inc cx                                    ; 41
+    inc word [bp-002h]                        ; ff 46 fe
+    jmp short 02c0eh                          ; eb dd
+    mov dx, 003cch                            ; ba cc 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    and AL, strict byte 0feh                  ; 24 fe
+    mov word [bp-004h], ax                    ; 89 46 fc
+    cmp di, 003d4h                            ; 81 ff d4 03
+    jne short 02c46h                          ; 75 04
+    or byte [bp-004h], 001h                   ; 80 4e fc 01
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    mov dx, 003c2h                            ; ba c2 03
+    out DX, AL                                ; ee
+    mov AL, strict byte 011h                  ; b0 11
+    mov dx, di                                ; 89 fa
+    out DX, AL                                ; ee
+    mov dx, cx                                ; 89 ca
+    add dx, strict byte 0fff9h                ; 83 c2 f9
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 8f 02
+    lea dx, [di+001h]                         ; 8d 55 01
+    out DX, AL                                ; ee
+    lea dx, [bx+003h]                         ; 8d 57 03
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 83 02
+    xor ah, ah                                ; 30 e4
+    mov word [bp-006h], ax                    ; 89 46 fa
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov word [bp-002h], strict word 00000h    ; c7 46 fe 00 00
+    jmp short 02c80h                          ; eb 06
+    cmp word [bp-002h], strict byte 00013h    ; 83 7e fe 13
+    jnbe short 02c9eh                         ; 77 1e
+    mov ax, word [bp-006h]                    ; 8b 46 fa
+    and ax, strict word 00020h                ; 25 20 00
+    or ax, word [bp-002h]                     ; 0b 46 fe
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 57 02
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    inc cx                                    ; 41
+    inc word [bp-002h]                        ; ff 46 fe
+    jmp short 02c7ah                          ; eb dc
+    mov al, byte [bp-006h]                    ; 8a 46 fa
+    mov dx, 003c0h                            ; ba c0 03
+    out DX, AL                                ; ee
+    mov dx, 003dah                            ; ba da 03
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    mov word [bp-002h], strict word 00000h    ; c7 46 fe 00 00
+    jmp short 02cb8h                          ; eb 06
+    cmp word [bp-002h], strict byte 00008h    ; 83 7e fe 08
+    jnbe short 02cd0h                         ; 77 18
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, AL                                ; ee
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 25 02
+    mov dx, 003cfh                            ; ba cf 03
+    out DX, AL                                ; ee
+    inc cx                                    ; 41
+    inc word [bp-002h]                        ; ff 46 fe
+    jmp short 02cb2h                          ; eb e2
+    add cx, strict byte 00006h                ; 83 c1 06
+    mov dx, bx                                ; 89 da
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 11 02
+    mov dx, 003c4h                            ; ba c4 03
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    mov dx, bx                                ; 89 da
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 05 02
+    mov dx, di                                ; 89 fa
+    out DX, AL                                ; ee
+    inc bx                                    ; 43
+    mov dx, bx                                ; 89 da
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 fa 01
+    mov dx, 003ceh                            ; ba ce 03
+    out DX, AL                                ; ee
+    lea dx, [bx+002h]                         ; 8d 57 02
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 ee 01
+    lea dx, [di+006h]                         ; 8d 55 06
+    out DX, AL                                ; ee
+    test byte [bp-008h], 002h                 ; f6 46 f8 02
+    je near 02e70h                            ; 0f 84 67 01
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 db 01
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, strict word 00049h                ; ba 49 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 dd 01
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 e3 01
+    mov bx, ax                                ; 89 c3
+    mov dx, strict word 0004ah                ; ba 4a 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 e6 01
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 cf 01
+    mov bx, ax                                ; 89 c3
+    mov dx, strict word 0004ch                ; ba 4c 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 d2 01
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 bb 01
+    mov bx, ax                                ; 89 c3
+    mov dx, strict word 00063h                ; ba 63 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 be 01
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 8b 01
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00084h                            ; ba 84 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 8d 01
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 93 01
+    mov bx, ax                                ; 89 c3
+    mov dx, 00085h                            ; ba 85 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 96 01
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 63 01
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00087h                            ; ba 87 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 65 01
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 4f 01
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00088h                            ; ba 88 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 51 01
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 3b 01
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00089h                            ; ba 89 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 3d 01
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 43 01
+    mov bx, ax                                ; 89 c3
+    mov dx, strict word 00060h                ; ba 60 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 46 01
+    mov word [bp-002h], strict word 00000h    ; c7 46 fe 00 00
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    jmp short 02ddeh                          ; eb 06
+    cmp word [bp-002h], strict byte 00008h    ; 83 7e fe 08
+    jnc short 02dfch                          ; 73 1e
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 22 01
+    mov bx, ax                                ; 89 c3
+    mov dx, word [bp-002h]                    ; 8b 56 fe
+    add dx, dx                                ; 01 d2
+    add dx, strict byte 00050h                ; 83 c2 50
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 20 01
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    inc word [bp-002h]                        ; ff 46 fe
+    jmp short 02dd8h                          ; eb dc
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 04 01
+    mov bx, ax                                ; 89 c3
+    mov dx, strict word 0004eh                ; ba 4e 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 07 01
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 d4 00
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, strict word 00062h                ; ba 62 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 d6 00
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 dc 00
+    mov bx, ax                                ; 89 c3
+    mov dx, strict word 0007ch                ; ba 7c 00
+    xor ax, ax                                ; 31 c0
+    call 02f15h                               ; e8 e0 00
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 c9 00
+    mov bx, ax                                ; 89 c3
+    mov dx, strict word 0007eh                ; ba 7e 00
+    xor ax, ax                                ; 31 c0
+    call 02f15h                               ; e8 cd 00
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 b6 00
+    mov bx, ax                                ; 89 c3
+    mov dx, 0010ch                            ; ba 0c 01
+    xor ax, ax                                ; 31 c0
+    call 02f15h                               ; e8 ba 00
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02f07h                               ; e8 a3 00
+    mov bx, ax                                ; 89 c3
+    mov dx, 0010eh                            ; ba 0e 01
+    xor ax, ax                                ; 31 c0
+    call 02f15h                               ; e8 a7 00
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    test byte [bp-008h], 004h                 ; f6 46 f8 04
+    je short 02ebdh                           ; 74 47
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 6d 00
+    xor ah, ah                                ; 30 e4
+    mov word [bp-004h], ax                    ; 89 46 fc
+    inc cx                                    ; 41
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 60 00
+    mov dx, 003c6h                            ; ba c6 03
+    out DX, AL                                ; ee
+    inc cx                                    ; 41
+    xor al, al                                ; 30 c0
+    mov dx, 003c8h                            ; ba c8 03
+    out DX, AL                                ; ee
+    xor ah, ah                                ; 30 e4
+    mov word [bp-002h], ax                    ; 89 46 fe
+    jmp short 02ea4h                          ; eb 07
+    cmp word [bp-002h], 00300h                ; 81 7e fe 00 03
+    jnc short 02eb5h                          ; 73 11
+    mov dx, cx                                ; 89 ca
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 40 00
+    mov dx, 003c9h                            ; ba c9 03
+    out DX, AL                                ; ee
+    inc cx                                    ; 41
+    inc word [bp-002h]                        ; ff 46 fe
+    jmp short 02e9dh                          ; eb e8
+    inc cx                                    ; 41
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    mov dx, 003c8h                            ; ba c8 03
+    out DX, AL                                ; ee
+    mov ax, cx                                ; 89 c8
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    retn                                      ; c3
+find_vga_entry_:                             ; 0xc2ec4 LB 0x27
+    push bx                                   ; 53
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov dl, al                                ; 88 c2
+    mov AH, strict byte 0ffh                  ; b4 ff
+    xor al, al                                ; 30 c0
+    jmp short 02ed7h                          ; eb 06
+    db  0feh, 0c0h
+    ; inc al                                    ; fe c0
+    cmp AL, strict byte 00fh                  ; 3c 0f
+    jnbe short 02ee5h                         ; 77 0e
+    movzx bx, al                              ; 0f b6 d8
+    sal bx, 003h                              ; c1 e3 03
+    cmp dl, byte [bx+0482eh]                  ; 3a 97 2e 48
+    jne short 02ed1h                          ; 75 ee
+    mov ah, al                                ; 88 c4
+    mov al, ah                                ; 88 e0
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    retn                                      ; c3
+read_byte_:                                  ; 0xc2eeb LB 0xe
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, dx                                ; 89 d3
+    mov es, ax                                ; 8e c0
+    mov al, byte [es:bx]                      ; 26 8a 07
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+write_byte_:                                 ; 0xc2ef9 LB 0xe
+    push si                                   ; 56
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov si, dx                                ; 89 d6
+    mov es, ax                                ; 8e c0
+    mov byte [es:si], bl                      ; 26 88 1c
+    pop bp                                    ; 5d
+    pop si                                    ; 5e
+    retn                                      ; c3
+read_word_:                                  ; 0xc2f07 LB 0xe
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, dx                                ; 89 d3
+    mov es, ax                                ; 8e c0
+    mov ax, word [es:bx]                      ; 26 8b 07
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+write_word_:                                 ; 0xc2f15 LB 0xe
+    push si                                   ; 56
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov si, dx                                ; 89 d6
+    mov es, ax                                ; 8e c0
+    mov word [es:si], bx                      ; 26 89 1c
+    pop bp                                    ; 5d
+    pop si                                    ; 5e
+    retn                                      ; c3
+read_dword_:                                 ; 0xc2f23 LB 0x12
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, dx                                ; 89 d3
+    mov es, ax                                ; 8e c0
+    mov ax, word [es:bx]                      ; 26 8b 07
+    mov dx, word [es:bx+002h]                 ; 26 8b 57 02
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+write_dword_:                                ; 0xc2f35 LB 0x7f
+    push si                                   ; 56
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov si, dx                                ; 89 d6
+    mov es, ax                                ; 8e c0
+    mov word [es:si], bx                      ; 26 89 1c
+    mov word [es:si+002h], cx                 ; 26 89 4c 02
+    pop bp                                    ; 5d
+    pop si                                    ; 5e
+    retn                                      ; c3
+    dec di                                    ; 4f
+    sbb AL, strict byte 01bh                  ; 1c 1b
+    adc dx, word [bp+si]                      ; 13 12
+    adc word [bx+si], dx                      ; 11 10
+    push CS                                   ; 0e
+    or ax, 00a0ch                             ; 0d 0c 0a
+    or word [bx+si], cx                       ; 09 08
+    pop ES                                    ; 07
+    push ES                                   ; 06
+    add ax, 00304h                            ; 05 04 03
+    add al, byte [bx+di]                      ; 02 01
+    add byte [bx+033h], dh                    ; 00 77 33
+    loop 02f8fh                               ; e2 2f
+    and byte [bx+si], dh                      ; 20 30
+    xor AL, strict byte 030h                  ; 34 30
+    inc bp                                    ; 45
+    xor byte [bx+di+030h], bl                 ; 30 59 30
+    push strict byte 00030h                   ; 6a 30
+    je short 02f9ch                           ; 74 30
+    scasb                                     ; ae
+    xor byte [bp+si-03cd0h], dh               ; 30 b2 30 c3
+    xor al, ah                                ; 30 e0
+    xor ch, bh                                ; 30 fd
+    xor byte [di], bl                         ; 30 1d
+    xor word [bp+si], di                      ; 31 3a
+    xor word [bx+di+031h], dx                 ; 31 51 31
+    pop bp                                    ; 5d
+    xor word [bx+si], di                      ; 31 38
+    xor dh, byte [bp+di+032h]                 ; 32 73 32
+    mov word [0b832h], ax                     ; a3 32 b8
+    db  032h, 0fah
+    ; xor bh, dl                                ; 32 fa
+    xor dh, byte [bx+si]                      ; 32 30
+    and AL, strict byte 023h                  ; 24 23
+    and ah, byte [bx+di]                      ; 22 21
+    and byte [si], dl                         ; 20 14
+    adc dl, byte [bx+di]                      ; 12 11
+    adc byte [si], al                         ; 10 04
+    add al, byte [bx+di]                      ; 02 01
+    add byte [bx+033h], dh                    ; 00 77 33
+    jle short 02fcbh                          ; 7e 31
+    movsb                                     ; a4
+    xor word [di-039cfh], si                  ; 31 b5 31 c6
+    xor word [bp+031h], di                    ; 31 7e 31
+    movsb                                     ; a4
+    xor word [di-039cfh], si                  ; 31 b5 31 c6
+    xor di, dx                                ; 31 d7
+    xor bx, sp                                ; 31 e3
+    xor si, di                                ; 31 fe
+    xor word [bx+di], cx                      ; 31 09
+    xor dl, byte [si]                         ; 32 14
+    xor bl, byte [bx]                         ; 32 1f
+    db  032h
+_int10_func:                                 ; 0xc2fb4 LB 0x3c7
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00002h, 000h                        ; c8 02 00 00
+    mov si, word [bp+008h]                    ; 8b 76 08
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    shr ax, 008h                              ; c1 e8 08
+    cmp ax, strict word 0004fh                ; 3d 4f 00
+    jnbe near 03377h                          ; 0f 87 ad 03
+    push CS                                   ; 0e
+    pop ES                                    ; 07
+    mov cx, strict word 00016h                ; b9 16 00
+    mov di, 02f47h                            ; bf 47 2f
+    repne scasb                               ; f2 ae
+    sal cx, 1                                 ; d1 e1
+    mov di, cx                                ; 89 cf
+    mov ax, word [cs:di+02f5ch]               ; 2e 8b 85 5c 2f
+    mov cl, byte [bp+016h]                    ; 8a 4e 16
+    jmp ax                                    ; ff e0
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 00fb8h                               ; e8 ce df
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    and ax, strict word 0007fh                ; 25 7f 00
+    cmp ax, strict word 00007h                ; 3d 07 00
+    je short 0300ah                           ; 74 15
+    cmp ax, strict word 00006h                ; 3d 06 00
+    je short 03001h                           ; 74 07
+    cmp ax, strict word 00005h                ; 3d 05 00
+    jbe short 0300ah                          ; 76 0b
+    jmp short 03013h                          ; eb 12
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor al, al                                ; 30 c0
+    or AL, strict byte 03fh                   ; 0c 3f
+    jmp short 0301ah                          ; eb 10
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor al, al                                ; 30 c0
+    or AL, strict byte 030h                   ; 0c 30
+    jmp short 0301ah                          ; eb 07
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor al, al                                ; 30 c0
+    or AL, strict byte 020h                   ; 0c 20
+    mov word [bp+016h], ax                    ; 89 46 16
+    jmp near 03377h                           ; e9 57 03
+    mov al, byte [bp+014h]                    ; 8a 46 14
+    movzx dx, al                              ; 0f b6 d0
+    mov ax, word [bp+014h]                    ; 8b 46 14
+    shr ax, 008h                              ; c1 e8 08
+    xor ah, ah                                ; 30 e4
+    call 00da1h                               ; e8 70 dd
+    jmp near 03377h                           ; e9 43 03
+    mov dx, word [bp+012h]                    ; 8b 56 12
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    xor ah, ah                                ; 30 e4
+    call 00e42h                               ; e8 00 de
+    jmp near 03377h                           ; e9 32 03
+    lea bx, [bp+012h]                         ; 8d 5e 12
+    lea dx, [bp+014h]                         ; 8d 56 14
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    xor ah, ah                                ; 30 e4
+    call 00a83h                               ; e8 2d da
+    jmp near 03377h                           ; e9 1e 03
+    xor ax, ax                                ; 31 c0
+    mov word [bp+016h], ax                    ; 89 46 16
+    mov word [bp+010h], ax                    ; 89 46 10
+    mov word [bp+014h], ax                    ; 89 46 14
+    mov word [bp+012h], ax                    ; 89 46 12
+    jmp near 03377h                           ; e9 0d 03
+    mov al, cl                                ; 88 c8
+    xor ah, ah                                ; 30 e4
+    call 00ee0h                               ; e8 6f de
+    jmp near 03377h                           ; e9 03 03
+    mov ax, strict word 00001h                ; b8 01 00
+    push ax                                   ; 50
+    mov ax, 000ffh                            ; b8 ff 00
+    push ax                                   ; 50
+    mov al, byte [bp+012h]                    ; 8a 46 12
+    xor ah, ah                                ; 30 e4
+    push ax                                   ; 50
+    mov ax, word [bp+012h]                    ; 8b 46 12
+    shr ax, 008h                              ; c1 e8 08
+    xor ah, ah                                ; 30 e4
+    push ax                                   ; 50
+    mov al, byte [bp+014h]                    ; 8a 46 14
+    movzx cx, al                              ; 0f b6 c8
+    mov ax, word [bp+014h]                    ; 8b 46 14
+    shr ax, 008h                              ; c1 e8 08
+    movzx bx, al                              ; 0f b6 d8
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    movzx dx, al                              ; 0f b6 d0
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 0152fh                               ; e8 84 e4
+    jmp near 03377h                           ; e9 c9 02
+    xor ax, ax                                ; 31 c0
+    jmp short 03077h                          ; eb c5
+    lea dx, [bp+016h]                         ; 8d 56 16
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    xor ah, ah                                ; 30 e4
+    call 00ac3h                               ; e8 03 da
+    jmp near 03377h                           ; e9 b4 02
+    mov cx, word [bp+014h]                    ; 8b 4e 14
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx bx, al                              ; 0f b6 d8
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    movzx dx, al                              ; 0f b6 d0
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 01cbbh                               ; e8 de eb
+    jmp near 03377h                           ; e9 97 02
+    mov cx, word [bp+014h]                    ; 8b 4e 14
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx bx, al                              ; 0f b6 d8
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    movzx dx, al                              ; 0f b6 d0
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 01e1eh                               ; e8 24 ed
+    jmp near 03377h                           ; e9 7a 02
+    mov cx, word [bp+012h]                    ; 8b 4e 12
+    mov bx, word [bp+014h]                    ; 8b 5e 14
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    movzx dx, al                              ; 0f b6 d0
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    mov word [bp-002h], ax                    ; 89 46 fe
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    xor ah, ah                                ; 30 e4
+    call 01f88h                               ; e8 6e ee
+    jmp near 03377h                           ; e9 5a 02
+    lea cx, [bp+016h]                         ; 8d 4e 16
+    mov bx, word [bp+012h]                    ; 8b 5e 12
+    mov dx, word [bp+014h]                    ; 8b 56 14
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    mov word [bp-002h], ax                    ; 89 46 fe
+    mov al, byte [bp-002h]                    ; 8a 46 fe
+    xor ah, ah                                ; 30 e4
+    call 00be5h                               ; e8 ae da
+    jmp near 03377h                           ; e9 3d 02
+    mov cx, strict word 00002h                ; b9 02 00
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 000ffh                            ; ba ff 00
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 020f0h                               ; e8 a2 ef
+    jmp near 03377h                           ; e9 26 02
+    mov dx, word [bp+014h]                    ; 8b 56 14
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    call 00d19h                               ; e8 bf db
+    jmp near 03377h                           ; e9 1a 02
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor ah, ah                                ; 30 e4
+    cmp ax, strict word 00030h                ; 3d 30 00
+    jnbe near 03377h                          ; 0f 87 0e 02
+    push CS                                   ; 0e
+    pop ES                                    ; 07
+    mov cx, strict word 0000fh                ; b9 0f 00
+    mov di, 02f88h                            ; bf 88 2f
+    repne scasb                               ; f2 ae
+    sal cx, 1                                 ; d1 e1
+    mov di, cx                                ; 89 cf
+    mov ax, word [cs:di+02f96h]               ; 2e 8b 85 96 2f
+    jmp ax                                    ; ff e0
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    xor ah, ah                                ; 30 e4
+    push ax                                   ; 50
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    xor ah, ah                                ; 30 e4
+    push ax                                   ; 50
+    push word [bp+012h]                       ; ff 76 12
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    mov cx, word [bp+014h]                    ; 8b 4e 14
+    mov bx, word [bp+00ch]                    ; 8b 5e 0c
+    mov dx, word [bp+01ah]                    ; 8b 56 1a
+    call 0248dh                               ; e8 ec f2
+    jmp near 03377h                           ; e9 d3 01
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx dx, al                              ; 0f b6 d0
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 02505h                               ; e8 53 f3
+    jmp near 03377h                           ; e9 c2 01
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx dx, al                              ; 0f b6 d0
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 02571h                               ; e8 ae f3
+    jmp near 03377h                           ; e9 b1 01
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx dx, al                              ; 0f b6 d0
+    mov al, byte [bp+016h]                    ; 8a 46 16
+    xor ah, ah                                ; 30 e4
+    call 025dfh                               ; e8 0b f4
+    jmp near 03377h                           ; e9 a0 01
+    mov dx, word [bp+00ch]                    ; 8b 56 0c
+    mov ax, word [bp+01ah]                    ; 8b 46 1a
+    call 0264dh                               ; e8 6d f4
+    jmp near 03377h                           ; e9 94 01
+    mov al, byte [bp+012h]                    ; 8a 46 12
+    xor ah, ah                                ; 30 e4
+    push ax                                   ; 50
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx cx, al                              ; 0f b6 c8
+    mov bx, word [bp+014h]                    ; 8b 5e 14
+    mov dx, word [bp+00ch]                    ; 8b 56 0c
+    mov ax, word [bp+01ah]                    ; 8b 46 1a
+    call 02652h                               ; e8 57 f4
+    jmp near 03377h                           ; e9 79 01
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    xor ah, ah                                ; 30 e4
+    call 02659h                               ; e8 53 f4
+    jmp near 03377h                           ; e9 6e 01
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    xor ah, ah                                ; 30 e4
+    call 0265eh                               ; e8 4d f4
+    jmp near 03377h                           ; e9 63 01
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    xor ah, ah                                ; 30 e4
+    call 02663h                               ; e8 47 f4
+    jmp near 03377h                           ; e9 58 01
+    lea ax, [bp+012h]                         ; 8d 46 12
+    push ax                                   ; 50
+    lea cx, [bp+014h]                         ; 8d 4e 14
+    lea bx, [bp+00ch]                         ; 8d 5e 0c
+    lea dx, [bp+01ah]                         ; 8d 56 1a
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    call 00b66h                               ; e8 31 d9
+    jmp near 03377h                           ; e9 3f 01
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    xor ah, ah                                ; 30 e4
+    cmp ax, strict word 00036h                ; 3d 36 00
+    je short 0326ah                           ; 74 28
+    cmp ax, strict word 00035h                ; 3d 35 00
+    je short 03254h                           ; 74 0d
+    cmp ax, strict word 00020h                ; 3d 20 00
+    jne near 03377h                           ; 0f 85 29 01
+    call 02668h                               ; e8 17 f4
+    jmp near 03377h                           ; e9 23 01
+    movzx ax, cl                              ; 0f b6 c1
+    mov bx, word [bp+012h]                    ; 8b 5e 12
+    mov dx, word [bp+01ah]                    ; 8b 56 1a
+    call 0266dh                               ; e8 0d f4
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor al, al                                ; 30 c0
+    or AL, strict byte 012h                   ; 0c 12
+    jmp near 0301ah                           ; e9 b0 fd
+    mov al, cl                                ; 88 c8
+    xor ah, ah                                ; 30 e4
+    call 02672h                               ; e8 01 f4
+    jmp short 03260h                          ; eb ed
+    push word [bp+00ch]                       ; ff 76 0c
+    push word [bp+01ah]                       ; ff 76 1a
+    mov al, byte [bp+012h]                    ; 8a 46 12
+    xor ah, ah                                ; 30 e4
+    push ax                                   ; 50
+    mov ax, word [bp+012h]                    ; 8b 46 12
+    shr ax, 008h                              ; c1 e8 08
+    xor ah, ah                                ; 30 e4
+    push ax                                   ; 50
+    mov al, byte [bp+010h]                    ; 8a 46 10
+    movzx bx, al                              ; 0f b6 d8
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    shr ax, 008h                              ; c1 e8 08
+    movzx dx, al                              ; 0f b6 d0
+    movzx ax, cl                              ; 0f b6 c1
+    mov cx, word [bp+014h]                    ; 8b 4e 14
+    call 02677h                               ; e8 d7 f3
+    jmp near 03377h                           ; e9 d4 00
+    mov bx, si                                ; 89 f3
+    mov dx, word [bp+01ah]                    ; 8b 56 1a
+    mov ax, word [bp+010h]                    ; 8b 46 10
+    call 0270eh                               ; e8 60 f4
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor al, al                                ; 30 c0
+    or AL, strict byte 01bh                   ; 0c 1b
+    jmp near 0301ah                           ; e9 62 fd
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor ah, ah                                ; 30 e4
+    cmp ax, strict word 00002h                ; 3d 02 00
+    je short 032e4h                           ; 74 22
+    cmp ax, strict word 00001h                ; 3d 01 00
+    je short 032d6h                           ; 74 0f
+    test ax, ax                               ; 85 c0
+    jne short 032f0h                          ; 75 25
+    lea dx, [bp+010h]                         ; 8d 56 10
+    mov ax, word [bp+014h]                    ; 8b 46 14
+    call 0282fh                               ; e8 5b f5
+    jmp short 032f0h                          ; eb 1a
+    mov bx, word [bp+010h]                    ; 8b 5e 10
+    mov dx, word [bp+01ah]                    ; 8b 56 1a
+    mov ax, word [bp+014h]                    ; 8b 46 14
+    call 0283eh                               ; e8 5c f5
+    jmp short 032f0h                          ; eb 0c
+    mov bx, word [bp+010h]                    ; 8b 5e 10
+    mov dx, word [bp+01ah]                    ; 8b 56 1a
+    mov ax, word [bp+014h]                    ; 8b 46 14
+    call 02ba3h                               ; e8 b3 f8
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor al, al                                ; 30 c0
+    or AL, strict byte 01ch                   ; 0c 1c
+    jmp near 0301ah                           ; e9 20 fd
+    call 00794h                               ; e8 97 d4
+    test ax, ax                               ; 85 c0
+    je near 03372h                            ; 0f 84 6f 00
+    mov ax, word [bp+016h]                    ; 8b 46 16
+    xor ah, ah                                ; 30 e4
+    cmp ax, strict word 00002h                ; 3d 02 00
+    jc short 03320h                           ; 72 13
+    jbe short 03346h                          ; 76 37
+    cmp ax, strict word 0000ah                ; 3d 0a 00
+    je short 0336bh                           ; 74 57
+    cmp ax, strict word 00009h                ; 3d 09 00
+    je short 0336bh                           ; 74 52
+    cmp ax, strict word 00004h                ; 3d 04 00
+    je short 03356h                           ; 74 38
+    jmp short 0336bh                          ; eb 4b
+    cmp ax, strict word 00001h                ; 3d 01 00
+    je short 03336h                           ; 74 11
+    test ax, ax                               ; 85 c0
+    jne short 0336bh                          ; 75 42
+    mov bx, si                                ; 89 f3
+    mov dx, word [bp+01ah]                    ; 8b 56 1a
+    lea ax, [bp+016h]                         ; 8d 46 16
+    call 03486h                               ; e8 52 01
+    jmp short 03377h                          ; eb 41
+    mov cx, si                                ; 89 f1
+    mov bx, word [bp+01ah]                    ; 8b 5e 1a
+    mov dx, word [bp+014h]                    ; 8b 56 14
+    lea ax, [bp+016h]                         ; 8d 46 16
+    call 035aah                               ; e8 66 02
+    jmp short 03377h                          ; eb 31
+    mov cx, si                                ; 89 f1
+    mov bx, word [bp+01ah]                    ; 8b 5e 1a
+    mov dx, word [bp+010h]                    ; 8b 56 10
+    lea ax, [bp+016h]                         ; 8d 46 16
+    call 0365ah                               ; e8 06 03
+    jmp short 03377h                          ; eb 21
+    lea ax, [bp+010h]                         ; 8d 46 10
+    push ax                                   ; 50
+    mov cx, word [bp+01ah]                    ; 8b 4e 1a
+    mov bx, word [bp+012h]                    ; 8b 5e 12
+    mov dx, word [bp+014h]                    ; 8b 56 14
+    lea ax, [bp+016h]                         ; 8d 46 16
+    call 03836h                               ; e8 cd 04
+    jmp short 03377h                          ; eb 0c
+    mov word [bp+016h], 00100h                ; c7 46 16 00 01
+    jmp short 03377h                          ; eb 05
+    mov word [bp+016h], 00100h                ; c7 46 16 00 01
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn                                      ; c3
+dispi_set_xres_:                             ; 0xc337b LB 0x18
+    push bx                                   ; 53
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, ax                                ; 89 c3
+    mov ax, strict word 00001h                ; b8 01 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov ax, bx                                ; 89 d8
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    retn                                      ; c3
+dispi_set_yres_:                             ; 0xc3393 LB 0x18
+    push bx                                   ; 53
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, ax                                ; 89 c3
+    mov ax, strict word 00002h                ; b8 02 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov ax, bx                                ; 89 d8
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    retn                                      ; c3
+dispi_set_bpp_:                              ; 0xc33ab LB 0x18
+    push bx                                   ; 53
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, ax                                ; 89 c3
+    mov ax, strict word 00003h                ; b8 03 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov ax, bx                                ; 89 d8
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    retn                                      ; c3
+in_word_:                                    ; 0xc33c3 LB 0xf
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, ax                                ; 89 c3
+    mov ax, dx                                ; 89 d0
+    mov dx, bx                                ; 89 da
+    out DX, ax                                ; ef
+    in ax, DX                                 ; ed
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+in_byte_:                                    ; 0xc33d2 LB 0x11
+    push bx                                   ; 53
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, ax                                ; 89 c3
+    mov ax, dx                                ; 89 d0
+    mov dx, bx                                ; 89 da
+    out DX, ax                                ; ef
+    in AL, DX                                 ; ec
+    db  02ah, 0e4h
+    ; sub ah, ah                                ; 2a e4
+    pop bp                                    ; 5d
+    pop bx                                    ; 5b
+    retn                                      ; c3
+dispi_get_id_:                               ; 0xc33e3 LB 0x11
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    xor ax, ax                                ; 31 c0
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    retn                                      ; c3
+dispi_set_id_:                               ; 0xc33f4 LB 0x17
+    push bx                                   ; 53
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov bx, ax                                ; 89 c3
+    xor ax, ax                                ; 31 c0
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov ax, bx                                ; 89 d8
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    retn                                      ; c3
+vbe_init_:                                   ; 0xc340b LB 0x29
+    push bx                                   ; 53
+    push dx                                   ; 52
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov ax, 0b0c0h                            ; b8 c0 b0
+    call 033f4h                               ; e8 de ff
+    call 033e3h                               ; e8 ca ff
+    cmp ax, 0b0c0h                            ; 3d c0 b0
+    jne short 03430h                          ; 75 12
+    mov bx, strict word 00001h                ; bb 01 00
+    mov dx, 000b9h                            ; ba b9 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 cf fa
+    mov ax, 0b0c4h                            ; b8 c4 b0
+    call 033f4h                               ; e8 c4 ff
+    pop bp                                    ; 5d
+    pop dx                                    ; 5a
+    pop bx                                    ; 5b
+    retn                                      ; c3
+mode_info_find_mode_:                        ; 0xc3434 LB 0x52
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov di, ax                                ; 89 c7
+    mov si, dx                                ; 89 d6
+    xor dx, dx                                ; 31 d2
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 7c ff
+    cmp ax, 077cch                            ; 3d cc 77
+    jne short 0347eh                          ; 75 32
+    mov bx, strict word 00004h                ; bb 04 00
+    mov dx, bx                                ; 89 da
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 6c ff
+    mov cx, ax                                ; 89 c1
+    cmp cx, strict byte 0ffffh                ; 83 f9 ff
+    je short 0347eh                           ; 74 20
+    lea dx, [bx+002h]                         ; 8d 57 02
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 5c ff
+    lea dx, [bx+044h]                         ; 8d 57 44
+    cmp cx, di                                ; 39 f9
+    jne short 0347ah                          ; 75 0c
+    test si, si                               ; 85 f6
+    jne short 03476h                          ; 75 04
+    mov ax, bx                                ; 89 d8
+    jmp short 03480h                          ; eb 0a
+    test AL, strict byte 080h                 ; a8 80
+    jne short 03472h                          ; 75 f8
+    mov bx, dx                                ; 89 d3
+    jmp short 03451h                          ; eb d3
+    xor ax, ax                                ; 31 c0
+    pop bp                                    ; 5d
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+vbe_biosfn_return_controller_information_: ; 0xc3486 LB 0x124
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 0000ah, 000h                        ; c8 0a 00 00
+    mov si, ax                                ; 89 c6
+    mov di, dx                                ; 89 d7
+    mov word [bp-004h], bx                    ; 89 5e fc
+    mov word [bp-006h], strict word 00022h    ; c7 46 fa 22 00
+    call 00597h                               ; e8 fb d0
+    mov word [bp-00ah], ax                    ; 89 46 f6
+    mov bx, word [bp-004h]                    ; 8b 5e fc
+    mov word [bp-002h], di                    ; 89 7e fe
+    xor dx, dx                                ; 31 d2
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 16 ff
+    cmp ax, 077cch                            ; 3d cc 77
+    je short 034bch                           ; 74 0a
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:si], 00100h                  ; 26 c7 04 00 01
+    jmp near 035a5h                           ; e9 e9 00
+    mov cx, strict word 00004h                ; b9 04 00
+    mov word [bp-008h], strict word 00000h    ; c7 46 f8 00 00
+    mov es, [bp-002h]                         ; 8e 46 fe
+    cmp word [es:bx+002h], 03245h             ; 26 81 7f 02 45 32
+    jne short 034d6h                          ; 75 07
+    cmp word [es:bx], 04256h                  ; 26 81 3f 56 42
+    je short 034e5h                           ; 74 0f
+    cmp word [es:bx+002h], 04153h             ; 26 81 7f 02 53 41
+    jne short 034eah                          ; 75 0c
+    cmp word [es:bx], 04556h                  ; 26 81 3f 56 45
+    jne short 034eah                          ; 75 05
+    mov word [bp-008h], strict word 00001h    ; c7 46 f8 01 00
+    mov es, [bp-002h]                         ; 8e 46 fe
+    db  066h, 026h, 0c7h, 007h, 056h, 045h, 053h, 041h
+    ; mov dword [es:bx], strict dword 041534556h ; 66 26 c7 07 56 45 53 41
+    mov word [es:bx+004h], 00200h             ; 26 c7 47 04 00 02
+    mov word [es:bx+006h], 07e20h             ; 26 c7 47 06 20 7e
+    mov [es:bx+008h], ds                      ; 26 8c 5f 08
+    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
+    mov word [es:bx+010h], di                 ; 26 89 7f 10
+    mov ax, word [bp-004h]                    ; 8b 46 fc
+    add ax, strict word 00022h                ; 05 22 00
+    mov word [es:bx+00eh], ax                 ; 26 89 47 0e
+    mov dx, strict word 0ffffh                ; ba ff ff
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 9e fe
+    mov es, [bp-002h]                         ; 8e 46 fe
+    mov word [es:bx+012h], ax                 ; 26 89 47 12
+    cmp word [bp-008h], strict byte 00000h    ; 83 7e f8 00
+    je short 03556h                           ; 74 24
+    mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00
+    mov word [es:bx+016h], 07e35h             ; 26 c7 47 16 35 7e
+    mov [es:bx+018h], ds                      ; 26 8c 5f 18
+    mov word [es:bx+01ah], 07e48h             ; 26 c7 47 1a 48 7e
+    mov [es:bx+01ch], ds                      ; 26 8c 5f 1c
+    mov word [es:bx+01eh], 07e69h             ; 26 c7 47 1e 69 7e
+    mov [es:bx+020h], ds                      ; 26 8c 5f 20
+    mov dx, cx                                ; 89 ca
+    add dx, strict byte 0001bh                ; 83 c2 1b
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033d2h                               ; e8 71 fe
+    xor ah, ah                                ; 30 e4
+    cmp ax, word [bp-00ah]                    ; 3b 46 f6
+    jnbe short 03581h                         ; 77 19
+    mov dx, cx                                ; 89 ca
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 53 fe
+    mov bx, ax                                ; 89 c3
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, word [bp-006h]                    ; 03 56 fa
+    mov ax, di                                ; 89 f8
+    call 02f15h                               ; e8 98 f9
+    add word [bp-006h], strict byte 00002h    ; 83 46 fa 02
+    add cx, strict byte 00044h                ; 83 c1 44
+    mov dx, cx                                ; 89 ca
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 37 fe
+    mov bx, ax                                ; 89 c3
+    cmp ax, strict word 0ffffh                ; 3d ff ff
+    jne short 03556h                          ; 75 c3
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    add dx, word [bp-006h]                    ; 03 56 fa
+    mov ax, di                                ; 89 f8
+    call 02f15h                               ; e8 77 f9
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:si], strict word 0004fh      ; 26 c7 04 4f 00
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    retn                                      ; c3
+vbe_biosfn_return_mode_information_:         ; 0xc35aa LB 0xb0
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00004h, 000h                        ; c8 04 00 00
+    push ax                                   ; 50
+    mov ax, dx                                ; 89 d0
+    mov si, bx                                ; 89 de
+    mov word [bp-002h], cx                    ; 89 4e fe
+    test dh, 040h                             ; f6 c6 40
+    db  00fh, 095h, 0c2h
+    ; setne dl                                  ; 0f 95 c2
+    xor dh, dh                                ; 30 f6
+    and ah, 001h                              ; 80 e4 01
+    call 03434h                               ; e8 6e fe
+    mov word [bp-004h], ax                    ; 89 46 fc
+    test ax, ax                               ; 85 c0
+    je near 0364bh                            ; 0f 84 7c 00
+    mov cx, 00100h                            ; b9 00 01
+    xor ax, ax                                ; 31 c0
+    mov di, word [bp-002h]                    ; 8b 7e fe
+    mov es, bx                                ; 8e c3
+    cld                                       ; fc
+    jcxz 035deh                               ; e3 02
+    rep stosb                                 ; f3 aa
+    xor cx, cx                                ; 31 c9
+    jmp short 035e7h                          ; eb 05
+    cmp cx, strict byte 00042h                ; 83 f9 42
+    jnc short 03604h                          ; 73 1d
+    mov dx, word [bp-004h]                    ; 8b 56 fc
+    inc dx                                    ; 42
+    inc dx                                    ; 42
+    add dx, cx                                ; 01 ca
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033d2h                               ; e8 de fd
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, word [bp-002h]                    ; 8b 56 fe
+    add dx, cx                                ; 01 ca
+    mov ax, si                                ; 89 f0
+    call 02ef9h                               ; e8 f8 f8
+    inc cx                                    ; 41
+    jmp short 035e2h                          ; eb de
+    mov dx, word [bp-002h]                    ; 8b 56 fe
+    inc dx                                    ; 42
+    inc dx                                    ; 42
+    mov ax, si                                ; 89 f0
+    call 02eebh                               ; e8 dd f8
+    test AL, strict byte 001h                 ; a8 01
+    je short 0362eh                           ; 74 1c
+    mov dx, word [bp-002h]                    ; 8b 56 fe
+    add dx, strict byte 0000ch                ; 83 c2 0c
+    mov bx, 005f5h                            ; bb f5 05
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 f5 f8
+    mov dx, word [bp-002h]                    ; 8b 56 fe
+    add dx, strict byte 0000eh                ; 83 c2 0e
+    mov bx, 0c000h                            ; bb 00 c0
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 e7 f8
+    mov ax, strict word 0000bh                ; b8 0b 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    mov dx, word [bp-002h]                    ; 8b 56 fe
+    add dx, strict byte 0002ah                ; 83 c2 2a
+    mov bx, ax                                ; 89 c3
+    mov ax, si                                ; 89 f0
+    call 02f15h                               ; e8 cf f8
+    mov ax, strict word 0004fh                ; b8 4f 00
+    jmp short 0364eh                          ; eb 03
+    mov ax, 00100h                            ; b8 00 01
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov bx, word [bp-006h]                    ; 8b 5e fa
+    mov word [es:bx], ax                      ; 26 89 07
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn                                      ; c3
+vbe_biosfn_set_mode_:                        ; 0xc365a LB 0xe4
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00006h, 000h                        ; c8 06 00 00
+    mov si, ax                                ; 89 c6
+    mov word [bp-006h], dx                    ; 89 56 fa
+    test byte [bp-005h], 040h                 ; f6 46 fb 40
+    db  00fh, 095h, 0c0h
+    ; setne al                                  ; 0f 95 c0
+    movzx dx, al                              ; 0f b6 d0
+    mov ax, dx                                ; 89 d0
+    test dx, dx                               ; 85 d2
+    je short 03678h                           ; 74 03
+    mov dx, strict word 00040h                ; ba 40 00
+    mov byte [bp-002h], dl                    ; 88 56 fe
+    test byte [bp-005h], 080h                 ; f6 46 fb 80
+    je short 03686h                           ; 74 05
+    mov dx, 00080h                            ; ba 80 00
+    jmp short 03688h                          ; eb 02
+    xor dx, dx                                ; 31 d2
+    mov byte [bp-004h], dl                    ; 88 56 fc
+    and byte [bp-005h], 001h                  ; 80 66 fb 01
+    cmp word [bp-006h], 00100h                ; 81 7e fa 00 01
+    jnc short 036a8h                          ; 73 12
+    xor ax, ax                                ; 31 c0
+    call 005b9h                               ; e8 1e cf
+    movzx ax, byte [bp-006h]                  ; 0f b6 46 fa
+    call 00fb8h                               ; e8 16 d9
+    mov ax, strict word 0004fh                ; b8 4f 00
+    jmp near 03737h                           ; e9 8f 00
+    mov dx, ax                                ; 89 c2
+    mov ax, word [bp-006h]                    ; 8b 46 fa
+    call 03434h                               ; e8 84 fd
+    mov bx, ax                                ; 89 c3
+    test ax, ax                               ; 85 c0
+    je near 03734h                            ; 0f 84 7c 00
+    lea dx, [bx+014h]                         ; 8d 57 14
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 02 fd
+    mov cx, ax                                ; 89 c1
+    lea dx, [bx+016h]                         ; 8d 57 16
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033c3h                               ; e8 f7 fc
+    mov di, ax                                ; 89 c7
+    lea dx, [bx+01bh]                         ; 8d 57 1b
+    mov ax, 003b6h                            ; b8 b6 03
+    call 033d2h                               ; e8 fb fc
+    mov bl, al                                ; 88 c3
+    mov dl, al                                ; 88 c2
+    xor ax, ax                                ; 31 c0
+    call 005b9h                               ; e8 d9 ce
+    cmp bl, 004h                              ; 80 fb 04
+    jne short 036ebh                          ; 75 06
+    mov ax, strict word 0006ah                ; b8 6a 00
+    call 00fb8h                               ; e8 cd d8
+    movzx ax, dl                              ; 0f b6 c2
+    call 033abh                               ; e8 ba fc
+    mov ax, cx                                ; 89 c8
+    call 0337bh                               ; e8 85 fc
+    mov ax, di                                ; 89 f8
+    call 03393h                               ; e8 98 fc
+    xor ax, ax                                ; 31 c0
+    call 005d7h                               ; e8 d7 ce
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    or AL, strict byte 001h                   ; 0c 01
+    movzx dx, al                              ; 0f b6 d0
+    movzx ax, byte [bp-002h]                  ; 0f b6 46 fe
+    or ax, dx                                 ; 09 d0
+    call 005b9h                               ; e8 a8 ce
+    call 006b3h                               ; e8 9f cf
+    mov bx, word [bp-006h]                    ; 8b 5e fa
+    mov dx, 000bah                            ; ba ba 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02f15h                               ; e8 f5 f7
+    mov al, byte [bp-004h]                    ; 8a 46 fc
+    or AL, strict byte 060h                   ; 0c 60
+    movzx bx, al                              ; 0f b6 d8
+    mov dx, 00087h                            ; ba 87 00
+    mov ax, strict word 00040h                ; b8 40 00
+    call 02ef9h                               ; e8 c8 f7
+    jmp near 036a2h                           ; e9 6e ff
+    mov ax, 00100h                            ; b8 00 01
+    mov word [ss:si], ax                      ; 36 89 04
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn                                      ; c3
+vbe_biosfn_read_video_state_size_:           ; 0xc373e LB 0x8
+    push bp                                   ; 55
+    mov bp, sp                                ; 89 e5
+    mov ax, strict word 00012h                ; b8 12 00
+    pop bp                                    ; 5d
+    retn                                      ; c3
+vbe_biosfn_save_video_state_:                ; 0xc3746 LB 0x58
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00002h, 000h                        ; c8 02 00 00
+    mov di, ax                                ; 89 c7
+    mov cx, dx                                ; 89 d1
+    mov ax, strict word 00004h                ; b8 04 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    mov word [bp-002h], ax                    ; 89 46 fe
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, di                                ; 89 f8
+    call 02f15h                               ; e8 ac f7
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    test byte [bp-002h], 001h                 ; f6 46 fe 01
+    je short 03798h                           ; 74 27
+    mov si, strict word 00001h                ; be 01 00
+    jmp short 0377bh                          ; eb 05
+    cmp si, strict byte 00009h                ; 83 fe 09
+    jnbe short 03798h                         ; 77 1d
+    cmp si, strict byte 00004h                ; 83 fe 04
+    je short 03795h                           ; 74 15
+    mov ax, si                                ; 89 f0
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, 001cfh                            ; ba cf 01
+    in ax, DX                                 ; ed
+    mov bx, ax                                ; 89 c3
+    mov dx, cx                                ; 89 ca
+    mov ax, di                                ; 89 f8
+    call 02f15h                               ; e8 82 f7
+    inc cx                                    ; 41
+    inc cx                                    ; 41
+    inc si                                    ; 46
+    jmp short 03776h                          ; eb de
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+vbe_biosfn_restore_video_state_:             ; 0xc379e LB 0x98
+    push bx                                   ; 53
+    push cx                                   ; 51
+    push si                                   ; 56
+    enter 00002h, 000h                        ; c8 02 00 00
+    mov cx, ax                                ; 89 c1
+    mov bx, dx                                ; 89 d3
+    call 02f07h                               ; e8 5b f7
+    mov word [bp-002h], ax                    ; 89 46 fe
+    inc bx                                    ; 43
+    inc bx                                    ; 43
+    test byte [bp-002h], 001h                 ; f6 46 fe 01
+    jne short 037c7h                          ; 75 10
+    mov ax, strict word 00004h                ; b8 04 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    jmp short 03831h                          ; eb 6a
+    mov ax, strict word 00001h                ; b8 01 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, bx                                ; 89 da
+    mov ax, cx                                ; 89 c8
+    call 02f07h                               ; e8 32 f7
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    inc bx                                    ; 43
+    inc bx                                    ; 43
+    mov ax, strict word 00002h                ; b8 02 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, bx                                ; 89 da
+    mov ax, cx                                ; 89 c8
+    call 02f07h                               ; e8 1e f7
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    inc bx                                    ; 43
+    inc bx                                    ; 43
+    mov ax, strict word 00003h                ; b8 03 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, bx                                ; 89 da
+    mov ax, cx                                ; 89 c8
+    call 02f07h                               ; e8 0a f7
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    inc bx                                    ; 43
+    inc bx                                    ; 43
+    mov ax, strict word 00004h                ; b8 04 00
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    mov si, strict word 00005h                ; be 05 00
+    jmp short 0381bh                          ; eb 05
+    cmp si, strict byte 00009h                ; 83 fe 09
+    jnbe short 03831h                         ; 77 16
+    mov ax, si                                ; 89 f0
+    mov dx, 001ceh                            ; ba ce 01
+    out DX, ax                                ; ef
+    mov dx, bx                                ; 89 da
+    mov ax, cx                                ; 89 c8
+    call 02f07h                               ; e8 df f6
+    mov dx, 001cfh                            ; ba cf 01
+    out DX, ax                                ; ef
+    inc bx                                    ; 43
+    inc bx                                    ; 43
+    inc si                                    ; 46
+    jmp short 03816h                          ; eb e5
+    leave                                     ; c9
+    pop si                                    ; 5e
+    pop cx                                    ; 59
+    pop bx                                    ; 5b
+    retn                                      ; c3
+vbe_biosfn_save_restore_state_:              ; 0xc3836 LB 0x89
+    push si                                   ; 56
+    push di                                   ; 57
+    enter 00002h, 000h                        ; c8 02 00 00
+    mov si, ax                                ; 89 c6
+    mov word [bp-002h], dx                    ; 89 56 fe
+    mov ax, bx                                ; 89 d8
+    mov bx, word [bp+008h]                    ; 8b 5e 08
+    mov di, strict word 0004fh                ; bf 4f 00
+    xor ah, ah                                ; 30 e4
+    cmp ax, strict word 00002h                ; 3d 02 00
+    je short 03895h                           ; 74 45
+    cmp ax, strict word 00001h                ; 3d 01 00
+    je short 03879h                           ; 74 24
+    test ax, ax                               ; 85 c0
+    jne short 038b1h                          ; 75 58
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 0280ch                               ; e8 ad ef
+    mov cx, ax                                ; 89 c1
+    test byte [bp-002h], 008h                 ; f6 46 fe 08
+    je short 0386ch                           ; 74 05
+    call 0373eh                               ; e8 d4 fe
+    add ax, cx                                ; 01 c8
+    add ax, strict word 0003fh                ; 05 3f 00
+    shr ax, 006h                              ; c1 e8 06
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:bx], ax                      ; 26 89 07
+    jmp short 038b4h                          ; eb 3b
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov bx, word [es:bx]                      ; 26 8b 1f
+    mov dx, cx                                ; 89 ca
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 0283eh                               ; e8 b8 ef
+    test byte [bp-002h], 008h                 ; f6 46 fe 08
+    je short 038b4h                           ; 74 28
+    mov dx, ax                                ; 89 c2
+    mov ax, cx                                ; 89 c8
+    call 03746h                               ; e8 b3 fe
+    jmp short 038b4h                          ; eb 1f
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov bx, word [es:bx]                      ; 26 8b 1f
+    mov dx, cx                                ; 89 ca
+    mov ax, word [bp-002h]                    ; 8b 46 fe
+    call 02ba3h                               ; e8 01 f3
+    test byte [bp-002h], 008h                 ; f6 46 fe 08
+    je short 038b4h                           ; 74 0c
+    mov dx, ax                                ; 89 c2
+    mov ax, cx                                ; 89 c8
+    call 0379eh                               ; e8 ef fe
+    jmp short 038b4h                          ; eb 03
+    mov di, 00100h                            ; bf 00 01
+    push SS                                   ; 16
+    pop ES                                    ; 07
+    mov word [es:si], di                      ; 26 89 3c
+    leave                                     ; c9
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    retn 00002h                               ; c2 02 00
+
+  ; Padding 0xd41 bytes at 0xc38bf
+  times 3393 db 0
+
+section VBE32 progbits vstart=0x4600 align=1 ; size=0x115 class=CODE group=AUTO
+vesa_pm_start:                               ; 0xc4600 LB 0x114
+    sbb byte [bx+si], al                      ; 18 00
+    dec di                                    ; 4f
+    add byte [bx+si], dl                      ; 00 10
+    add word [bx+si], cx                      ; 01 08
+    add dh, cl                                ; 00 ce
+    add di, cx                                ; 01 cf
+    add di, cx                                ; 01 cf
+    add ax, dx                                ; 01 d0
+    add word [bp-048fdh], si                  ; 01 b6 03 b7
+    db  003h, 0ffh
+    ; add di, di                                ; 03 ff
+    db  0ffh
+    db  0ffh
+    jmp word [bp-07dh]                        ; ff 66 83
+    sti                                       ; fb
+    add byte [si+005h], dh                    ; 00 74 05
+    mov eax, strict dword 066c30100h          ; 66 b8 00 01 c3 66
+    db  08bh, 0c2h
+    ; mov ax, dx                                ; 8b c2
+    push edx                                  ; 66 52
+    push eax                                  ; 66 50
+    mov edx, strict dword 0b86601ceh          ; 66 ba ce 01 66 b8
+    add ax, 06600h                            ; 05 00 66
+    out DX, ax                                ; ef
+    pop eax                                   ; 66 58
+    mov edx, strict dword 0ef6601cfh          ; 66 ba cf 01 66 ef
+    in eax, DX                                ; 66 ed
+    pop edx                                   ; 66 5a
+    db  066h, 03bh, 0d0h
+    ; cmp edx, eax                              ; 66 3b d0
+    jne short 0464ah                          ; 75 05
+    mov eax, strict dword 066c3004fh          ; 66 b8 4f 00 c3 66
+    mov ax, 0014fh                            ; b8 4f 01
+    retn                                      ; c3
+    cmp bl, 080h                              ; 80 fb 80
+    je short 0465eh                           ; 74 0a
+    cmp bl, 000h                              ; 80 fb 00
+    je short 0466eh                           ; 74 15
+    mov eax, strict dword 052c30100h          ; 66 b8 00 01 c3 52
+    mov edx, strict dword 0a8ec03dah          ; 66 ba da 03 ec a8
+    or byte [di-005h], dh                     ; 08 75 fb
+    in AL, DX                                 ; ec
+    test AL, strict byte 008h                 ; a8 08
+    je short 04668h                           ; 74 fb
+    pop dx                                    ; 5a
+    push ax                                   ; 50
+    push cx                                   ; 51
+    push dx                                   ; 52
+    push si                                   ; 56
+    push di                                   ; 57
+    sal dx, 010h                              ; c1 e2 10
+    and cx, strict word 0ffffh                ; 81 e1 ff ff
+    add byte [bx+si], al                      ; 00 00
+    db  00bh, 0cah
+    ; or cx, dx                                 ; 0b ca
+    sal cx, 002h                              ; c1 e1 02
+    db  08bh, 0c1h
+    ; mov ax, cx                                ; 8b c1
+    push ax                                   ; 50
+    mov edx, strict dword 0b86601ceh          ; 66 ba ce 01 66 b8
+    push ES                                   ; 06
+    add byte [bp-011h], ah                    ; 00 66 ef
+    mov edx, strict dword 0ed6601cfh          ; 66 ba cf 01 66 ed
+    db  00fh, 0b7h, 0c8h
+    ; movzx cx, ax                              ; 0f b7 c8
+    mov edx, strict dword 0b86601ceh          ; 66 ba ce 01 66 b8
+    add ax, word [bx+si]                      ; 03 00
+    out DX, eax                               ; 66 ef
+    mov edx, strict dword 0ed6601cfh          ; 66 ba cf 01 66 ed
+    db  00fh, 0b7h, 0f0h
+    ; movzx si, ax                              ; 0f b7 f0
+    pop ax                                    ; 58
+    cmp si, strict byte 00004h                ; 83 fe 04
+    je short 046c7h                           ; 74 17
+    add si, strict byte 00007h                ; 83 c6 07
+    shr si, 003h                              ; c1 ee 03
+    imul cx, si                               ; 0f af ce
+    db  033h, 0d2h
+    ; xor dx, dx                                ; 33 d2
+    div cx                                    ; f7 f1
+    db  08bh, 0f8h
+    ; mov di, ax                                ; 8b f8
+    db  08bh, 0c2h
+    ; mov ax, dx                                ; 8b c2
+    db  033h, 0d2h
+    ; xor dx, dx                                ; 33 d2
+    div si                                    ; f7 f6
+    jmp short 046d3h                          ; eb 0c
+    shr cx, 1                                 ; d1 e9
+    db  033h, 0d2h
+    ; xor dx, dx                                ; 33 d2
+    div cx                                    ; f7 f1
+    db  08bh, 0f8h
+    ; mov di, ax                                ; 8b f8
+    db  08bh, 0c2h
+    ; mov ax, dx                                ; 8b c2
+    sal ax, 1                                 ; d1 e0
+    push edx                                  ; 66 52
+    push eax                                  ; 66 50
+    mov edx, strict dword 0b86601ceh          ; 66 ba ce 01 66 b8
+    or byte [bx+si], al                       ; 08 00
+    out DX, eax                               ; 66 ef
+    pop eax                                   ; 66 58
+    mov edx, strict dword 0ef6601cfh          ; 66 ba cf 01 66 ef
+    pop edx                                   ; 66 5a
+    db  066h, 08bh, 0c7h
+    ; mov eax, edi                              ; 66 8b c7
+    push edx                                  ; 66 52
+    push eax                                  ; 66 50
+    mov edx, strict dword 0b86601ceh          ; 66 ba ce 01 66 b8
+    or word [bx+si], ax                       ; 09 00
+    out DX, eax                               ; 66 ef
+    pop eax                                   ; 66 58
+    mov edx, strict dword 0ef6601cfh          ; 66 ba cf 01 66 ef
+    pop edx                                   ; 66 5a
+    pop di                                    ; 5f
+    pop si                                    ; 5e
+    pop dx                                    ; 5a
+    pop cx                                    ; 59
+    pop ax                                    ; 58
+    mov eax, strict dword 066c3004fh          ; 66 b8 4f 00 c3 66
+    mov ax, 0014fh                            ; b8 4f 01
+vesa_pm_end:                                 ; 0xc4714 LB 0x1
+    retn                                      ; c3
+
+  ; Padding 0xeb bytes at 0xc4715
+  times 235 db 0
+
+section _DATA progbits vstart=0x4800 align=1 ; size=0x36e0 class=DATA group=DGROUP
+_msg_vga_init:                               ; 0xc4800 LB 0x2e
+    db  'Oracle VM VirtualBox Version 4.2.0 VGA BIOS', 00dh, 00ah, 000h
+_vga_modes:                                  ; 0xc482e LB 0x80
+    db  000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+    db  002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+    db  004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
+    db  006h, 001h, 002h, 001h, 000h, 0b8h, 0ffh, 001h, 007h, 000h, 001h, 004h, 000h, 0b0h, 0ffh, 000h
+    db  00dh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h, 00eh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h
+    db  00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+    db  011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+    db  013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+_line_to_vpti:                               ; 0xc48ae LB 0x10
+    db  017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
+_dac_regs:                                   ; 0xc48be LB 0x4
+    dd  0ff3f3f3fh
+_video_param_table:                          ; 0xc48c2 LB 0x780
+    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, 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
+    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  028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+    db  0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+    db  0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+    db  015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+    db  028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+    db  0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+    db  0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+    db  015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+    db  050h, 018h, 008h, 000h, 010h, 001h, 001h, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+    db  0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+    db  0b9h, 0c2h, 0ffh, 000h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h
+    db  017h, 017h, 017h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00dh, 00fh, 0ffh
+    db  050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 066h, 05fh, 04fh, 050h, 082h, 055h, 081h
+    db  0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 00fh, 096h
+    db  0b9h, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 00fh, 0ffh
+    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, 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
+    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, 000h, 000h, 000h
+    db  028h, 018h, 008h, 000h, 020h, 009h, 00fh, 000h, 006h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+    db  0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+    db  0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+    db  015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+    db  050h, 018h, 008h, 000h, 040h, 001h, 00fh, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+    db  0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+    db  0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+    db  015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+    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, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+    db  0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+    db  0bah, 0e3h, 0ffh, 000h, 008h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 008h, 000h, 000h, 000h
+    db  018h, 000h, 000h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+    db  050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+    db  0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+    db  0bah, 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  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, 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  050h, 018h, 00eh, 000h, 010h, 000h, 003h, 000h, 002h, 067h, 05fh, 04fh, 050h, 082h, 055h, 081h
+    db  0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+    db  0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+    db  03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+    db  028h, 018h, 010h, 000h, 008h, 008h, 003h, 000h, 002h, 067h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+    db  0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+    db  0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+    db  03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+    db  050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 067h, 05fh, 04fh, 050h, 082h, 055h, 081h
+    db  0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+    db  0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+    db  03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+    db  050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 066h, 05fh, 04fh, 050h, 082h, 055h, 081h
+    db  0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 00fh, 096h
+    db  0b9h, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 00fh, 0ffh
+    db  050h, 01dh, 010h, 000h, 000h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+    db  00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+    db  004h, 0e3h, 0ffh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h
+    db  03fh, 000h, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+    db  050h, 01dh, 010h, 000h, 000h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+    db  00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+    db  004h, 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  028h, 018h, 008h, 000h, 000h, 001h, 00fh, 000h, 00eh, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+    db  0bfh, 01fh, 000h, 041h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 040h, 096h
+    db  0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 008h, 009h, 00ah, 00bh, 00ch
+    db  00dh, 00eh, 00fh, 041h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 040h, 005h, 00fh, 0ffh
+    db  064h, 024h, 010h, 000h, 000h, 001h, 00fh, 000h, 006h, 0e3h, 07fh, 063h, 063h, 083h, 06bh, 01bh
+    db  072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
+    db  073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+    db  03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+_palette0:                                   ; 0xc5042 LB 0xc0
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+    db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+    db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+    db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+    db  03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+    db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+    db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+    db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+    db  03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+_palette1:                                   ; 0xc5102 LB 0xc0
+    db  000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+    db  000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+    db  000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+    db  015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+    db  015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+    db  015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+    db  000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+    db  000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+    db  000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+    db  015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+    db  015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+    db  015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+_palette2:                                   ; 0xc51c2 LB 0xc0
+    db  000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+    db  000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
+    db  015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
+    db  000h, 015h, 000h, 000h, 015h, 02ah, 000h, 03fh, 000h, 000h, 03fh, 02ah, 02ah, 015h, 000h, 02ah
+    db  015h, 02ah, 02ah, 03fh, 000h, 02ah, 03fh, 02ah, 000h, 015h, 015h, 000h, 015h, 03fh, 000h, 03fh
+    db  015h, 000h, 03fh, 03fh, 02ah, 015h, 015h, 02ah, 015h, 03fh, 02ah, 03fh, 015h, 02ah, 03fh, 03fh
+    db  015h, 000h, 000h, 015h, 000h, 02ah, 015h, 02ah, 000h, 015h, 02ah, 02ah, 03fh, 000h, 000h, 03fh
+    db  000h, 02ah, 03fh, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 000h, 015h, 015h, 000h, 03fh, 015h, 02ah
+    db  015h, 015h, 02ah, 03fh, 03fh, 000h, 015h, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 03fh, 02ah, 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, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+_palette3:                                   ; 0xc5282 LB 0x300
+    db  000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+    db  000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+    db  015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+    db  000h, 000h, 000h, 005h, 005h, 005h, 008h, 008h, 008h, 00bh, 00bh, 00bh, 00eh, 00eh, 00eh, 011h
+    db  011h, 011h, 014h, 014h, 014h, 018h, 018h, 018h, 01ch, 01ch, 01ch, 020h, 020h, 020h, 024h, 024h
+    db  024h, 028h, 028h, 028h, 02dh, 02dh, 02dh, 032h, 032h, 032h, 038h, 038h, 038h, 03fh, 03fh, 03fh
+    db  000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 03fh, 03fh
+    db  000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh
+    db  000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h
+    db  000h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h
+    db  02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh
+    db  03fh, 037h, 01fh, 03fh, 03fh, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h
+    db  03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h
+    db  03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh, 01fh, 01fh, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh
+    db  02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh
+    db  02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03fh, 03fh
+    db  02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h
+    db  02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh
+    db  02dh, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh
+    db  03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h
+    db  01ch, 015h, 000h, 01ch, 01ch, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h
+    db  01ch, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h
+    db  01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch, 000h, 000h, 01ch, 000h, 000h, 01ch, 007h, 000h, 01ch
+    db  00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch
+    db  00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 01ch, 01ch
+    db  00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h
+    db  00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh
+    db  00eh, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh
+    db  018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h
+    db  01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h
+    db  01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah
+    db  01ch, 014h, 018h, 01ch, 014h, 016h, 01ch, 014h, 014h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch
+    db  018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h, 01ch
+    db  000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h, 010h, 010h
+    db  000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h
+    db  000h, 010h, 00ch, 000h, 010h, 010h, 000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h
+    db  000h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h
+    db  00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h
+    db  010h, 00eh, 008h, 010h, 010h, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah
+    db  010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh
+    db  010h, 008h, 00ch, 010h, 008h, 00ah, 010h, 008h, 008h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h
+    db  00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah, 010h
+    db  00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 010h, 010h
+    db  00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh
+    db  00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 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  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_static_functionality:                       ; 0xc5582 LB 0x10
+    db  0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
+_video_save_pointer_table:                   ; 0xc5592 LB 0x1c
+    db  0c2h, 048h, 000h, 0c0h, 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
+_vgafont8:                                   ; 0xc55ae LB 0x800
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
+    db  07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
+    db  010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
+    db  010h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 07ch, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h
+    db  0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h
+    db  0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 00fh, 007h, 00fh, 07dh, 0cch, 0cch, 0cch, 078h
+    db  03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 03fh, 033h, 03fh, 030h, 030h, 070h, 0f0h, 0e0h
+    db  07fh, 063h, 07fh, 063h, 063h, 067h, 0e6h, 0c0h, 099h, 05ah, 03ch, 0e7h, 0e7h, 03ch, 05ah, 099h
+    db  080h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 080h, 000h, 002h, 00eh, 03eh, 0feh, 03eh, 00eh, 002h, 000h
+    db  018h, 03ch, 07eh, 018h, 018h, 07eh, 03ch, 018h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 000h
+    db  07fh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 000h, 03eh, 063h, 038h, 06ch, 06ch, 038h, 0cch, 078h
+    db  000h, 000h, 000h, 000h, 07eh, 07eh, 07eh, 000h, 018h, 03ch, 07eh, 018h, 07eh, 03ch, 018h, 0ffh
+    db  018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h
+    db  000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h
+    db  000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h
+    db  000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 000h, 000h, 000h, 0ffh, 0ffh, 07eh, 03ch, 018h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 078h, 078h, 030h, 030h, 000h, 030h, 000h
+    db  06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 0feh, 06ch, 06ch, 000h
+    db  030h, 07ch, 0c0h, 078h, 00ch, 0f8h, 030h, 000h, 000h, 0c6h, 0cch, 018h, 030h, 066h, 0c6h, 000h
+    db  038h, 06ch, 038h, 076h, 0dch, 0cch, 076h, 000h, 060h, 060h, 0c0h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 030h, 060h, 060h, 060h, 030h, 018h, 000h, 060h, 030h, 018h, 018h, 018h, 030h, 060h, 000h
+    db  000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 030h, 030h, 060h, 000h, 000h, 000h, 0fch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 030h, 030h, 000h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h
+    db  07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 07ch, 000h, 030h, 070h, 030h, 030h, 030h, 030h, 0fch, 000h
+    db  078h, 0cch, 00ch, 038h, 060h, 0cch, 0fch, 000h, 078h, 0cch, 00ch, 038h, 00ch, 0cch, 078h, 000h
+    db  01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 01eh, 000h, 0fch, 0c0h, 0f8h, 00ch, 00ch, 0cch, 078h, 000h
+    db  038h, 060h, 0c0h, 0f8h, 0cch, 0cch, 078h, 000h, 0fch, 0cch, 00ch, 018h, 030h, 030h, 030h, 000h
+    db  078h, 0cch, 0cch, 078h, 0cch, 0cch, 078h, 000h, 078h, 0cch, 0cch, 07ch, 00ch, 018h, 070h, 000h
+    db  000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 060h
+    db  018h, 030h, 060h, 0c0h, 060h, 030h, 018h, 000h, 000h, 000h, 0fch, 000h, 000h, 0fch, 000h, 000h
+    db  060h, 030h, 018h, 00ch, 018h, 030h, 060h, 000h, 078h, 0cch, 00ch, 018h, 030h, 000h, 030h, 000h
+    db  07ch, 0c6h, 0deh, 0deh, 0deh, 0c0h, 078h, 000h, 030h, 078h, 0cch, 0cch, 0fch, 0cch, 0cch, 000h
+    db  0fch, 066h, 066h, 07ch, 066h, 066h, 0fch, 000h, 03ch, 066h, 0c0h, 0c0h, 0c0h, 066h, 03ch, 000h
+    db  0f8h, 06ch, 066h, 066h, 066h, 06ch, 0f8h, 000h, 0feh, 062h, 068h, 078h, 068h, 062h, 0feh, 000h
+    db  0feh, 062h, 068h, 078h, 068h, 060h, 0f0h, 000h, 03ch, 066h, 0c0h, 0c0h, 0ceh, 066h, 03eh, 000h
+    db  0cch, 0cch, 0cch, 0fch, 0cch, 0cch, 0cch, 000h, 078h, 030h, 030h, 030h, 030h, 030h, 078h, 000h
+    db  01eh, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 0e6h, 066h, 06ch, 078h, 06ch, 066h, 0e6h, 000h
+    db  0f0h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 000h
+    db  0c6h, 0e6h, 0f6h, 0deh, 0ceh, 0c6h, 0c6h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h
+    db  0fch, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 078h, 0cch, 0cch, 0cch, 0dch, 078h, 01ch, 000h
+    db  0fch, 066h, 066h, 07ch, 06ch, 066h, 0e6h, 000h, 078h, 0cch, 0e0h, 070h, 01ch, 0cch, 078h, 000h
+    db  0fch, 0b4h, 030h, 030h, 030h, 030h, 078h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 0fch, 000h
+    db  0cch, 0cch, 0cch, 0cch, 0cch, 078h, 030h, 000h, 0c6h, 0c6h, 0c6h, 0d6h, 0feh, 0eeh, 0c6h, 000h
+    db  0c6h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 030h, 078h, 000h
+    db  0feh, 0c6h, 08ch, 018h, 032h, 066h, 0feh, 000h, 078h, 060h, 060h, 060h, 060h, 060h, 078h, 000h
+    db  0c0h, 060h, 030h, 018h, 00ch, 006h, 002h, 000h, 078h, 018h, 018h, 018h, 018h, 018h, 078h, 000h
+    db  010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+    db  030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 076h, 000h
+    db  0e0h, 060h, 060h, 07ch, 066h, 066h, 0dch, 000h, 000h, 000h, 078h, 0cch, 0c0h, 0cch, 078h, 000h
+    db  01ch, 00ch, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+    db  038h, 06ch, 060h, 0f0h, 060h, 060h, 0f0h, 000h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 0f8h
+    db  0e0h, 060h, 06ch, 076h, 066h, 066h, 0e6h, 000h, 030h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+    db  00ch, 000h, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 0e0h, 060h, 066h, 06ch, 078h, 06ch, 0e6h, 000h
+    db  070h, 030h, 030h, 030h, 030h, 030h, 078h, 000h, 000h, 000h, 0cch, 0feh, 0feh, 0d6h, 0c6h, 000h
+    db  000h, 000h, 0f8h, 0cch, 0cch, 0cch, 0cch, 000h, 000h, 000h, 078h, 0cch, 0cch, 0cch, 078h, 000h
+    db  000h, 000h, 0dch, 066h, 066h, 07ch, 060h, 0f0h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 01eh
+    db  000h, 000h, 0dch, 076h, 066h, 060h, 0f0h, 000h, 000h, 000h, 07ch, 0c0h, 078h, 00ch, 0f8h, 000h
+    db  010h, 030h, 07ch, 030h, 030h, 034h, 018h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+    db  000h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 000h, 000h, 000h, 0c6h, 0d6h, 0feh, 0feh, 06ch, 000h
+    db  000h, 000h, 0c6h, 06ch, 038h, 06ch, 0c6h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 07ch, 00ch, 0f8h
+    db  000h, 000h, 0fch, 098h, 030h, 064h, 0fch, 000h, 01ch, 030h, 030h, 0e0h, 030h, 030h, 01ch, 000h
+    db  018h, 018h, 018h, 000h, 018h, 018h, 018h, 000h, 0e0h, 030h, 030h, 01ch, 030h, 030h, 0e0h, 000h
+    db  076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h
+    db  078h, 0cch, 0c0h, 0cch, 078h, 018h, 00ch, 078h, 000h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+    db  01ch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 07eh, 0c3h, 03ch, 006h, 03eh, 066h, 03fh, 000h
+    db  0cch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 0e0h, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h
+    db  030h, 030h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 000h, 000h, 078h, 0c0h, 0c0h, 078h, 00ch, 038h
+    db  07eh, 0c3h, 03ch, 066h, 07eh, 060h, 03ch, 000h, 0cch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+    db  0e0h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 0cch, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+    db  07ch, 0c6h, 038h, 018h, 018h, 018h, 03ch, 000h, 0e0h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+    db  0c6h, 038h, 06ch, 0c6h, 0feh, 0c6h, 0c6h, 000h, 030h, 030h, 000h, 078h, 0cch, 0fch, 0cch, 000h
+    db  01ch, 000h, 0fch, 060h, 078h, 060h, 0fch, 000h, 000h, 000h, 07fh, 00ch, 07fh, 0cch, 07fh, 000h
+    db  03eh, 06ch, 0cch, 0feh, 0cch, 0cch, 0ceh, 000h, 078h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h
+    db  000h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 0e0h, 000h, 078h, 0cch, 0cch, 078h, 000h
+    db  078h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h, 000h, 0e0h, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+    db  000h, 0cch, 000h, 0cch, 0cch, 07ch, 00ch, 0f8h, 0c3h, 018h, 03ch, 066h, 066h, 03ch, 018h, 000h
+    db  0cch, 000h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 018h, 018h, 07eh, 0c0h, 0c0h, 07eh, 018h, 018h
+    db  038h, 06ch, 064h, 0f0h, 060h, 0e6h, 0fch, 000h, 0cch, 0cch, 078h, 0fch, 030h, 0fch, 030h, 030h
+    db  0f8h, 0cch, 0cch, 0fah, 0c6h, 0cfh, 0c6h, 0c7h, 00eh, 01bh, 018h, 03ch, 018h, 018h, 0d8h, 070h
+    db  01ch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 038h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+    db  000h, 01ch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 01ch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+    db  000h, 0f8h, 000h, 0f8h, 0cch, 0cch, 0cch, 000h, 0fch, 000h, 0cch, 0ech, 0fch, 0dch, 0cch, 000h
+    db  03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h
+    db  030h, 000h, 030h, 060h, 0c0h, 0cch, 078h, 000h, 000h, 000h, 000h, 0fch, 0c0h, 0c0h, 000h, 000h
+    db  000h, 000h, 000h, 0fch, 00ch, 00ch, 000h, 000h, 0c3h, 0c6h, 0cch, 0deh, 033h, 066h, 0cch, 00fh
+    db  0c3h, 0c6h, 0cch, 0dbh, 037h, 06fh, 0cfh, 003h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 000h
+    db  000h, 033h, 066h, 0cch, 066h, 033h, 000h, 000h, 000h, 0cch, 066h, 033h, 066h, 0cch, 000h, 000h
+    db  022h, 088h, 022h, 088h, 022h, 088h, 022h, 088h, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+    db  0dbh, 077h, 0dbh, 0eeh, 0dbh, 077h, 0dbh, 0eeh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h
+    db  036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h
+    db  000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h
+    db  036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h
+    db  018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h
+    db  000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h
+    db  018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h
+    db  036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h
+    db  036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h
+    db  036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+    db  036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+    db  036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h
+    db  000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h
+    db  018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h
+    db  000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h
+    db  018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+    db  000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+    db  00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 076h, 0dch, 0c8h, 0dch, 076h, 000h, 000h, 078h, 0cch, 0f8h, 0cch, 0f8h, 0c0h, 0c0h
+    db  000h, 0fch, 0cch, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 000h
+    db  0fch, 0cch, 060h, 030h, 060h, 0cch, 0fch, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 070h, 000h
+    db  000h, 066h, 066h, 066h, 066h, 07ch, 060h, 0c0h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 000h
+    db  0fch, 030h, 078h, 0cch, 0cch, 078h, 030h, 0fch, 038h, 06ch, 0c6h, 0feh, 0c6h, 06ch, 038h, 000h
+    db  038h, 06ch, 0c6h, 0c6h, 06ch, 06ch, 0eeh, 000h, 01ch, 030h, 018h, 07ch, 0cch, 0cch, 078h, 000h
+    db  000h, 000h, 07eh, 0dbh, 0dbh, 07eh, 000h, 000h, 006h, 00ch, 07eh, 0dbh, 0dbh, 07eh, 060h, 0c0h
+    db  038h, 060h, 0c0h, 0f8h, 0c0h, 060h, 038h, 000h, 078h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 000h
+    db  000h, 0fch, 000h, 0fch, 000h, 0fch, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 0fch, 000h
+    db  060h, 030h, 018h, 030h, 060h, 000h, 0fch, 000h, 018h, 030h, 060h, 030h, 018h, 000h, 0fch, 000h
+    db  00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 070h
+    db  030h, 030h, 000h, 0fch, 000h, 030h, 030h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h
+    db  038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
+    db  078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_vgafont14:                                  ; 0xc5dae LB 0xe00
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
+    db  0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
+    db  0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch
+    db  038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h
+    db  03ch, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+    db  0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h
+    db  000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh
+    db  0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 01eh, 00eh, 01ah, 032h
+    db  078h, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 066h, 066h, 03ch, 018h
+    db  07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 070h, 0f0h
+    db  0e0h, 000h, 000h, 000h, 000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h
+    db  000h, 000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h
+    db  000h, 000h, 080h, 0c0h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h, 000h
+    db  002h, 006h, 00eh, 03eh, 0feh, 03eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch
+    db  07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h
+    db  066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh
+    db  01bh, 01bh, 01bh, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h
+    db  00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 000h
+    db  000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h
+    db  000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 060h
+    db  0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h
+    db  0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 028h, 06ch, 0feh, 06ch, 028h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 03ch, 03ch, 03ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 066h, 066h, 066h
+    db  024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch
+    db  06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h
+    db  086h, 0c6h, 07ch, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 066h
+    db  0c6h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 076h, 000h
+    db  000h, 000h, 000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h, 000h
+    db  030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+    db  07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+    db  000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+    db  018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h
+    db  006h, 00ch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 006h, 006h
+    db  03ch, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh
+    db  00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 0c6h
+    db  07ch, 000h, 000h, 000h, 000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 07ch, 000h
+    db  000h, 000h, 000h, 000h, 0feh, 0c6h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+    db  07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h, 000h, 000h, 018h
+    db  018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+    db  000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h
+    db  018h, 00ch, 006h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h
+    db  000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h, 000h
+    db  010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h, 0fch, 066h
+    db  066h, 066h, 07ch, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h
+    db  0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h
+    db  066h, 06ch, 0f8h, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 062h, 066h
+    db  0feh, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 0f0h, 000h
+    db  000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 066h, 03ah, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+    db  03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 01eh, 00ch
+    db  00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 0e6h, 066h, 06ch, 06ch
+    db  078h, 06ch, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h
+    db  062h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 0c6h
+    db  0c6h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h
+    db  000h, 000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h
+    db  000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h
+    db  07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h, 000h, 000h, 0fch, 066h
+    db  066h, 066h, 07ch, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 060h
+    db  038h, 00ch, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 07eh, 07eh, 05ah, 018h, 018h, 018h
+    db  018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h
+    db  07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 010h, 000h
+    db  000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 07ch, 06ch, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 0c6h, 06ch, 038h, 038h, 038h, 06ch, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+    db  066h, 066h, 066h, 066h, 03ch, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h
+    db  08ch, 018h, 030h, 060h, 0c2h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 03ch, 030h, 030h, 030h
+    db  030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch
+    db  00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch
+    db  03ch, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h
+    db  030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0e0h, 060h
+    db  060h, 078h, 06ch, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+    db  0c6h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch
+    db  0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h
+    db  07ch, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 0f0h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+    db  000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 006h, 006h
+    db  000h, 00eh, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h, 000h, 000h, 0e0h, 060h, 060h, 066h
+    db  06ch, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ech, 0feh, 0d6h, 0d6h, 0d6h
+    db  0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h
+    db  000h, 0dch, 076h, 066h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+    db  0c6h, 070h, 01ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h
+    db  030h, 036h, 01ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch
+    db  076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 03ch, 018h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 06ch, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 0feh, 0cch, 018h, 030h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 00eh, 018h, 018h, 018h
+    db  070h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h
+    db  018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h
+    db  070h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h, 000h
+    db  0cch, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h
+    db  000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 078h
+    db  00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 000h, 078h, 00ch, 07ch
+    db  0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch
+    db  076h, 000h, 000h, 000h, 000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h
+    db  000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+    db  0cch, 0cch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h
+    db  000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 000h, 038h
+    db  018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h
+    db  018h, 018h, 03ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h
+    db  03ch, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h
+    db  000h, 000h, 038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h, 000h, 000h
+    db  018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0cch, 076h, 036h, 07eh, 0d8h, 0d8h, 06eh, 000h, 000h, 000h, 000h, 000h, 03eh, 06ch
+    db  0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 07ch
+    db  0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h, 07ch, 0c6h, 0c6h
+    db  0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h
+    db  07ch, 000h, 000h, 000h, 000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+    db  000h, 000h, 000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h, 000h, 0c6h
+    db  0c6h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h
+    db  0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 018h, 03ch, 066h, 060h
+    db  060h, 066h, 03ch, 018h, 018h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h
+    db  060h, 0e6h, 0fch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 03ch, 018h, 07eh, 018h, 07eh, 018h
+    db  018h, 000h, 000h, 000h, 000h, 0f8h, 0cch, 0cch, 0f8h, 0c4h, 0cch, 0deh, 0cch, 0cch, 0c6h, 000h
+    db  000h, 000h, 000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h
+    db  000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch
+    db  018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h
+    db  000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h, 000h, 0cch
+    db  0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h
+    db  066h, 066h, 066h, 000h, 000h, 000h, 076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h
+    db  0c6h, 000h, 000h, 000h, 000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0feh, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h
+    db  030h, 060h, 0dch, 086h, 00ch, 018h, 03eh, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h, 030h, 066h
+    db  0ceh, 09eh, 03eh, 006h, 006h, 000h, 000h, 000h, 018h, 018h, 000h, 018h, 018h, 03ch, 03ch, 03ch
+    db  018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h
+    db  011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 055h, 0aah
+    db  055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 0ddh, 077h, 0ddh, 077h
+    db  0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h
+    db  000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 036h, 036h
+    db  036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0feh
+    db  006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh
+    db  000h, 000h, 000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h
+    db  000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+    db  000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h
+    db  018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+    db  000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h
+    db  000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h
+    db  018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h
+    db  018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+    db  0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+    db  0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+    db  0f0h, 0f0h, 0f0h, 0f0h, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+    db  00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0fch, 0c6h, 0c6h, 0fch, 0c0h, 0c0h, 040h, 000h, 000h, 000h, 0feh, 0c6h
+    db  0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 06ch
+    db  06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h
+    db  060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h
+    db  070h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h
+    db  000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h, 000h
+    db  038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch
+    db  0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h, 000h, 01eh, 030h, 018h, 00ch
+    db  03eh, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh
+    db  07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h
+    db  0c0h, 000h, 000h, 000h, 000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 030h, 01ch, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 030h, 018h
+    db  00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h, 060h
+    db  030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h
+    db  070h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h
+    db  000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 00ch
+    db  00ch, 0ech, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 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, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_vgafont16:                                  ; 0xc6bae LB 0x1000
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 06ch, 0feh, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+    db  000h, 000h, 000h, 000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h
+    db  0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+    db  000h, 000h, 01eh, 00eh, 01ah, 032h, 078h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 066h, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 030h, 070h, 0f0h, 0e0h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 080h, 0c0h, 0e0h, 0f0h, 0f8h, 0feh, 0f8h, 0f0h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h
+    db  000h, 002h, 006h, 00eh, 01eh, 03eh, 0feh, 03eh, 01eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 01bh, 01bh, 000h, 000h, 000h, 000h
+    db  000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 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, 018h, 03ch, 03ch, 03ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 066h, 066h, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 000h
+    db  018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h, 006h, 086h, 0c6h, 07ch, 018h, 018h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 060h, 0c6h, 086h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 030h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 006h, 006h, 03ch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0feh, 0c6h, 006h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 006h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 066h, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h, 066h, 066h, 06ch, 0f8h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 0c6h, 066h, 03ah, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 01eh, 00ch, 00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0e6h, 066h, 066h, 06ch, 078h, 078h, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h
+    db  000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 06ch, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 07ch, 0c6h, 0c6h, 060h, 038h, 00ch, 006h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0ffh, 0dbh, 099h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 066h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h, 018h, 03ch, 066h, 0c3h, 0c3h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h, 030h, 060h, 0c1h, 0c3h, 0ffh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 03ch, 000h, 000h, 000h, 000h
+    db  010h, 038h, 06ch, 0c6h, 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, 0ffh, 000h, 000h
+    db  030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0e0h, 060h, 060h, 078h, 06ch, 066h, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c0h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+    db  000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 006h, 006h, 000h, 00eh, 006h, 006h, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h
+    db  000h, 000h, 0e0h, 060h, 060h, 066h, 06ch, 078h, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0e6h, 0ffh, 0dbh, 0dbh, 0dbh, 0dbh, 0dbh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0dch, 076h, 066h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h, 030h, 030h, 036h, 01ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0c3h, 066h, 03ch, 018h, 03ch, 066h, 0c3h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0feh, 0cch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 00eh, 018h, 018h, 018h, 070h, 018h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h, 018h, 070h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h
+    db  000h, 000h, 0cch, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 00ch, 018h, 030h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 010h, 038h, 06ch, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0cch, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 03ch, 066h, 060h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h, 000h
+    db  000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 066h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 0c6h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+    db  038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+    db  018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 060h, 066h, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 03eh, 06ch, 0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h
+    db  000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c6h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h
+    db  000h, 0c6h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0e6h, 0fch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 066h, 0f3h, 000h, 000h, 000h, 000h
+    db  000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h, 000h
+    db  000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 00ch, 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 018h, 030h, 060h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 018h, 030h, 060h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+    db  076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+    db  000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c0h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 0feh, 006h, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh, 000h, 000h
+    db  000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h, 006h, 000h, 000h
+    db  000h, 000h, 018h, 018h, 000h, 018h, 018h, 018h, 03ch, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h
+    db  055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+    db  0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  000h, 000h, 000h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+    db  018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+    db  0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+    db  00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+    db  0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 078h, 0cch, 0cch, 0cch, 0d8h, 0cch, 0c6h, 0c6h, 0c6h, 0cch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 0feh, 0c6h, 0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 01eh, 030h, 018h, 00ch, 03eh, 066h, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh, 0dbh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h, 0c0h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 060h, 030h, 01ch, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h
+    db  000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+    db  018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 00fh, 00ch, 00ch, 00ch, 00ch, 00ch, 0ech, 06ch, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h
+    db  000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 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, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_vgafont14alt:                               ; 0xc7bae LB 0x12d
+    db  01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
+    db  000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
+    db  000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
+    db  000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 04dh, 000h, 000h, 0c3h
+    db  0e7h, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh
+    db  099h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h
+    db  0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h
+    db  0dbh, 0dbh, 0ffh, 066h, 066h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h
+    db  03ch, 066h, 0c3h, 0c3h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+    db  018h, 018h, 03ch, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h, 030h, 061h
+    db  0c3h, 0ffh, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h, 0ffh, 0dbh, 0dbh, 0dbh
+    db  0dbh, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+    db  000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h
+    db  000h, 000h, 091h, 000h, 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h
+    db  000h, 09bh, 000h, 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h
+    db  09dh, 000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 000h, 000h, 000h, 09eh
+    db  000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
+    db  000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
+    db  018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+_vgafont16alt:                               ; 0xc7cdb LB 0x145
+    db  01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
+    db  000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
+    db  000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
+    db  000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh, 099h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch
+    db  000h, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch
+    db  018h, 000h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh
+    db  066h, 066h, 000h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h, 018h, 03ch
+    db  066h, 0c3h, 0c3h, 000h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+    db  018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h
+    db  030h, 060h, 0c1h, 0c3h, 0ffh, 000h, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h
+    db  0ffh, 0dbh, 0dbh, 0dbh, 0dbh, 0dbh, 000h, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h
+    db  0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h
+    db  000h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h, 000h, 000h, 000h, 078h, 000h, 000h, 000h
+    db  000h, 000h, 0c3h, 066h, 03ch, 018h, 03ch, 066h, 0c3h, 000h, 000h, 000h, 000h, 091h, 000h, 000h
+    db  000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h, 000h, 000h, 09bh, 000h
+    db  018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 09dh
+    db  000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+    db  09eh, 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 066h, 0f3h, 000h, 000h, 000h
+    db  000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
+    db  000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
+    db  006h, 000h, 000h, 000h, 000h
+_vbebios_copyright:                          ; 0xc7e20 LB 0x15
+    db  'VirtualBox VESA BIOS', 000h
+_vbebios_vendor_name:                        ; 0xc7e35 LB 0x13
+    db  'Oracle Corporation', 000h
+_vbebios_product_name:                       ; 0xc7e48 LB 0x21
+    db  'Oracle VM VirtualBox VBE Adapter', 000h
+_vbebios_product_revision:                   ; 0xc7e69 LB 0x23
+    db  'Oracle VM VirtualBox Version 4.2.0', 000h
+_vbebios_info_string:                        ; 0xc7e8c LB 0x2b
+    db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
+_no_vbebios_info_string:                     ; 0xc7eb7 LB 0x29
+    db  'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
+
+section CONST progbits vstart=0x7ee0 align=1 ; size=0x0 class=DATA group=DGROUP
+
+section CONST2 progbits vstart=0x7ee0 align=1 ; size=0x0 class=DATA group=DGROUP
+
+  ; Padding 0x120 bytes at 0xc7ee0
+    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, 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
+    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, 0c1h
Index: /trunk/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum	(revision 43609)
@@ -0,0 +1,1 @@
+f5caf186e9b0a0621584ca2e590e789f *VBoxVgaBios.rom
Index: /trunk/src/VBox/Devices/Graphics/BIOS/inlines.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/inlines.h	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/inlines.h	(revision 43609)
@@ -0,0 +1,140 @@
+/** @file
+ * Inline routines for Watcom C.
+ */
+
+/*
+ * Copyright (C) 2010-2011 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+extern unsigned inp(unsigned port);
+extern unsigned outp(unsigned port, unsigned value);
+extern unsigned inpw(unsigned port);
+extern unsigned outpw(unsigned port, unsigned value);
+#pragma intrinsic(inp,outp,inpw,outpw)
+#define inb(p)      inp(p)
+#define outb(p, v)  outp(p, v)
+#define inw(p)      inpw(p)
+#define outw(p, v)  outpw(p, v)
+
+extern  uint8_t     read_byte(uint16_t seg, uint16_t offset);
+extern  uint16_t    read_word(uint16_t seg, uint16_t offset);
+extern  uint32_t    read_dword(uint16_t seg, uint16_t offset);
+extern  void        write_byte(uint16_t seg, uint16_t offset, uint8_t data);
+extern  void        write_word(uint16_t seg, uint16_t offset, uint16_t data);
+extern  void        write_dword(uint16_t seg, uint16_t offset, uint32_t data);
+
+void int_enable(void);
+#pragma aux int_enable = "sti" modify exact [] nomemory;
+
+void int_disable(void);
+#pragma aux int_disable = "cli" modify exact [] nomemory;
+
+uint16_t int_query(void);
+#pragma aux int_query =     \
+    "pushf"                 \
+    "pop    ax"             \
+    value [ax] modify exact [ax] nomemory;
+
+void int_restore(uint16_t old_flags);
+#pragma aux int_restore =   \
+    "push   ax"             \
+    "popf"                  \
+    parm [ax] modify exact [] nomemory;
+
+void halt(void);
+#pragma aux halt = "hlt" modify exact [] nomemory;
+
+void halt_forever(void);
+#pragma aux halt_forever =  \
+    "forever:"              \
+    "hlt"                   \
+    "jmp forever"           \
+    modify exact [] nomemory aborts;
+
+void rep_movsw(void __far *d, void __far *s, int nwords);
+#pragma aux rep_movsw =     \
+    "push   ds"             \
+    "mov    ds, dx"         \
+    "rep    movsw"          \
+    "pop    ds"             \
+    parm [es di] [dx si] [cx];
+
+char __far *rep_insb(char __far *buffer, unsigned nbytes, unsigned port);
+#pragma aux rep_insb = ".286" "rep insb" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
+
+char __far *rep_insw(char __far *buffer, unsigned nwords, unsigned port);
+#pragma aux rep_insw = ".286" "rep insw" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
+
+char __far *rep_insd(char __far *buffer, unsigned ndwords, unsigned port);
+#pragma aux rep_insd = ".386" "rep insd" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
+
+char __far *rep_outsb(char __far *buffer, unsigned nbytes, unsigned port);
+#pragma aux rep_outsb = ".286" "rep outs dx,byte ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
+
+char __far *rep_outsw(char __far *buffer, unsigned nwords, unsigned port);
+#pragma aux rep_outsw = ".286" "rep outs dx,word ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
+
+char __far *rep_outsd(char __far *buffer, unsigned ndwords, unsigned port);
+#pragma aux rep_outsd = ".386" "rep outs dx,dword ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
+
+uint16_t __far swap_16(uint16_t val);
+#pragma aux swap_16 = "xchg ah,al" parm [ax] value [ax] modify exact [ax] nomemory;
+
+uint32_t __far swap_32(uint32_t val);
+#pragma aux swap_32 =   \
+    "xchg   ah, al"     \
+    "xchg   dh, dl"     \
+    "xchg   ax, dx"     \
+    parm [dx ax] value [dx ax] modify exact [dx ax] nomemory;
+
+//@todo: Do CLD elsewhere!
+extern void memsetb(uint16_t seg, uint16_t offset, uint16_t value, uint16_t count);
+#pragma aux memsetb =   \
+    "cld"               \
+    "jcxz no_copy"      \
+    "rep stosb"         \
+    "no_copy:"          \
+    parm [es] [di] [ax] [cx];
+
+//@todo: Do CLD elsewhere!
+extern void memsetw(uint16_t seg, uint16_t offset, uint16_t value, uint16_t count);
+#pragma aux memsetw =   \
+    "cld"               \
+    "jcxz no_copy"      \
+    "rep stosw"         \
+    "no_copy:"          \
+    parm [es] [di] [ax] [cx];
+
+//@todo: Do CLD elsewhere!
+extern void memcpyb(uint16_t dseg, uint16_t doffset, uint16_t sseg, uint16_t soffset, uint16_t count);
+#pragma aux memcpyb =   \
+    "cld"               \
+    "jcxz   no_copy"    \
+    "push   ds"         \
+    "mov    ds, dx"     \
+    "rep    movsb"      \
+    "pop    ds"         \
+    "no_copy:"          \
+    parm [es] [di] [dx] [si] [cx];
+
+//@todo: Do CLD elsewhere!
+extern void memcpyw(uint16_t dseg, uint16_t doffset, uint16_t sseg, uint16_t soffset, uint16_t count);
+#pragma aux memcpyw =   \
+    "cld"               \
+    "jcxz   no_copy"    \
+    "push   ds"         \
+    "mov    ds, dx"     \
+    "rep    movsw"      \
+    "pop    ds"         \
+    "no_copy:"          \
+    parm [es] [di] [dx] [si] [cx];
+
Index: /trunk/src/VBox/Devices/Graphics/BIOS/makefile
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/makefile	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/makefile	(revision 43609)
@@ -0,0 +1,47 @@
+# Compiler flags:
+#  -q   no banner
+#  -wx  max warnings
+#  -0   generate 8086 code
+#  -ms  force small model (default)
+#  -s   remove runtime stack checks (required)
+#  -os  optimize for size
+#  -zu  assume that SS != DS (required)
+#  -zl  do not emit default library information
+#
+!ifdef __UNIX__
+Q=\"
+!else
+Q="
+!endif
+CFLAGS = -q -3 -wx -zu -zl -s -oas -d1 -ms
+DEFS   = -DVBOX -DVBE -DVBOX_VERSION_STRING=$(Q)0.9.90$(Q) -DVBOX_VENDOR=$(Q)Oracle_Corporation$(Q) -DVBOX_PRODUCT=$(Q)Oracle_VM_VirtualBox$(Q)
+#DEFS   = -DVBOX -DVBOX_VERSION_STRING=$(Q)0.9$(Q) -DVBOX_VENDOR=$(Q)Oracle$(Q) -DVBOX_PRODUCT=$(Q)VirtualBox$(Q)
+
+AFLAGS = -q -0 -wx
+
+INCLS  = -I$(Q)../../../../../include$(Q)
+
+.c.obj : .autodepend
+	wcc -fo=.obj $(CFLAGS) $(DEFS) $(INCLS) $<
+
+.asm.obj : .autodepend
+	wasm -fo=.obj $(AFLAGS) $(DEFS) $<
+
+OBJS = 	vgarom.obj vberom.obj vgabios.obj vbe.obj
+
+vgabios.rom : vgabios.bin
+	biossums $< $@
+
+vgabios.bin : $(OBJS) $(__MAKEFILES__)
+	wlink name $@ system dos debug all option quiet &
+	 option nofarcalls, map, verbose, statics, symfile &
+	 output raw offset=0xC0000 order &
+	 clname CODE segment VGAROM segaddr=0xC000 &
+	 segment _TEXT segaddr=0xC000 offset=0xA00 &
+	 segment VBE32 segaddr=0xC000 offset=0x4600 &
+	 clname DATA segment _DATA segaddr=0xC000 offset=0x4800 &
+	 file { $(OBJS) } disable 1014, 1023, 2120
+
+clean : .symbolic
+	@rm -f *.obj *.err
+	@rm -f vgabios.bin vgabios.rom vgabios.map vgabios.sym
Index: /trunk/src/VBox/Devices/Graphics/BIOS/tests/testbios.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/tests/testbios.c	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/tests/testbios.c	(revision 43609)
@@ -0,0 +1,353 @@
+/*
+   This is a little turbo C program that executes
+   several int10, and let you inspect the content
+   of the vgabios area
+
+   It is used to test the behavior of the vgabios
+*/
+
+#include <stdio.h>
+#include <dos.h>
+#include <conio.h>
+
+
+typedef unsigned char  Bit8u;
+typedef unsigned short Bit16u;
+
+typedef struct
+{Bit8u initial;
+ Bit8u current;
+ Bit16u nbcols;
+ Bit16u regen;
+ Bit16u start;
+ Bit16u curpos[8];
+ Bit8u curtyp;
+ Bit8u curpage;
+ Bit16u crtc;
+ Bit16u msr;
+ Bit16u cgapal;
+ Bit8u nbrows;
+ Bit16u cheight;
+ Bit8u ctl;
+ Bit8u switches;
+ Bit8u modeset;
+ Bit8u dcc;
+ Bit16u vsseg;
+ Bit16u vsoffset;
+} BIOSAREA;
+
+void int10ax0003(struct REGPACK *regs)
+{
+ regs->r_ax=0x0003;
+ intr(0x10,regs);
+}
+
+void int10ax02(struct REGPACK *regs)
+{
+ regs->r_ax=0x0200;
+ regs->r_bx=0x0000;
+ regs->r_dx=0x1710;
+ intr(0x10,regs);
+ printf("We are now at 24/17");
+}
+
+void int10ax03(struct REGPACK *regs)
+{
+ regs->r_ax=0x0300;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+ printf("\nCursor is ax%04x cx%04x dx%04x\n",regs->r_ax,regs->r_cx,regs->r_dx);
+}
+
+void int10ax0501(struct REGPACK *regs)
+{
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x0e61;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+ printf("We are now on page 2");
+}
+
+void int10ax0602(struct REGPACK *regs)
+{
+ regs->r_ax=0x0602;
+ regs->r_bx=0x0700;
+ regs->r_cx=0x0101;
+ regs->r_dx=0x0a0a;
+ intr(0x10,regs);
+ printf("Scrolled 2 up");
+}
+
+void int10ax0702(struct REGPACK *regs)
+{
+ regs->r_ax=0x0702;
+ regs->r_bx=0x0700;
+ regs->r_cx=0x0101;
+ regs->r_dx=0x0a0a;
+ intr(0x10,regs);
+ printf("Scrolled 2 down");
+}
+
+void int10ax08(struct REGPACK *regs)
+{
+ regs->r_ax=0x0800;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+}
+
+void int10ax09(struct REGPACK *regs)
+{
+ char attr;
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ for(attr=0;attr<16;attr++)
+  {printf("%02x ",attr);
+   regs->r_ax=0x0961+attr;
+   regs->r_bx=0x0100+attr;
+   regs->r_cx=0x0016;
+   intr(0x10,regs);
+   printf("\n");
+  }
+}
+
+void int10ax0a(struct REGPACK *regs)
+{
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x0a62;
+ regs->r_bx=0x0101;
+ regs->r_cx=0x0016;
+ intr(0x10,regs);
+}
+
+void int10ax0f(struct REGPACK *regs)
+{
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x0f00;
+ intr(0x10,regs);
+}
+
+void int10ax1b(struct REGPACK *regs)
+{unsigned char table[64];
+ unsigned char far *ptable;
+ int  i;
+
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x1b00;
+ regs->r_bx=0x0000;
+ ptable=&table;
+ regs->r_es=FP_SEG(ptable);
+ regs->r_di=FP_OFF(ptable);
+ printf("Read state info in %04x:%04x\n",regs->r_es,regs->r_di);
+ intr(0x10,regs);
+
+ for(i=0;i<64;i++)
+  {if(i%16==0)printf("\n%02x ",i);
+   printf("%02x ",table[i]);
+  }
+ printf("\n");
+}
+
+static unsigned char var[64];
+
+void int10ax13(struct REGPACK *regs)
+{unsigned char far *pvar;
+
+ pvar=&var;
+
+ regs->r_ax=0x1300;
+ regs->r_bx=0x000b;
+ regs->r_dx=0x1010;
+ regs->r_cx=0x0002;
+ regs->r_es=FP_SEG(pvar);
+ regs->r_bp=FP_OFF(pvar);
+ pokeb(regs->r_es,regs->r_bp,'t');
+ pokeb(regs->r_es,regs->r_bp+1,'b');
+ printf("Writing from %04x:%04x\n",regs->r_es,regs->r_bp);
+ intr(0x10,regs);
+
+}
+
+void switch_50(struct REGPACK *regs)
+{
+ regs->r_ax=0x1202;
+ regs->r_bx=0x3000;
+ intr(0x10,regs);
+ regs->r_ax=0x0003;
+ intr(0x10,regs);
+ regs->r_ax=0x1112;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+}
+
+char exec_function(struct REGPACK *regs)
+{char c;
+
+ printf("--- Functions --------------------\n");
+ printf("a. int10 ax0003\t");
+ printf("b. int10 ax02\t");
+ printf("c. int10 ax03\t");
+ printf("d. int10 ax0501\n");
+ printf("e. int10 ax0602\t");
+ printf("f. int10 ax0702\t");
+ printf("g. int10 ax08\t");
+ printf("h. int10 ax09\t");
+ printf("i. int10 ax0a\n");
+ printf("j. int10 ax0f\t");
+ printf("k. int10 ax1b\t");
+ printf("l. int10 ax13\n");
+ printf("q. Quit\t");
+ printf("r. switch to 50 lines\n");
+ c=getche();
+
+ switch(c)
+  {case 'a':
+    int10ax0003(regs);
+    break;
+   case 'b':
+    int10ax02(regs);
+    break;
+   case 'c':
+    int10ax03(regs);
+    break;
+   case 'd':
+    int10ax0501(regs);
+    break;
+   case 'e':
+    int10ax0602(regs);
+    break;
+   case 'f':
+    int10ax0702(regs);
+    break;
+   case 'g':
+    int10ax08(regs);
+    break;
+   case 'h':
+    int10ax09(regs);
+    break;
+   case 'i':
+    int10ax0a(regs);
+    break;
+   case 'j':
+    int10ax0f(regs);
+    break;
+   case 'k':
+    int10ax1b(regs);
+    break;
+   case 'l':
+    int10ax13(regs);
+    break;
+   case 'q':
+    break;
+   case 'r':
+    switch_50(regs);
+    break;
+   default:
+    printf("No such function!\n");
+  }
+
+ if(c=='q')return 1;
+ while(kbhit()==0);
+ c=getch();
+
+ return 0;
+}
+
+void read_bios_area(BIOSAREA *biosarea)
+{
+ biosarea->initial=peekb(0x40,0x10);
+ biosarea->current=peekb(0x40,0x49);
+ biosarea->nbcols=peek(0x40,0x4a);
+ biosarea->regen=peek(0x40,0x4c);
+ biosarea->start=peek(0x40,0x4e);
+ biosarea->curpos[0]=peek(0x40,0x50);
+ biosarea->curpos[1]=peek(0x40,0x52);
+ biosarea->curpos[2]=peek(0x40,0x54);
+ biosarea->curpos[3]=peek(0x40,0x56);
+ biosarea->curpos[4]=peek(0x40,0x58);
+ biosarea->curpos[5]=peek(0x40,0x5a);
+ biosarea->curpos[6]=peek(0x40,0x5c);
+ biosarea->curpos[7]=peek(0x40,0x5e);
+ biosarea->curtyp=peek(0x40,0x60);
+ biosarea->curpage=peekb(0x40,0x62);
+ biosarea->crtc=peek(0x40,0x63);
+ biosarea->msr=peekb(0x40,0x65);
+ biosarea->cgapal=peekb(0x40,0x66);
+ biosarea->nbrows=peekb(0x40,0x84);
+ biosarea->cheight=peek(0x40,0x85);
+ biosarea->ctl=peekb(0x40,0x87);
+ biosarea->switches=peekb(0x40,0x88);
+ biosarea->modeset=peekb(0x40,0x89);
+ biosarea->dcc=peekb(0x40,0x8a);
+ biosarea->vsseg=peek(0x40,0xa8);
+ biosarea->vsoffset=peek(0x40,0xaa);
+}
+
+void show_bios_area(BIOSAREA *biosarea)
+{
+ printf("--- BIOS area --------------------\n");
+ printf("initial : %02x\t",biosarea->initial);
+ printf("current : %02x\t",biosarea->current);
+ printf("nbcols  : %04x\t",biosarea->nbcols);
+ printf("regen   : %04x\t",biosarea->regen);
+ printf("start   : %04x\n",biosarea->start);
+ printf("curpos  : %04x %04x %04x %04x %04x %04x %04x %04x\n",
+   biosarea->curpos[0], biosarea->curpos[1], biosarea->curpos[2], biosarea->curpos[3],
+   biosarea->curpos[4], biosarea->curpos[5], biosarea->curpos[6], biosarea->curpos[7]);
+ printf("curtyp  : %04x\t",biosarea->curtyp);
+ printf("curpage : %02x\t",biosarea->curpage);
+ printf("crtc    : %04x\t",biosarea->crtc);
+ printf("msr     : %04x\n",biosarea->msr);
+ printf("cgapal  : %04x\t",biosarea->cgapal);
+ printf("nbrows-1: %02x\t",biosarea->nbrows);
+ printf("cheight : %04x\t",biosarea->cheight);
+ printf("ctl     : %02x\n",biosarea->ctl);
+ printf("switches: %02x\t",biosarea->switches);
+ printf("modeset : %02x\t",biosarea->modeset);
+ printf("dcc     : %02x\t",biosarea->dcc);
+ printf("vs      : %04x:%04x\n",biosarea->vsseg,biosarea->vsoffset);
+}
+
+void show_regs(struct REGPACK *regs)
+{
+ printf("--- Registers --------------------\n");
+ printf("ax %04x\t",regs->r_ax);
+ printf("bx %04x\t",regs->r_bx);
+ printf("cx %04x\t",regs->r_cx);
+ printf("dx %04x\t",regs->r_dx);
+ printf("ds %04x\t",regs->r_ds);
+ printf("si %04x\t",regs->r_si);
+ printf("es %04x\t",regs->r_es);
+ printf("di %04x\n",regs->r_di);
+}
+
+void reset_videomode()
+{
+ struct REGPACK regs;
+
+ regs.r_ax=0x0003;
+ intr(0x10,&regs);
+}
+
+void main()
+{
+
+ BIOSAREA biosarea;
+ struct REGPACK regs;
+
+ directvideo=0;
+
+ while(1)
+  {
+   read_bios_area(&biosarea);
+
+   reset_videomode();
+   show_bios_area(&biosarea);
+   show_regs(&regs);
+
+   if(exec_function(&regs)!=0)break;
+  }
+}
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vbe.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vbe.c	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vbe.c	(revision 43609)
@@ -0,0 +1,692 @@
+// ============================================================================================
+//
+//  Copyright (C) 2002 Jeroen Janssen
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2 of the License, or (at your option) any later version.
+//
+//  This library 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
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// ============================================================================================
+//
+//  This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+//  You can NOT drive any physical vga card with it.
+//
+// ============================================================================================
+//
+//  This VBE Bios is based on information taken from :
+//   - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+//
+// ============================================================================================
+
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+// Use VBE new dynamic mode list.  Note that without this option, no
+// checks are currently done to make sure that modes fit into the
+// framebuffer!
+#define VBE_NEW_DYN_LIST
+
+#include <inttypes.h>
+#include <stddef.h>
+#include "vbe.h"
+#include "vgadefs.h"
+#include "inlines.h"
+
+// disable VESA/VBE2 check in vbe info
+//#define VBE2_NO_VESA_CHECK
+
+// use bytewise i/o (Longhorn beta issue, not in released Vista)
+//#define VBE_BYTEWISE_IO
+
+#ifdef VBE_BYTEWISE_IO
+    extern void do_out_dx_ax();
+    #pragma aux do_out_dx_ax "*";
+    extern void out_w(uint16_t port, uint16_t value);
+    #pragma aux out_w =     \
+        "call do_out_dx_ax" \
+        parm [dx] [ax] modify nomemory;
+    extern void do_in_ax_dx();
+    #pragma aux do_in_ax_dx "*";
+    extern uint16_t in_w(uint16_t port);
+    #pragma aux in_w =     \
+        "call do_in_ax_dx" \
+        parm [dx] value [ax] modify nomemory;
+#else
+    #define out_w       outw
+    #define in_w        inw
+#endif
+
+
+/* VESA signatures as integer constants. */
+#define SIG_VBE2    0x32454256  /* 'VBE2' */
+#define SIG_VESA    0x41534556  /* 'VESA' */
+
+
+/* Implemented in assembler. */
+extern void     __cdecl vga_compat_setup(void);
+extern void     dispi_set_enable(uint16_t enable);
+extern void     dispi_set_bank(uint16_t bank);
+extern uint16_t __cdecl dispi_get_max_bpp(void);
+extern void     __cdecl dispi_set_bank_farcall(void);
+
+// The current OEM Software Revision of this VBE Bios
+#define VBE_OEM_SOFTWARE_REV 0x0003
+
+// FIXME: 'merge' these (c) etc strings with the vgabios.c strings?
+char vbebios_copyright[]        = "VirtualBox VESA BIOS";
+char vbebios_vendor_name[]      = VBOX_VENDOR;
+char vbebios_product_name[]     = VBOX_PRODUCT " VBE Adapter";
+char vbebios_product_revision[] = VBOX_PRODUCT " Version " VBOX_VERSION_STRING;
+
+char vbebios_info_string[]    = "VirtualBox VBE Display Adapter enabled\r\n\r\n";
+char no_vbebios_info_string[] = "No VirtualBox VBE support available!\r\n\r\n";
+
+#ifdef VGA_DEBUG
+char msg_vbe_init[] = "VirtualBox Version " VBOX_VERSION_STRING " VBE Display Adapter\r\n";
+#endif
+
+static void dispi_set_xres(uint16_t xres)
+{
+#ifdef VGA_DEBUG
+    printf("vbe_set_xres: %04x\n", xres);
+#endif
+    out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);
+    out_w(VBE_DISPI_IOPORT_DATA, xres);
+}
+
+static void dispi_set_yres(uint16_t yres)
+{
+#ifdef VGA_DEBUG
+    printf("vbe_set_yres: %04x\n", yres);
+#endif
+    out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
+    out_w(VBE_DISPI_IOPORT_DATA, yres);
+}
+
+static void dispi_set_bpp(uint16_t bpp)
+{
+#ifdef VGA_DEBUG
+    printf("vbe_set_bpp: %02x\n", bpp);
+#endif
+    out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
+    out_w(VBE_DISPI_IOPORT_DATA, bpp);
+}
+
+uint16_t in_word(uint16_t port, uint16_t addr)
+{
+    outw(port, addr);
+    return inw(port);
+}
+
+#ifdef VBE_NEW_DYN_LIST
+uint8_t in_byte(uint16_t port, uint16_t addr)
+{
+    outw(port, addr);
+    return inb(port);
+}
+#endif
+
+/* Display "chip" identification helpers. */
+static uint16_t dispi_get_id(void)
+{
+    outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_ID);
+    return inw(VBE_DISPI_IOPORT_DATA);
+}
+
+static void dispi_set_id(uint16_t chip_id)
+{
+    outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_ID);
+    outw(VBE_DISPI_IOPORT_DATA, chip_id);
+}
+
+/* VBE Init - Initialise the VESA BIOS Extension (VBE) support
+ * This function does a sanity check on the host side display code interface.
+ */
+void vbe_init(void)
+{
+    dispi_set_id(VBE_DISPI_ID0);
+    if (dispi_get_id() == VBE_DISPI_ID0) {
+        /* VBE support was detected. */
+        write_byte(BIOSMEM_SEG, BIOSMEM_VBE_FLAG, 1);
+        dispi_set_id(VBE_DISPI_ID4);
+    }
+#ifdef DEBUG_VGA
+    printf(msg_vbe_init);
+#endif
+}
+
+/* Find the offset of the desired mode, given its number. */
+#ifdef VBE_NEW_DYN_LIST
+static uint16_t mode_info_find_mode(uint16_t mode, Boolean using_lfb)
+{
+    uint16_t    sig, vmode, attrs;
+    uint16_t    cur_info_ofs;   /* Current offset in mode list. */
+    
+    /* Read and check the VBE Extra Data signature. */
+    sig = in_word(VBE_EXTRA_PORT, 0);
+    if (sig != VBEHEADER_MAGIC) {
+#ifdef DEBUG_VGA
+        printf("Signature NOT found! %x\n", sig);
+#endif
+        return 0;
+    }
+    
+    cur_info_ofs = sizeof(VBEHeader);
+    
+    vmode = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, mode)/*&cur_info->mode*/);
+    while (vmode != VBE_VESA_MODE_END_OF_LIST)
+    {
+        attrs = in_word(VBE_EXTRA_PORT, /*&cur_info->info.ModeAttributes*/cur_info_ofs + offsetof(ModeInfoListItem, info.ModeAttributes) );
+        
+        if (vmode == mode)
+        {
+            if (!using_lfb)
+                return cur_info_ofs;
+            else if (attrs & VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE)
+                return cur_info_ofs;
+            else {
+                cur_info_ofs += sizeof(ModeInfoListItem);
+                vmode = in_word(VBE_EXTRA_PORT, /*&cur_info->mode*/cur_info_ofs + offsetof(ModeInfoListItem, mode));
+            }
+        } else {
+            cur_info_ofs += sizeof(ModeInfoListItem);
+            vmode = in_word(VBE_EXTRA_PORT, /*&cur_info->mode*/cur_info_ofs + offsetof(ModeInfoListItem, mode));
+        }
+    }
+    return 0;
+}
+#else
+static ModeInfoListItem* mode_info_find_mode(uint16_t mode, Boolean using_lfb)
+{
+    ModeInfoListItem    *cur_info = &mode_info_list;
+    
+    while (cur_info->mode != VBE_VESA_MODE_END_OF_LIST)
+    {
+        if (cur_info->mode == mode)
+        {
+            if (!using_lfb)
+                return cur_info;
+            else if (cur_info->info.ModeAttributes & VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE)
+                return cur_info;
+            else
+                cur_info++;
+        } else
+            cur_info++;
+    }
+    return 0;
+}
+#endif
+
+#ifndef VBOX
+; VBE Display Info - Display information on screen about the VBE
+
+vbe_display_info:
+  call _vbe_has_vbe_display
+  test ax, ax
+  jz   no_vbe_flag
+  mov  ax, #0xc000
+  mov  ds, ax
+  mov  si, #_vbebios_info_string
+  jmp  _display_string
+no_vbe_flag:
+  mov  ax, #0xc000
+  mov  ds, ax
+  mov  si, #_no_vbebios_info_string
+  jmp  _display_string
+#endif
+
+/** Function 00h - Return VBE Controller Information
+ *
+ * Input:
+ *              AX      = 4F00h
+ *              ES:DI   = Pointer to buffer in which to place VbeInfoBlock structure
+ *                        (VbeSignature should be VBE2 when VBE 2.0 information is desired and
+ *                        the info block is 512 bytes in size)
+ * Output:
+ *              AX      = VBE Return Status
+ *
+ */
+void vbe_biosfn_return_controller_information(uint16_t STACK_BASED *AX, uint16_t ES, uint16_t DI)
+{
+    uint16_t            status;
+    uint16_t            vbe2_info;
+    uint16_t            cur_mode = 0;
+    uint16_t            cur_ptr=34;
+#ifdef VBE_NEW_DYN_LIST
+    uint16_t            cur_info_ofs;
+    uint16_t            sig, vmode;
+#else
+    ModeInfoListItem    *cur_info = &mode_info_list;
+#endif
+    uint16_t            max_bpp = dispi_get_max_bpp();
+    VbeInfoBlock __far  *info_block;
+
+    info_block = ES :> (VbeInfoBlock *)DI;
+
+#ifdef VBE_NEW_DYN_LIST
+    /* Read VBE Extra Data signature */
+    sig = in_word(VBE_EXTRA_PORT, 0);
+    if (sig != VBEHEADER_MAGIC)
+    {
+        *AX = 0x0100;
+#ifdef DEBUG_VGA
+        printf("Signature NOT found\n");
+#endif
+        return;
+    }
+    cur_info_ofs = sizeof(VBEHeader);
+#endif
+    status = *AX;
+
+#ifdef VGA_DEBUG
+    printf("VBE vbe_biosfn_return_vbe_info ES%x DI%x AX%x\n",ES,DI,status);
+#endif
+
+    vbe2_info = 0;
+
+    /* Don't use a local copy of VbeInfoBlock on the stack; it's too big.
+     * The Ubuntu 8.04 64 bits splash screen emulator can't handle this.
+     */
+#ifdef VBE2_NO_VESA_CHECK
+#else  /* !VBE2_NO_VESA_CHECK */
+    // check for VBE2 signature
+    if (info_block->VbeSignature.Sig32 == SIG_VBE2 || info_block->VbeSignature.Sig32 == SIG_VESA)
+    {
+        vbe2_info = 1;
+#ifdef VGA_DEBUG
+        printf("VBE correct VESA/VBE2 signature found\n");
+#endif
+    }
+#endif /* !VBE2_NO_VESA_CHECK */
+
+    /* VBE Signature - the compiler will optimize this into something sane. */
+    info_block->VbeSignature.SigChr[0] = 'V';
+    info_block->VbeSignature.SigChr[1] = 'E';
+    info_block->VbeSignature.SigChr[2] = 'S';
+    info_block->VbeSignature.SigChr[3] = 'A';
+
+    /* VBE Version supported. */
+    info_block->VbeVersion = 0x0200;    /* Version 2.0. */
+
+    /* OEM String. */
+    info_block->OemString.Ptr = &vbebios_copyright;
+
+    /* Capabilities if this implementation. */
+    info_block->Capabilities[0] = VBE_CAPABILITY_8BIT_DAC;
+    info_block->Capabilities[1] = 0;
+    info_block->Capabilities[2] = 0;
+    info_block->Capabilities[3] = 0;
+
+    /* Video mode list pointer (dynamically generated). */
+    info_block->VideoModePtr_Seg = ES;
+    info_block->VideoModePtr_Off = DI + 34;
+
+    /* Total controller memory in 64K units. */
+    info_block->TotalMemory = in_word(VBE_EXTRA_PORT, 0xffff);
+
+    if (vbe2_info)
+    {
+        /* OEM information. */
+        info_block->OemSoftwareRev     = VBE_OEM_SOFTWARE_REV;
+        info_block->OemVendorName.Ptr  = &vbebios_vendor_name;
+        info_block->OemProductName.Ptr = &vbebios_product_name;
+        info_block->OemProductRev.Ptr  = &vbebios_product_revision;
+    }
+
+#ifdef VBE_NEW_DYN_LIST
+    do
+    {
+        uint8_t     data_b;
+
+        data_b = in_byte(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.BitsPerPixel) /*&cur_info->info.BitsPerPixel*/);
+        if (data_b <= max_bpp)
+        {
+            vmode = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, mode)/*&cur_info->mode*/);
+#ifdef VGA_DEBUG
+            printf("VBE found mode %x => %x\n", vmode, cur_mode);
+#endif
+            write_word(ES, DI + cur_ptr, vmode);
+            cur_mode++;
+            cur_ptr+=2;
+        }
+        cur_info_ofs += sizeof(ModeInfoListItem);
+        vmode = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, mode)/*&cur_info->mode*/);
+    } while (vmode != VBE_VESA_MODE_END_OF_LIST);
+
+    // Add vesa mode list terminator
+    write_word(ES, DI + cur_ptr, vmode);
+#else
+    do
+    {
+        if (cur_info->info.BitsPerPixel <= max_bpp) {
+#ifdef VGA_DEBUG
+            printf("VBE found mode %x => %x\n", cur_info->mode,cur_mode);
+#endif
+            write_word(ES, DI + cur_ptr, cur_info->mode);
+            cur_mode++;
+            cur_ptr += 2;
+        }
+        cur_info++;
+    } while (cur_info->mode != VBE_VESA_MODE_END_OF_LIST);
+
+    // Add vesa mode list terminator
+    write_word(ES, DI + cur_ptr, cur_info->mode);
+#endif // VBE_NEW_DYN_LIST
+    *AX = 0x004F;
+}
+
+/** Function 01h - Return VBE Mode Information
+ *
+ * Input:
+ *              AX      = 4F01h
+ *              CX      = Mode Number
+ *              ES:DI   = Pointer to buffer in which to place ModeInfoBlock structure
+ * Output:
+ *              AX      = VBE Return Status
+ *
+ */
+void vbe_biosfn_return_mode_information(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t ES, uint16_t DI)
+{
+    uint16_t            result = 0x0100;
+#ifdef VBE_NEW_DYN_LIST
+    uint16_t            cur_info_ofs;
+#else
+    ModeInfoListItem    *cur_info;
+#endif
+    Boolean             using_lfb;
+    uint8_t             win_attr;
+
+#ifdef VGA_DEBUG
+    printf("VBE vbe_biosfn_return_mode_information ES%x DI%x CX%x\n",ES,DI,CX);
+#endif
+
+    using_lfb = ((CX & VBE_MODE_LINEAR_FRAME_BUFFER) == VBE_MODE_LINEAR_FRAME_BUFFER);
+    CX = (CX & 0x1ff);
+
+#ifdef VBE_NEW_DYN_LIST
+    cur_info_ofs = mode_info_find_mode(CX, using_lfb);
+
+    if (cur_info_ofs) {
+        uint16_t    i;
+#else
+    cur_info = mode_info_find_mode(CX, using_lfb);
+
+    if (cur_info != 0) {
+#endif
+#ifdef VGA_DEBUG
+        printf("VBE found mode %x\n",CX);
+#endif
+        memsetb(ES, DI, 0, 256);    // The mode info size is fixed
+#ifdef VBE_NEW_DYN_LIST
+        for (i = 0; i < sizeof(ModeInfoBlockCompact); i++) {
+            uint8_t b;
+
+            b = in_byte(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info) + i/*(char *)(&(cur_info->info)) + i*/);
+            write_byte(ES, DI + i, b);
+        }
+#else
+        memcpyb(ES, DI, 0xc000, &(cur_info->info), sizeof(ModeInfoBlockCompact));
+#endif
+        win_attr = read_byte(ES, DI + offsetof(ModeInfoBlock, WinAAttributes));
+        if (win_attr & VBE_WINDOW_ATTRIBUTE_RELOCATABLE) {
+            write_word(ES, DI + offsetof(ModeInfoBlock, WinFuncPtr), (uint16_t)(dispi_set_bank_farcall));
+            // If BIOS not at 0xC000 -> boom
+            write_word(ES, DI + offsetof(ModeInfoBlock, WinFuncPtr) + 2, 0xC000);
+        }
+        // Update the LFB physical address which may change at runtime
+        out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_FB_BASE_HI);
+        write_word(ES, DI + offsetof(ModeInfoBlock, PhysBasePtr) + 2, in_w(VBE_DISPI_IOPORT_DATA));
+
+        result = 0x4f;
+    } else {
+#ifdef VGA_DEBUG
+        printf("VBE *NOT* found mode %x\n",CX);
+#endif
+        result = 0x100;
+    }
+
+    *AX = result;
+}
+
+/** Function 02h - Set VBE Mode
+ *
+ * Input:
+ *              AX      = 4F02h
+ *              BX      = Desired Mode to set
+ *              ES:DI   = Pointer to CRTCInfoBlock structure
+ * Output:
+ *              AX      = VBE Return Status
+ *
+ */
+void vbe_biosfn_set_mode(uint16_t STACK_BASED *AX, uint16_t BX, uint16_t ES, uint16_t DI)
+{
+    uint16_t            result;
+#ifdef VBE_NEW_DYN_LIST
+    uint16_t            cur_info_ofs;
+#else
+    ModeInfoListItem    *cur_info;
+#endif
+    Boolean             using_lfb;
+    uint8_t             no_clear;
+    uint8_t             lfb_flag;
+
+    using_lfb = ((BX & VBE_MODE_LINEAR_FRAME_BUFFER) == VBE_MODE_LINEAR_FRAME_BUFFER);
+    lfb_flag  = using_lfb ? VBE_DISPI_LFB_ENABLED : 0;
+    no_clear  = ((BX & VBE_MODE_PRESERVE_DISPLAY_MEMORY) == VBE_MODE_PRESERVE_DISPLAY_MEMORY) ? VBE_DISPI_NOCLEARMEM : 0;
+
+    BX = (BX & 0x1ff);
+
+    // check for non vesa mode
+    if (BX < VBE_MODE_VESA_DEFINED)
+    {
+        uint8_t mode;
+
+        dispi_set_enable(VBE_DISPI_DISABLED);
+        // call the vgabios in order to set the video mode
+        // this allows for going back to textmode with a VBE call (some applications expect that to work)
+        mode = (BX & 0xff);
+        biosfn_set_video_mode(mode);
+        result = 0x4f;
+        goto leave;
+    }
+
+#ifdef VBE_NEW_DYN_LIST
+    cur_info_ofs = mode_info_find_mode(BX, using_lfb);
+
+    if (cur_info_ofs != 0)
+    {
+        uint16_t    xres, yres;
+        uint8_t     bpp;
+
+        xres = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.XResolution) /*&cur_info->info.XResolution*/);
+        yres = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.YResolution) /*&cur_info->info.YResolution*/);
+        bpp  = in_byte(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.BitsPerPixel) /*&cur_info->info.BitsPerPixel*/);
+
+#ifdef VGA_DEBUG
+        printf("VBE found mode %x, setting:\n", BX);
+        printf("\txres%x yres%x bpp%x\n", xres, yres, bpp);
+#endif
+#else
+    cur_info = mode_info_find_mode(BX, using_lfb);
+
+    if (cur_info != 0)
+    {
+#ifdef VGA_DEBUG
+        printf("VBE found mode %x, setting:\n", BX);
+        printf("\txres%x yres%x bpp%x\n",
+                cur_info->info.XResolution,
+                cur_info->info.YResolution,
+                cur_info->info.BitsPerPixel);
+#endif
+#endif // VBE_NEW_DYN_LIST
+
+        // first disable current mode (when switching between vesa modi)
+        dispi_set_enable(VBE_DISPI_DISABLED);
+
+#ifdef VBE_NEW_DYN_LIST
+        if (bpp == 4)
+#else
+        if (cur_info->info.BitsPerPixel == 4)
+#endif
+        {
+            biosfn_set_video_mode(0x6a);
+        }
+
+#ifdef VBE_NEW_DYN_LIST
+        dispi_set_bpp(bpp);
+        dispi_set_xres(xres);
+        dispi_set_yres(yres);
+#else
+        dispi_set_bpp(cur_info->info.BitsPerPixel);
+        dispi_set_xres(cur_info->info.XResolution);
+        dispi_set_yres(cur_info->info.YResolution);
+#endif
+        dispi_set_bank(0);
+        dispi_set_enable(VBE_DISPI_ENABLED | no_clear | lfb_flag);
+        vga_compat_setup();
+
+        write_word(BIOSMEM_SEG,BIOSMEM_VBE_MODE,BX);
+        write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60 | no_clear));
+
+        result = 0x4f;
+    }
+    else
+    {
+#ifdef VGA_DEBUG
+        printf("VBE *NOT* found mode %x\n" , BX);
+#endif
+        result = 0x100;
+    }
+
+leave:
+    *AX = result;
+}
+
+uint16_t vbe_biosfn_read_video_state_size(void)
+{
+    return 9 * 2;
+}
+
+void vbe_biosfn_save_video_state(uint16_t ES, uint16_t BX)
+{
+    uint16_t    enable, i;
+
+    outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+    enable = inw(VBE_DISPI_IOPORT_DATA);
+    write_word(ES, BX, enable);
+    BX += 2;
+    if (!(enable & VBE_DISPI_ENABLED))
+        return;
+    for(i = VBE_DISPI_INDEX_XRES; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
+        if (i != VBE_DISPI_INDEX_ENABLE) {
+            outw(VBE_DISPI_IOPORT_INDEX, i);
+            write_word(ES, BX, inw(VBE_DISPI_IOPORT_DATA));
+            BX += 2;
+        }
+    }
+}
+
+
+void vbe_biosfn_restore_video_state(uint16_t ES, uint16_t BX)
+{
+    uint16_t    enable, i;
+
+    enable = read_word(ES, BX);
+    BX += 2;
+
+    if (!(enable & VBE_DISPI_ENABLED)) {
+        outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+        outw(VBE_DISPI_IOPORT_DATA, enable);
+    } else {
+        outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);
+        outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+        BX += 2;
+        outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
+        outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+        BX += 2;
+        outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
+        outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+        BX += 2;
+        outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+        outw(VBE_DISPI_IOPORT_DATA, enable);
+
+        for(i = VBE_DISPI_INDEX_BANK; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
+            outw(VBE_DISPI_IOPORT_INDEX, i);
+            outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+            BX += 2;
+        }
+    }
+}
+
+/** Function 04h - Save/Restore State
+ *
+ * Input:
+ *              AX      = 4F04h
+ *              DL      = 00h Return Save/Restore State buffer size
+ *                        01h Save State
+ *                        02h Restore State
+ *              CX      = Requested states
+ *              ES:BX   = Pointer to buffer (if DL <> 00h)
+ * Output:
+ *              AX      = VBE Return Status
+ *              BX      = Number of 64-byte blocks to hold the state buffer (if DL=00h)
+ *
+ */
+void vbe_biosfn_save_restore_state(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t DX, 
+                                   uint16_t ES, uint16_t STACK_BASED *BX)
+{
+    uint16_t    result, val;
+
+    result = 0x004F;
+    switch(GET_DL()) {
+    case 0x00:
+        val = biosfn_read_video_state_size2(CX);
+#ifdef VGA_DEBUG
+        printf("VGA state size=%x\n", val);
+#endif
+        if (CX & 8)
+            val += vbe_biosfn_read_video_state_size();
+        *BX = (val + 63) / 64;
+        break;
+    case 0x01:
+        val = *BX;
+        val = biosfn_save_video_state(CX, ES, val);
+#ifdef VGA_DEBUG
+        printf("VGA save_state offset=%x\n", val);
+#endif
+        if (CX & 8)
+            vbe_biosfn_save_video_state(ES, val);
+        break;
+    case 0x02:
+        val = *BX;
+        val = biosfn_restore_video_state(CX, ES, val);
+#ifdef VGA_DEBUG
+        printf("VGA restore_state offset=%x\n", val);
+#endif
+        if (CX & 8)
+            vbe_biosfn_restore_video_state(ES, val);
+        break;
+    default:
+        // function failed
+        result = 0x100;
+        break;
+    }
+    *AX = result;
+}
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vbe.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vbe.h	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vbe.h	(revision 43609)
@@ -0,0 +1,300 @@
+#ifndef vbe_h_included
+#define vbe_h_included
+
+#include "vgabios.h"
+
+#include <VBox/Hardware/VBoxVideoVBE.h>
+
+// DISPI helper function
+//void dispi_set_enable(Boolean enable);
+
+/** VBE int10 API
+ *
+ *  See the function descriptions in vbe.c for more information
+ */
+
+/* Far pointer for VBE info block usage. */
+typedef union vbe_ptr {
+    uint32_t    Ptr32;
+    void __far  *Ptr;
+    union {
+        uint16_t    Off;
+        uint16_t    Seg;
+    };
+} vbe_ptr;
+
+// The official VBE Information Block
+typedef struct VbeInfoBlock
+{
+   union        {
+       uint8_t      SigChr[4];
+       uint32_t     Sig32;
+   }            VbeSignature;
+   uint16_t     VbeVersion;
+   vbe_ptr      OemString;
+   uint8_t      Capabilities[4];
+   uint16_t     VideoModePtr_Off;
+   uint16_t     VideoModePtr_Seg;
+   uint16_t     TotalMemory;
+   uint16_t     OemSoftwareRev;
+   vbe_ptr      OemVendorName;
+   vbe_ptr      OemProductName;
+   vbe_ptr      OemProductRev;
+   uint16_t     Reserved[111]; // used for dynamically generated mode list
+   uint8_t      OemData[256];
+} VbeInfoBlock;
+
+
+// This one is for compactly storing a static list of mode info blocks
+// this saves us 189 bytes per block
+typedef struct ModeInfoBlockCompact
+{
+// Mandatory information for all VBE revisions
+   uint16_t ModeAttributes;
+   uint8_t  WinAAttributes;
+   uint8_t  WinBAttributes;
+   uint16_t WinGranularity;
+   uint16_t WinSize;
+   uint16_t WinASegment;
+   uint16_t WinBSegment;
+   uint32_t WinFuncPtr;
+   uint16_t BytesPerScanLine;
+// Mandatory information for VBE 1.2 and above
+   uint16_t XResolution;
+   uint16_t YResolution;
+   uint8_t  XCharSize;
+   uint8_t  YCharSize;
+   uint8_t  NumberOfPlanes;
+   uint8_t  BitsPerPixel;
+   uint8_t  NumberOfBanks;
+   uint8_t  MemoryModel;
+   uint8_t  BankSize;
+   uint8_t  NumberOfImagePages;
+   uint8_t  Reserved_page;
+// Direct Color fields (required for direct/6 and YUV/7 memory models)
+   uint8_t  RedMaskSize;
+   uint8_t  RedFieldPosition;
+   uint8_t  GreenMaskSize;
+   uint8_t  GreenFieldPosition;
+   uint8_t  BlueMaskSize;
+   uint8_t  BlueFieldPosition;
+   uint8_t  RsvdMaskSize;
+   uint8_t  RsvdFieldPosition;
+   uint8_t  DirectColorModeInfo;
+// Mandatory information for VBE 2.0 and above
+   uint32_t PhysBasePtr;
+   uint32_t OffScreenMemOffset;
+   uint16_t OffScreenMemSize;
+// Mandatory information for VBE 3.0 and above
+   uint16_t LinBytesPerScanLine;
+   uint8_t  BnkNumberOfPages;
+   uint8_t  LinNumberOfPages;
+   uint8_t  LinRedMaskSize;
+   uint8_t  LinRedFieldPosition;
+   uint8_t  LinGreenMaskSize;
+   uint8_t  LinGreenFieldPosition;
+   uint8_t  LinBlueMaskSize;
+   uint8_t  LinBlueFieldPosition;
+   uint8_t  LinRsvdMaskSize;
+   uint8_t  LinRsvdFieldPosition;
+   uint32_t MaxPixelClock;
+//   uint8_t  Reserved[189]; // DO NOT PUT THIS IN HERE because of Compact Mode Info storage in bios
+} ModeInfoBlockCompact;
+
+typedef struct ModeInfoBlock
+{
+// Mandatory information for all VBE revisions
+   uint16_t ModeAttributes;
+   uint8_t  WinAAttributes;
+   uint8_t  WinBAttributes;
+   uint16_t WinGranularity;
+   uint16_t WinSize;
+   uint16_t WinASegment;
+   uint16_t WinBSegment;
+   uint32_t WinFuncPtr;
+   uint16_t BytesPerScanLine;
+// Mandatory information for VBE 1.2 and above
+   uint16_t XResolution;
+   uint16_t YResolution;
+   uint8_t  XCharSize;
+   uint8_t  YCharSize;
+   uint8_t  NumberOfPlanes;
+   uint8_t  BitsPerPixel;
+   uint8_t  NumberOfBanks;
+   uint8_t  MemoryModel;
+   uint8_t  BankSize;
+   uint8_t  NumberOfImagePages;
+   uint8_t  Reserved_page;
+// Direct Color fields (required for direct/6 and YUV/7 memory models)
+   uint8_t  RedMaskSize;
+   uint8_t  RedFieldPosition;
+   uint8_t  GreenMaskSize;
+   uint8_t  GreenFieldPosition;
+   uint8_t  BlueMaskSize;
+   uint8_t  BlueFieldPosition;
+   uint8_t  RsvdMaskSize;
+   uint8_t  RsvdFieldPosition;
+   uint8_t  DirectColorModeInfo;
+// Mandatory information for VBE 2.0 and above
+   uint32_t PhysBasePtr;
+   uint32_t OffScreenMemOffset;
+   uint16_t OffScreenMemSize;
+// Mandatory information for VBE 3.0 and above
+   uint16_t LinBytesPerScanLine;
+   uint8_t  BnkNumberOfPages;
+   uint8_t  LinNumberOfPages;
+   uint8_t  LinRedMaskSize;
+   uint8_t  LinRedFieldPosition;
+   uint8_t  LinGreenMaskSize;
+   uint8_t  LinGreenFieldPosition;
+   uint8_t  LinBlueMaskSize;
+   uint8_t  LinBlueFieldPosition;
+   uint8_t  LinRsvdMaskSize;
+   uint8_t  LinRsvdFieldPosition;
+   uint32_t MaxPixelClock;
+   uint8_t  Reserved[189];
+} ModeInfoBlock;
+
+typedef struct ModeInfoListItem
+{
+  uint16_t              mode;
+  ModeInfoBlockCompact  info;
+} ModeInfoListItem;
+
+// VBE Return Status Info
+// AL
+#define VBE_RETURN_STATUS_SUPPORTED                      0x4F
+#define VBE_RETURN_STATUS_UNSUPPORTED                    0x00
+// AH
+#define VBE_RETURN_STATUS_SUCCESSFULL                    0x00
+#define VBE_RETURN_STATUS_FAILED                         0x01
+#define VBE_RETURN_STATUS_NOT_SUPPORTED                  0x02
+#define VBE_RETURN_STATUS_INVALID                        0x03
+
+// VBE Mode Numbers
+
+#define VBE_MODE_VESA_DEFINED                            0x0100
+#define VBE_MODE_REFRESH_RATE_USE_CRTC                   0x0800
+#define VBE_MODE_LINEAR_FRAME_BUFFER                     0x4000
+#define VBE_MODE_PRESERVE_DISPLAY_MEMORY                 0x8000
+
+// VBE GFX Mode Number
+
+#define VBE_VESA_MODE_640X400X8                          0x100
+#define VBE_VESA_MODE_640X480X8                          0x101
+#define VBE_VESA_MODE_800X600X4                          0x102
+#define VBE_VESA_MODE_800X600X8                          0x103
+#define VBE_VESA_MODE_1024X768X4                         0x104
+#define VBE_VESA_MODE_1024X768X8                         0x105
+#define VBE_VESA_MODE_1280X1024X4                        0x106
+#define VBE_VESA_MODE_1280X1024X8                        0x107
+#define VBE_VESA_MODE_320X200X1555                       0x10D
+#define VBE_VESA_MODE_320X200X565                        0x10E
+#define VBE_VESA_MODE_320X200X888                        0x10F
+#define VBE_VESA_MODE_640X480X1555                       0x110
+#define VBE_VESA_MODE_640X480X565                        0x111
+#define VBE_VESA_MODE_640X480X888                        0x112
+#define VBE_VESA_MODE_800X600X1555                       0x113
+#define VBE_VESA_MODE_800X600X565                        0x114
+#define VBE_VESA_MODE_800X600X888                        0x115
+#define VBE_VESA_MODE_1024X768X1555                      0x116
+#define VBE_VESA_MODE_1024X768X565                       0x117
+#define VBE_VESA_MODE_1024X768X888                       0x118
+#define VBE_VESA_MODE_1280X1024X1555                     0x119
+#define VBE_VESA_MODE_1280X1024X565                      0x11A
+#define VBE_VESA_MODE_1280X1024X888                      0x11B
+#define VBE_VESA_MODE_1600X1200X8                        0x11C
+#define VBE_VESA_MODE_1600X1200X1555                     0x11D
+#define VBE_VESA_MODE_1600X1200X565                      0x11E
+#define VBE_VESA_MODE_1600X1200X888                      0x11F
+
+// BOCHS/PLEX86 'own' mode numbers
+#define VBE_OWN_MODE_320X200X8888                        0x140
+#define VBE_OWN_MODE_640X400X8888                        0x141
+#define VBE_OWN_MODE_640X480X8888                        0x142
+#define VBE_OWN_MODE_800X600X8888                        0x143
+#define VBE_OWN_MODE_1024X768X8888                       0x144
+#define VBE_OWN_MODE_1280X1024X8888                      0x145
+#define VBE_OWN_MODE_320X200X8                           0x146
+#define VBE_OWN_MODE_1600X1200X8888                      0x147
+#define VBE_OWN_MODE_1152X864X8                          0x148
+#define VBE_OWN_MODE_1152X864X1555                       0x149
+#define VBE_OWN_MODE_1152X864X565                        0x14a
+#define VBE_OWN_MODE_1152X864X888                        0x14b
+#define VBE_OWN_MODE_1152X864X8888                       0x14c
+
+#define VBE_VESA_MODE_END_OF_LIST                        0xFFFF
+
+// Capabilities
+
+#define VBE_CAPABILITY_8BIT_DAC                          0x0001
+#define VBE_CAPABILITY_NOT_VGA_COMPATIBLE                0x0002
+#define VBE_CAPABILITY_RAMDAC_USE_BLANK_BIT              0x0004
+#define VBE_CAPABILITY_STEREOSCOPIC_SUPPORT              0x0008
+#define VBE_CAPABILITY_STEREO_VIA_VESA_EVC               0x0010
+
+// Mode Attributes
+
+#define VBE_MODE_ATTRIBUTE_SUPPORTED                     0x0001
+#define VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE  0x0002
+#define VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT              0x0004
+#define VBE_MODE_ATTRIBUTE_COLOR_MODE                    0x0008
+#define VBE_MODE_ATTRIBUTE_GRAPHICS_MODE                 0x0010
+#define VBE_MODE_ATTRIBUTE_NOT_VGA_COMPATIBLE            0x0020
+#define VBE_MODE_ATTRIBUTE_NO_VGA_COMPATIBLE_WINDOW      0x0040
+#define VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE      0x0080
+#define VBE_MODE_ATTRIBUTE_DOUBLE_SCAN_MODE              0x0100
+#define VBE_MODE_ATTRIBUTE_INTERLACE_MODE                0x0200
+#define VBE_MODE_ATTRIBUTE_HARDWARE_TRIPLE_BUFFER        0x0400
+#define VBE_MODE_ATTRIBUTE_HARDWARE_STEREOSCOPIC_DISPLAY 0x0800
+#define VBE_MODE_ATTRIBUTE_DUAL_DISPLAY_START_ADDRESS    0x1000
+
+#define VBE_MODE_ATTTRIBUTE_LFB_ONLY                     ( VBE_MODE_ATTRIBUTE_NO_VGA_COMPATIBLE_WINDOW | VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE )
+
+// Window attributes
+
+#define VBE_WINDOW_ATTRIBUTE_RELOCATABLE                 0x01
+#define VBE_WINDOW_ATTRIBUTE_READABLE                    0x02
+#define VBE_WINDOW_ATTRIBUTE_WRITEABLE                   0x04
+
+// Memory model
+
+#define VBE_MEMORYMODEL_TEXT_MODE                        0x00
+#define VBE_MEMORYMODEL_CGA_GRAPHICS                     0x01
+#define VBE_MEMORYMODEL_HERCULES_GRAPHICS                0x02
+#define VBE_MEMORYMODEL_PLANAR                           0x03
+#define VBE_MEMORYMODEL_PACKED_PIXEL                     0x04
+#define VBE_MEMORYMODEL_NON_CHAIN_4_256                  0x05
+#define VBE_MEMORYMODEL_DIRECT_COLOR                     0x06
+#define VBE_MEMORYMODEL_YUV                              0x07
+
+// DirectColorModeInfo
+
+#define VBE_DIRECTCOLOR_COLOR_RAMP_PROGRAMMABLE          0x01
+#define VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE          0x02
+
+  /**
+   * VBE Bios Extra Data structure.
+   * @remark duplicated in DevVGA.h.
+   */
+  typedef struct VBEHeader
+  {
+      /** Signature (VBEHEADER_MAGIC). */
+      uint16_t      u16Signature;
+      /** Data size. */
+      uint16_t      cbData;
+  } VBEHeader;
+
+  /** The value of the VBEHEADER::u16Signature field.
+   * @remark duplicated in DevVGA.h. */
+  #define VBEHEADER_MAGIC      0x77CC
+
+  /** The extra port which is used to read the mode list.
+   * @remark duplicated in DevVGA.h. */
+  #define VBE_EXTRA_PORT       0x3b6
+
+  /** The extra port which is used for debug printf.
+   * @remark duplicated in DevVGA.h. */
+  #define VBE_PRINTF_PORT      0x3b7
+
+#endif
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vbe_display_api.txt
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vbe_display_api.txt	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vbe_display_api.txt	(revision 43609)
@@ -0,0 +1,237 @@
+VBE Display API
+-------------------------------------------------------------------------------------------------------------
+  This document is part of the Bochs/VBEBios documentation,
+  it specifies the bochs host <-> vbebios client communication.
+  
+  That means, the display code implementation and the vbebios code depend
+  very heavily on each other. As such, this documents needs be synchronised 
+  between bochs CVS and the vgabios CVS.
+  
+  This document does not describe how the VBEBios implements the VBE2/3 spec.
+  This document does not describe how the Bochs display code will display gfx based upon this spec.
+
+
+API History
+-----------                
+0xb0c0            supports the following VBE_DISPI_ interfaces (present in Bochs 1.4):
+                  VBE_DISPI_INDEX_ID
+                  VBE_DISPI_INDEX_XRES
+                  VBE_DISPI_INDEX_YRES
+                  VBE_DISPI_INDEX_BPP
+                  VBE_DISPI_INDEX_ENABLE
+                  VBE_DISPI_INDEX_BANK
+                  
+                  Bpp format supported is:
+                  VBE_DISPI_BPP_8
+
+0xb0c1            supports 0xb0c0 VBE_DISPI_ interfaces, additional interfaces (present in Bochs 2.0):
+                  VBE_DISPI_INDEX_VIRT_WIDTH
+                  VBE_DISPI_INDEX_VIRT_HEIGHT
+                  VBE_DISPI_INDEX_X_OFFSET
+                  VBE_DISPI_INDEX_Y_OFFSET
+
+0xb0c2            supports 0xb0c1 VBE_DISPI_ interfaces, interfaces updated for
+                  additional features (present in Bochs 2.1):
+                  VBE_DISPI_INDEX_BPP supports >8bpp color depth (value = bits)
+                  VBE_DISPI_INDEX_ENABLE supports new flags VBE_DISPI_NOCLEARMEM and VBE_DISPI_LFB_ENABLED
+                  VBE i/o registers changed from 0xFF80/81 to 0x01CE/CF
+
+0xb0c3            supports 0xb0c2 VBE_DISPI_ interfaces, interfaces updated for
+                  additional features:
+                  VBE_DISPI_INDEX_ENABLE supports new flags VBE_DISPI_GETCAPS and VBE_DISPI_8BIT_DAC
+
+0xb0c4            VBE video memory increased to 8 MB
+
+
+History
+-------
+  Version 0.6     2002 Nov 23  Jeroen Janssen
+                  - Added LFB support
+                  - Added Virt width, height and x,y offset
+                  
+  Version 0.5     2002 March 08   Jeroen Janssen
+                  - Added documentation about panic behaviour / current limits of the data values.
+                  - Changed BPP API (in order to include future (A)RGB formats)
+                  - Initial version (based upon extended display text of the vbe bochs display patch)
+
+
+Todo
+----
+  Version 0.6+    [random order]
+                  - Add lots of different (A)RGB formats
+  
+References
+----------
+  [VBE3]          VBE 3 Specification at 
+                  http://www.vesa.org/vbe3.pdf
+                  
+  [BOCHS]         Bochs Open Source IA-32 Emulator at 
+                  http://bochs.sourceforge.net
+                  
+  [VBEBIOS]       VBE Bios for Bochs at 
+                  http://savannah.gnu.org/projects/vgabios/
+                  
+  [Screenshots]   Screenshots of programs using the VBE Bios at 
+                  http://japj.org/projects/bochs_plex86/screenshots.html
+
+Abbreviations
+-------------
+  VBE             Vesa Bios Extension
+  DISPI           (Bochs) Display Interface
+  BPP             Bits Per Pixel
+  LFB             Linear Frame Buffer
+
+
+#defines
+--------
+vbetables-gen.c
+  #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
+
+vbe.h
+  #define VBE_DISPI_BANK_ADDRESS          0xA0000
+  #define VBE_DISPI_BANK_SIZE_KB          64
+  
+  #define VBE_DISPI_MAX_XRES              1024
+  #define VBE_DISPI_MAX_YRES              768
+  
+  #define VBE_DISPI_IOPORT_INDEX          0x01CE
+  #define VBE_DISPI_IOPORT_DATA           0x01CF
+  
+  #define VBE_DISPI_INDEX_ID              0x0
+  #define VBE_DISPI_INDEX_XRES            0x1
+  #define VBE_DISPI_INDEX_YRES            0x2
+  #define VBE_DISPI_INDEX_BPP             0x3
+  #define VBE_DISPI_INDEX_ENABLE          0x4
+  #define VBE_DISPI_INDEX_BANK            0x5
+  #define VBE_DISPI_INDEX_VIRT_WIDTH      0x6
+  #define VBE_DISPI_INDEX_VIRT_HEIGHT     0x7
+  #define VBE_DISPI_INDEX_X_OFFSET        0x8
+  #define VBE_DISPI_INDEX_Y_OFFSET        0x9
+  
+  #define VBE_DISPI_ID0                   0xB0C0
+  #define VBE_DISPI_ID1                   0xB0C1
+  #define VBE_DISPI_ID2                   0xB0C2
+  #define VBE_DISPI_ID3                   0xB0C3
+  #define VBE_DISPI_ID4                   0xB0C4
+  
+  #define VBE_DISPI_DISABLED              0x00
+  #define VBE_DISPI_ENABLED               0x01
+  #define VBE_DISPI_VBE_ENABLED           0x40
+  #define VBE_DISPI_NOCLEARMEM            0x80
+  
+  #define VBE_DISPI_LFB_PHYSICAL_ADDRESS  0xE0000000
+
+API
+---
+  The display api works by using a index (VBE_DISPI_IOPORT_INDEX) and 
+  data (VBE_DISPI_IOPORT_DATA) ioport. One writes the index of the parameter to the index port.
+  Next, the parameter value can be read or written.
+
+[0xb0c0]
+  * VBE_DISPI_INDEX_ID  : WORD {R,W}
+    This parameter can be used to detect the current display API (both bochs & vbebios).
+    The bios writes VBE_DISPI_ID0 to the dataport and reads it back again.
+    This way, the display code knows the vbebios 'ID' and the vbebios can check if the correct
+    display code is present.
+    As a result, a PANIC can be generated if an incompatible vbebios/display code combination is detected.
+    This panic can be generated from the bochs display code (NOT the bios, see Notes).
+    
+    Example values: VBE_DISPI_ID0
+        
+  * VBE_DISPI_INDEX_XRES : WORD {R,W}
+    This parameter can be used to read/write the vbe display X resolution (in pixels).
+    It's illegal to set the XRES when the VBE is enabled (display code should generate PANIC).
+    
+    If the value written exceeds VBE_DISPI_MAX_XRES, the display code needs to generate a PANIC.
+    
+    Example values:   320,640,800,1024
+
+  * VBE_DISPI_INDEX_YRES : WORD {R,W}
+    This parameter can be used to read/write the vbe display Y resolution (in pixels).
+    It's illegal to set the YRES when the VBE is enabled (display code should generate PANIC).
+    
+    If the value written exceeds VBE_DISPI_MAX_YRES, the display code needs to generate a PANIC.
+    
+    Example values:   200,400,480,600,768
+  
+  * VBE_DISPI_INDEX_BPP : WORD {R,W}
+    This parameter can be used to read/write the vbe display BPP.
+    It's illegal to set the BPP when the VBE is enabled (display code should generate PANIC).
+    
+    If the value written is an incompatible BPP, the display code needs to generate a PANIC.
+    
+    Example values:   VBE_DISPI_BPP_8
+    
+  * VBE_DISPI_INDEX_ENABLE : WORD {R,W}
+    This parameter can be used to read/write the vbe ENABLED state.
+    If the bios writes VBE_DISPI_ENABLED then the display code will setup a hostside display mode 
+    with the current XRES, YRES and BPP settings.
+    If the bios write VBE_DISPI_DISABLED then the display code will switch back to normal vga mode behaviour.
+    
+    Example values: VBE_DISPI_ENABLED, VBE_DISPI_DISABLED
+  
+  * VBE_DISPI_INDEX_BANK : WORD {R,W}
+    This parameter can be used to read/write the current selected BANK (at 0xA0000).
+    This can be used for switching banks in banked mode.
+
+[0xb0c1]
+  * VBE_DISPI_INDEX_VIRT_WIDTH : WORD {R,W}
+    This parameter can be used to read/write the current virtual width.
+    Upon enabling a mode, this will be set to the current xres
+    Setting this field during enabled mode will result in the virtual width to be changed.
+    Value will be adjusted if current setting is not possible.
+  
+  * VBE_DISPI_INDEX_VIRT_HEIGHT : WORD {R}
+    This parameter can be read in order to obtain the current virtual height.
+    This setting will be adjusted after setting a virtual width in order to stay within limit of video memory.
+    
+  * VBE_DISPI_INDEX_X_OFFSET : WORD {R,W}
+    The current X offset (in pixels!) of the visible screen part.
+    Writing a new offset will also result in a complete screen refresh.
+
+  * VBE_DISPI_INDEX_Y_OFFSET : WORD {R,W}
+    The current Y offset (in pixels!) of the visible screen part.
+    Writing a new offset will also result in a complete screen refresh.
+
+
+[0xb0c2]
+  * VBE_DISPI_INDEX_BPP : WORD {R,W}
+    The value written is now the number of bits per pixel. A value of 0 is treated
+    the same as 8 for backward compatibilty. These values are supported: 8, 15,
+    16, 24 and 32. The value of 4 is not yet handled in the VBE code.
+  * VBE_DISPI_INDEX_ENABLE : WORD {R,W}
+    The new flag VBE_DISPI_NOCLEARMEM allows to preserve the VBE video memory.
+    The new flag VBE_DISPI_LFB_ENABLED indicates the usage of the LFB.
+
+[0xb0c3]
+  * VBE_DISPI_INDEX_ENABLE : WORD {R,W}
+    If the new flag VBE_DISPI_GETCAPS is enabled, the xres, yres and bpp registers
+    return the gui capabilities.
+    The new flag VBE_DISPI_8BIT_DAC switches the DAC to 8 bit mode.
+
+[0xb0c4]
+  * VBE_DISPI_TOTAL_VIDEO_MEMORY_MB set to 8 (moved to auto-generated vbetables.h)
+
+Displaying GFX (banked mode)
+--------------
+  What happens is that the total screen is devided in banks of 'VBE_DISPI_BANK_SIZE_KB' KiloByte in size.
+  If you want to set a pixel you can calculate its bank by doing:
+
+    offset = pixel_x + pixel_y * resolution_x;
+    bank = offset / 64 Kb (rounded 1.9999 -> 1)
+
+    bank_pixel_pos = offset - bank * 64Kb
+
+  Now you can set the current bank and put the pixel at VBE_DISPI_BANK_ADDRESS + bank_pixel_pos
+
+Displaying GFX (linear frame buffer mode)
+--------------
+  NOT WRITTEN YET
+
+Notes
+----- 
+  * Since the XRES/YRES/BPP may not be written when VBE is enabled, if you want to switch from one VBE mode
+    to another, you will need to disable VBE first.
+
+  * Note when the bios doesn't find a valid DISPI_ID, it can disable the VBE functions. This allows people to
+    use the same bios for both vbe enabled and disabled bochs executables.
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vberom.asm
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vberom.asm	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vberom.asm	(revision 43609)
@@ -0,0 +1,1003 @@
+;; ============================================================================================
+;;
+;;  Copyright (C) 2002 Jeroen Janssen
+;;
+;;  This library is free software; you can redistribute it and/or
+;;  modify it under the terms of the GNU Lesser General Public
+;;  License as published by the Free Software Foundation; either
+;;  version 2 of the License, or (at your option) any later version.
+;;
+;;  This library 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
+;;  Lesser General Public License for more details.
+;;
+;;  You should have received a copy of the GNU Lesser General Public
+;;  License along with this library; if not, write to the Free Software
+;;  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+;;
+;; ============================================================================================
+;;
+;;  This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+;;  You can NOT drive any physical vga card with it.
+;;
+;; ============================================================================================
+;;
+;;  This VBE Bios is based on information taken from :
+;;   - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+;;
+;; ============================================================================================
+
+
+; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+; a choice of LGPL license versions is made available with the language indicating
+; that LGPLv2 or any later version may be used, or where a choice of which version
+; of the LGPL is applied is otherwise unspecified.
+
+include vgadefs.inc
+
+public	_vga_compat_setup
+public	dispi_set_enable_
+public	dispi_set_bank_
+public	_dispi_set_bank_farcall
+public  _dispi_get_max_bpp
+public  _vbe_has_vbe_display
+
+public	vbe_biosfn_return_current_mode
+public	vbe_biosfn_display_window_control
+public	vbe_biosfn_set_get_logical_scan_line_length
+public	vbe_biosfn_set_get_display_start
+public	vbe_biosfn_set_get_dac_palette_format
+public	vbe_biosfn_set_get_palette_data
+public	vbe_biosfn_return_protected_mode_interface
+
+VGAROM  segment public 'CODE'
+
+.386
+
+;; Bytewise in/out
+ifdef VBE_BYTEWISE_IO
+
+public	do_out_dx_ax
+public	do_in_ax_dx
+
+do_out_dx_ax:
+  xchg ah, al
+  out  dx, al
+  xchg ah, al
+  out  dx, al
+  ret
+
+do_in_ax_dx:
+  in   al, dx
+  xchg ah, al
+  in   al, dx
+  ret
+
+  out_dx_ax     EQU     call do_out_dx_ax
+  in_ax_dx      EQU     call do_in_ax_dx
+else
+  out_dx_ax     EQU     out     dx, ax
+  in_ax_dx      EQU     in      ax, dx
+endif
+
+;; Vertical retrace waiting
+wait_vsync:
+  push ax
+  push dx
+  mov  dx, 03DAh        ; @todo use a symbolic constant!
+wv_loop:
+  in   al, dx
+  test al, 8
+  jz   wv_loop
+  pop  dx
+  pop  ax
+  ret
+
+wait_not_vsync:
+  push ax
+  push dx
+  mov  dx, 03DAh        ; @todo use a symbolic constant!
+wnv_loop:
+  in   al, dx
+  test al, 8
+  jnz  wnv_loop
+  pop  dx
+  pop  ax
+  ret
+
+
+; AL = bits per pixel / AH = bytes per pixel
+dispi_get_bpp:
+  push dx
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_BPP
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  cmp  al, 4
+  jbe  get_bpp_noinc
+  mov  ah, al
+  shr  ah, 3
+  test al, 07
+  jz   get_bpp_noinc
+  inc  ah
+get_bpp_noinc:
+  pop  dx
+  ret
+
+; get display capabilities
+
+_dispi_get_max_bpp:
+  push dx
+  push bx
+  call dispi_get_enable
+  mov  bx, ax
+  or   ax, VBE_DISPI_GETCAPS
+  call dispi_set_enable_
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_BPP
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  push ax
+  mov  ax, bx
+  call dispi_set_enable_
+  pop  ax
+  pop  bx
+  pop  dx
+  ret
+
+dispi_set_enable_:
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_ENABLE
+  out_dx_ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out_dx_ax
+  pop  dx
+  ret
+
+dispi_get_enable:
+  push dx
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_ENABLE
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  pop  dx
+  ret
+
+dispi_set_bank_:
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_BANK
+  out_dx_ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out_dx_ax
+  pop  dx
+  ret
+
+dispi_get_bank:
+  push dx
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_BANK
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  pop  dx
+  ret
+
+_dispi_set_bank_farcall:
+  cmp bx, 0100h
+  je dispi_set_bank_farcall_get
+  or bx,bx
+  jnz dispi_set_bank_farcall_error
+  mov ax, dx
+  push dx
+  push ax
+  mov ax, VBE_DISPI_INDEX_BANK
+  mov dx, VBE_DISPI_IOPORT_INDEX
+  out_dx_ax
+  pop ax
+  mov dx, VBE_DISPI_IOPORT_DATA
+  out_dx_ax
+  in_ax_dx
+  pop dx
+  cmp dx,ax
+  jne dispi_set_bank_farcall_error
+  mov ax, 004Fh
+  retf
+dispi_set_bank_farcall_get:
+  mov ax, VBE_DISPI_INDEX_BANK
+  mov dx, VBE_DISPI_IOPORT_INDEX
+  out_dx_ax
+  mov dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  mov dx,ax
+  retf
+dispi_set_bank_farcall_error:
+  mov ax, 014Fh
+  retf
+
+dispi_set_x_offset:
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_X_OFFSET
+  out_dx_ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out_dx_ax
+  pop  dx
+  ret
+
+dispi_get_x_offset:
+  push dx
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_X_OFFSET
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  pop  dx
+  ret
+
+dispi_set_y_offset:
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_Y_OFFSET
+  out_dx_ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out_dx_ax
+  pop  dx
+  ret
+
+dispi_get_y_offset:
+  push dx
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_Y_OFFSET
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  pop  dx
+  ret
+
+vga_set_virt_width:
+  push ax
+  push bx
+  push dx
+  mov  bx, ax
+  call dispi_get_bpp
+  cmp  al, 4
+  ja   set_width_svga
+  shr  bx, 1
+set_width_svga:
+  shr  bx, 3
+  mov  dx, VGAREG_VGA_CRTC_ADDRESS
+  mov  ah, bl
+  mov  al, 13h
+  out  dx, ax
+  pop  dx
+  pop  bx
+  pop  ax
+  ret
+
+dispi_set_virt_width:
+  call vga_set_virt_width
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_VIRT_WIDTH
+  out_dx_ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out_dx_ax
+  pop  dx
+  ret
+
+dispi_get_virt_width:
+  push dx
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_VIRT_WIDTH
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  pop  dx
+  ret
+
+dispi_get_virt_height:
+  push dx
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_VIRT_HEIGHT
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  pop  dx
+  ret
+
+_vga_compat_setup:
+  push ax
+  push dx
+
+  ; set CRT X resolution
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_XRES
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  push ax
+  mov  dx, VGAREG_VGA_CRTC_ADDRESS
+  mov  ax, 0011h
+  out  dx, ax
+  pop  ax
+  push ax
+  shr  ax, 3
+  dec  ax
+  mov  ah, al
+  mov  al, 01
+  out  dx, ax
+  pop  ax
+  call vga_set_virt_width
+
+  ; set CRT Y resolution
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_YRES
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  dec  ax
+  push ax
+  mov  dx, VGAREG_VGA_CRTC_ADDRESS
+  mov  ah, al
+  mov  al, 12h
+  out  dx, ax
+  pop  ax
+  mov  al, 07
+  out  dx, al
+  inc  dx
+  in   al, dx
+  and  al, 0BDh
+  test ah, 01
+  jz   bit8_clear
+  or   al, 02
+bit8_clear:
+  test ah, 02
+  jz   bit9_clear
+  or   al, 40h
+bit9_clear:
+  out  dx, al
+
+  ; other settings
+  mov  dx, VGAREG_VGA_CRTC_ADDRESS
+  mov  ax, 0009
+  out  dx, al
+  mov  dx, VGAREG_VGA_CRTC_DATA
+  in   al, dx
+  and  al, 60h     ; clear double scan bit and cell height
+  out  dx, al
+  mov  dx, VGAREG_VGA_CRTC_ADDRESS
+  mov  al, 17h
+  out  dx, al
+  mov  dx, VGAREG_VGA_CRTC_DATA
+  in   al, dx
+  or   al, 03
+  out  dx, al
+  mov  dx, VGAREG_ACTL_RESET
+  in   al, dx
+  mov  dx, VGAREG_ACTL_ADDRESS
+  mov  al, 10h
+  out  dx, al
+  mov  dx, VGAREG_ACTL_READ_DATA
+  in   al, dx
+  or   al, 01
+  mov  dx, VGAREG_ACTL_ADDRESS
+  out  dx, al
+  mov  al, 20h
+  out  dx, al
+  mov  dx, VGAREG_GRDC_ADDRESS
+  mov  ax, 0506h
+  out  dx, ax
+  mov  dx, VGAREG_SEQU_ADDRESS
+  mov  ax, 0F02h
+  out  dx, ax
+
+  ; settings for >= 8bpp
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_BPP
+  out_dx_ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in_ax_dx
+  cmp  al, 08
+  jb   vga_compat_end
+  mov  dx, VGAREG_VGA_CRTC_ADDRESS
+  mov  al, 14h
+  out  dx, al
+  mov  dx, VGAREG_VGA_CRTC_DATA
+  in   al, dx
+  or   al, 40h
+  out  dx, al
+  mov  dx, VGAREG_ACTL_RESET
+  in   al, dx
+  mov  dx, VGAREG_ACTL_ADDRESS
+  mov  al, 10h
+  out  dx, al
+  mov  dx, VGAREG_ACTL_READ_DATA
+  in   al, dx
+  or   al, 40h
+  mov  dx, VGAREG_ACTL_ADDRESS
+  out  dx, al
+  mov  al, 20h
+  out  dx, al
+  mov  dx, VGAREG_SEQU_ADDRESS
+  mov  al, 04
+  out  dx, al
+  mov  dx, VGAREG_SEQU_DATA
+  in   al, dx
+  or   al, 08
+  out  dx, al
+  mov  dx, VGAREG_GRDC_ADDRESS
+  mov  al, 05
+  out  dx, al
+  mov  dx, VGAREG_GRDC_DATA
+  in   al, dx
+  and  al, 9Fh
+  or   al, 40h
+  out  dx, al
+
+vga_compat_end:
+  pop  dx
+  pop  ax
+
+
+; Has VBE display - Returns true if VBE display detected
+
+_vbe_has_vbe_display:
+  push ds
+  push bx
+  mov  ax, BIOSMEM_SEG
+  mov  ds, ax
+  mov  bx, BIOSMEM_VBE_FLAG
+  mov  al, [bx]
+  and  al, 01
+  xor  ah, ah
+  pop  bx
+  pop  ds
+  ret
+
+
+; Function 03h - Return Current VBE Mode
+;
+; Input:
+;              AX      = 4F03h
+; Output:
+;              AX      = VBE Return Status
+;              BX      = Current VBE Mode
+;
+;
+vbe_biosfn_return_current_mode:
+  push ds
+  mov  ax, BIOSMEM_SEG
+  mov  ds, ax
+  call dispi_get_enable
+  and  ax, VBE_DISPI_ENABLED
+  jz   no_vbe_mode
+  mov  bx, BIOSMEM_VBE_MODE
+  mov  ax, [bx]
+  mov  bx, ax
+  jnz  vbe_03_ok
+no_vbe_mode:
+  mov  bx, BIOSMEM_CURRENT_MODE
+  mov  al, [bx]
+  mov  bl, al
+  xor  bh, bh
+vbe_03_ok:
+  mov  ax, 004Fh
+  pop  ds
+  ret
+
+
+; Function 05h - Display Window Control
+;
+; Input:
+;              AX      = 4F05h
+;     (16-bit) BH      = 00h Set memory window
+;                      = 01h Get memory window
+;              BL      = Window number
+;                      = 00h Window A
+;                      = 01h Window B
+;              DX      = Window number in video memory in window
+;                        granularity units (Set Memory Window only)
+; Note:
+;              If this function is called while in a linear frame buffer mode,
+;              this function must fail with completion code AH=03h
+;
+; Output:
+;              AX      = VBE Return Status
+;              DX      = Window number in window granularity units
+;                        (Get Memory Window only)
+
+vbe_biosfn_display_window_control:
+  cmp  bl, 0
+  jne  vbe_05_failed
+  cmp  bh, 1
+  je   get_display_window
+  jb   set_display_window
+  mov  ax, 0100h
+  ret
+set_display_window:
+  mov  ax, dx
+  call dispi_set_bank_
+  call dispi_get_bank
+  cmp  ax, dx
+  jne  vbe_05_failed
+  mov  ax, 004Fh
+  ret
+get_display_window:
+  call dispi_get_bank
+  mov  dx, ax
+  mov  ax, 004Fh
+  ret
+vbe_05_failed:
+  mov  ax, 014Fh
+  ret
+
+
+; Function 06h - Set/Get Logical Scan Line Length
+;
+; Input:
+;              AX      = 4F06h
+;              BL      = 00h Set Scan Line Length in Pixels
+;                      = 01h Get Scan Line Length
+;                      = 02h Set Scan Line Length in Bytes
+;                      = 03h Get Maximum Scan Line Length
+;              CX      = If BL=00h Desired Width in Pixels
+;                        If BL=02h Desired Width in Bytes
+;                        (Ignored for Get Functions)
+;
+; Output:
+;              AX      = VBE Return Status
+;              BX      = Bytes Per Scan Line
+;              CX      = Actual Pixels Per Scan Line
+;                        (truncated to nearest complete pixel)
+;              DX      = Maximum Number of Scan Lines
+;
+vbe_biosfn_set_get_logical_scan_line_length:
+  mov  ax, cx
+  cmp  bl, 1
+  je   get_logical_scan_line_length
+  cmp  bl, 2
+  je   set_logical_scan_line_bytes
+  jb   set_logical_scan_line_pixels
+  mov  ax, 0100h
+  ret
+set_logical_scan_line_bytes:
+  push ax
+  call dispi_get_bpp
+  xor  bh, bh
+  mov  bl, ah
+  or   bl, bl
+  jnz  no_4bpp_1
+  shl  ax, 3
+  mov  bl, 1
+no_4bpp_1:
+  xor  dx, dx
+  pop  ax
+  div  bx
+set_logical_scan_line_pixels:
+  call dispi_set_virt_width
+get_logical_scan_line_length:
+  call dispi_get_bpp
+  xor  bh, bh
+  mov  bl, ah
+  call dispi_get_virt_width
+  mov  cx, ax
+  or   bl, bl
+  jnz  no_4bpp_2
+  shr  ax, 3
+  mov  bl, 1
+no_4bpp_2:
+  mul  bx
+  mov  bx, ax
+  call dispi_get_virt_height
+  mov  dx, ax
+  mov  ax, 004Fh
+  ret
+
+
+; Function 07h - Set/Get Display Start
+;
+; Input(16-bit):
+;              AX      = 4F07h
+;              BH      = 00h Reserved and must be 00h
+;              BL      = 00h Set Display Start
+;                      = 01h Get Display Start
+;                      = 02h Schedule Display Start (Alternate)
+;                      = 03h Schedule Stereoscopic Display Start
+;                      = 04h Get Scheduled Display Start Status
+;                      = 05h Enable Stereoscopic Mode
+;                      = 06h Disable Stereoscopic Mode
+;                      = 80h Set Display Start during Vertical Retrace
+;                      = 82h Set Display Start during Vertical Retrace (Alternate)
+;                      = 83h Set Stereoscopic Display Start during Vertical Retrace
+;              ECX     = If BL=02h/82h Display Start Address in bytes
+;                        If BL=03h/83h Left Image Start Address in bytes
+;              EDX     = If BL=03h/83h Right Image Start Address in bytes
+;              CX      = If BL=00h/80h First Displayed Pixel In Scan Line
+;              DX      = If BL=00h/80h First Displayed Scan Line
+;
+; Output:
+;              AX      = VBE Return Status
+;              BH      = If BL=01h Reserved and will be 0
+;              CX      = If BL=01h First Displayed Pixel In Scan Line
+;                        If BL=04h 0 if flip has not occurred, not 0 if it has
+;              DX      = If BL=01h First Displayed Scan Line
+;
+; Input(32-bit):
+;              BH      = 00h Reserved and must be 00h
+;              BL      = 00h Set Display Start
+;                      = 80h Set Display Start during Vertical Retrace
+;              CX      = Bits 0-15 of display start address
+;              DX      = Bits 16-31 of display start address
+;              ES      = Selector for memory mapped registers
+;
+vbe_biosfn_set_get_display_start:
+  cmp  bl, 80h
+  je   set_display_start_wait
+  cmp  bl, 1
+  je   get_display_start
+  jb   set_display_start
+  mov  ax, 0100h
+  ret
+set_display_start_wait:
+  call wait_not_vsync
+  call wait_vsync
+set_display_start:
+  mov  ax, cx
+  call dispi_set_x_offset
+  mov  ax, dx
+  call dispi_set_y_offset
+  mov  ax, 004Fh
+  ret
+get_display_start:
+  call dispi_get_x_offset
+  mov  cx, ax
+  call dispi_get_y_offset
+  mov  dx, ax
+  xor  bh, bh
+  mov  ax, 004Fh
+  ret
+
+
+; Function 08h - Set/Get Dac Palette Format
+;
+; Input:
+;              AX      = 4F08h
+;              BL      = 00h set DAC palette width
+;                      = 01h get DAC palette width
+;              BH      = If BL=00h: desired number of bits per primary color
+; Output:
+;              AX      = VBE Return Status
+;              BH      = current number of bits per primary color (06h = standard VGA)
+;
+vbe_biosfn_set_get_dac_palette_format:
+  cmp  bl, 1
+  je   get_dac_palette_format
+  jb   set_dac_palette_format
+  mov  ax, 0100h
+  ret
+set_dac_palette_format:
+  call dispi_get_enable
+  cmp  bh, 6
+  je   set_normal_dac
+  cmp  bh, 8
+  jne  vbe_08_unsupported
+  or   ax, VBE_DISPI_8BIT_DAC
+  jnz  set_dac_mode
+set_normal_dac:
+  and  ax, NOT VBE_DISPI_8BIT_DAC
+set_dac_mode:
+  call dispi_set_enable_
+get_dac_palette_format:
+  mov  bh, 6
+  call dispi_get_enable
+  and  ax, VBE_DISPI_8BIT_DAC
+  jz   vbe_08_ok
+  mov  bh, 8
+vbe_08_ok:
+  mov  ax, 004Fh
+  ret
+vbe_08_unsupported:
+  mov  ax, 014Fh
+  ret
+
+
+; Function 09h - Set/Get Palette Data
+;
+; Input:
+;              AX      = 4F09h
+;     (16-bit) BL      = 00h Set palette data
+;                      = 01h Get palette data
+;                      = 02h Set secondary palette data
+;                      = 03h Get secondary palette data
+;                      = 80h Set palette data during VRetrace
+;              CX      = Number of entries to update (<= 256)
+;              DX      = First entry to update
+;              ES:DI   = Table of palette values
+; Output:
+;              AX      = VBE Return Status
+;
+; Notes:
+;     Secondary palette support is a "future extension".
+;     Attempts to set/get it should return status 02h.
+;
+;     In VBE 3.0, reading palette data is optional and
+;     subfunctions 01h and 03h may return failure.
+;
+;     The format of palette entries is as follows:
+;
+;     PaletteEntry struc
+;     Blue     db  ?   ; Blue channel value (6 or 8 bits)
+;     Green    db  ?   ; Green channel value (6 or 8 bits)
+;     Red      db  ?   ; Red channel value (6 or 8 bits)
+;     Padding  db  ?   ; DWORD alignment byte (unused)
+;     PaletteEntry ends
+;
+;     Most applications use VGA DAC registers directly to
+;     set/get palette in VBE modes. However, subfn 4F09h is
+;     required for NonVGA controllers (eg. XGA).
+;
+vbe_biosfn_set_get_palette_data:
+  test bl, bl
+  jz   set_palette_data
+  cmp  bl, 01
+  je   get_palette_data
+  cmp  bl, 03
+  jbe  vbe_09_nohw
+  cmp  bl, 80h
+  jne  vbe_09_unsupported
+if 0
+      ; this is where we could wait for vertical retrace
+endif
+set_palette_data:
+  pushad
+  push  ds
+  push  es
+  pop   ds
+  mov   al, dl
+  mov   dx, VGAREG_DAC_WRITE_ADDRESS
+  out   dx, al
+  inc   dx
+  mov   si, di
+set_pal_loop:
+  lodsd
+  ror   eax, 16
+  out   dx, al
+  rol   eax, 8
+  out   dx, al
+  rol   eax, 8
+  out   dx, al
+  loop  set_pal_loop
+  pop   ds
+  popad
+vbe_09_ok:
+  mov  ax, 004Fh
+  ret
+
+get_palette_data:
+  pushad
+  mov   al, dl
+  mov   dx, VGAREG_DAC_READ_ADDRESS
+  out   dx, al
+  add   dl, 2
+get_pal_loop:
+  xor   eax, eax
+  in    al, dx
+  shl   eax, 8
+  in    al, dx
+  shl   eax, 8
+  in    al, dx
+  stosd
+  loop  get_pal_loop
+  popad
+  jmp   vbe_09_ok
+
+vbe_09_unsupported:
+  mov  ax, 014Fh
+  ret
+vbe_09_nohw:
+  mov  ax, 024Fh
+  ret
+
+
+; Function 0Ah - Return VBE Protected Mode Interface
+;
+; Input:    AX   = 4F0Ah   VBE 2.0 Protected Mode Interface
+;           BL   = 00h          Return protected mode table
+; Output:   AX   =         Status
+;           ES   =         Real Mode Segment of Table
+;           DI   =         Offset of Table
+;           CX   =         Length of Table including protected mode code
+;                          (for copying purposes)
+;
+vbe_biosfn_return_protected_mode_interface:
+  test bl, bl
+  jnz _fail
+  mov di, 0C000h
+  mov es, di
+  mov di, offset vesa_pm_start
+  mov cx, vesa_pm_end - vesa_pm_start
+  sub cx, di
+  mov ax, 004Fh
+  ret
+_fail:
+  mov ax, 014fh
+  ret
+
+VGAROM  ends
+
+;;
+;; 32-bit VBE interface
+;;
+
+.386
+
+public  vesa_pm_start
+public  vesa_pm_end
+
+VBE32   segment public use32 'CODE'
+
+        align   2
+
+vesa_pm_start:
+  dw vesa_pm_set_window - vesa_pm_start
+  dw vesa_pm_set_display_start - vesa_pm_start
+  dw vesa_pm_unimplemented - vesa_pm_start
+  dw vesa_pm_io_ports_table - vesa_pm_start
+vesa_pm_io_ports_table:
+  dw VBE_DISPI_IOPORT_INDEX
+  dw VBE_DISPI_IOPORT_INDEX + 1
+  dw VBE_DISPI_IOPORT_DATA
+  dw VBE_DISPI_IOPORT_DATA + 1
+  dw 3B6h
+  dw 3B7h
+  dw 0FFFFh
+  dw 0FFFFh
+
+vesa_pm_set_window:
+  cmp  bx, 0
+  je  vesa_pm_set_display_window1
+  mov  ax, 0100h
+  ret
+vesa_pm_set_display_window1:
+  mov  ax, dx
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_BANK
+  out  dx, ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out  dx, ax
+  in   ax, dx
+  pop  dx
+  cmp  dx, ax
+  jne  illegal_window
+  mov  ax, 004Fh
+  ret
+illegal_window:
+  mov  ax, 014Fh
+  ret
+vesa_pm_set_display_start:
+  cmp  bl, 80h
+  je   vesa_pm_set_display_start1_wait
+  cmp  bl, 00
+  je   vesa_pm_set_display_start1
+  mov  ax, 0100h
+  ret
+vesa_pm_set_display_start1_wait:
+  push edx
+  mov  dx, 03DAh        ; @todo: use symbolic constant
+wnv_loop_32:
+  in   al, dx
+  test al, 8
+  jnz  wnv_loop_32
+wv_loop_32:
+  in   al, dx
+  test al, 8
+  jz   wv_loop_32
+  pop  edx
+vesa_pm_set_display_start1:
+; convert offset to (X, Y) coordinate
+; (would be simpler to change Bochs VBE API...)
+  push eax
+  push ecx
+  push edx
+  push esi
+  push edi
+  shl edx, 16
+  and ecx, 0FFFFh
+  or ecx, edx
+  shl ecx, 2
+  mov eax, ecx
+  push eax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_VIRT_WIDTH
+  out  dx, ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in   ax, dx
+  movzx ecx, ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_BPP
+  out  dx, ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  in   ax, dx
+  movzx esi, ax
+  pop  eax
+
+  cmp esi, 4
+  jz bpp4_mode
+  add esi, 7
+  shr esi, 3
+  imul ecx, esi
+  xor edx, edx
+  div ecx
+  mov edi, eax
+  mov eax, edx
+  xor edx, edx
+  div esi
+  jmp set_xy_regs
+
+bpp4_mode:
+  shr ecx, 1
+  xor edx, edx
+  div ecx
+  mov edi, eax
+  mov eax, edx
+  shl eax, 1
+
+set_xy_regs:
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_X_OFFSET
+  out  dx, ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out  dx, ax
+  pop  dx
+
+  mov  ax, di
+  push dx
+  push ax
+  mov  dx, VBE_DISPI_IOPORT_INDEX
+  mov  ax, VBE_DISPI_INDEX_Y_OFFSET
+  out  dx, ax
+  pop  ax
+  mov  dx, VBE_DISPI_IOPORT_DATA
+  out  dx, ax
+  pop  dx
+
+  pop edi
+  pop esi
+  pop edx
+  pop ecx
+  pop eax
+  mov  ax, 004fh
+  ret
+
+vesa_pm_unimplemented:
+  mov ax, 014Fh
+  ret
+vesa_pm_end:
+
+VBE32   ends
+
+        end
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vbetables-gen.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vbetables-gen.c	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vbetables-gen.c	(revision 43609)
@@ -0,0 +1,243 @@
+/* Generate the VGABIOS VBE Tables */
+#include <stdlib.h>
+#include <stdio.h>
+
+#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
+
+typedef struct {
+    int width;
+    int height;
+    int depth;
+    int mode;
+} ModeInfo;
+
+ModeInfo modes[] = {
+    /* standard VESA modes */
+{ 640, 400, 8                          , 0x100},
+{ 640, 480, 8                          , 0x101},
+{ 800, 600, 4                          , 0x102},
+{ 800, 600, 8                          , 0x103},
+{ 1024, 768, 4                         , 0x104},
+{ 1024, 768, 8                         , 0x105},
+{ 1280, 1024, 4                        , 0x106},
+{ 1280, 1024, 8                        , 0x107},
+{ 320, 200, 15                       , 0x10D},
+{ 320, 200, 16                        , 0x10E},
+{ 320, 200, 24                        , 0x10F},
+{ 640, 480, 15                       , 0x110},
+{ 640, 480, 16                        , 0x111},
+{ 640, 480, 24                        , 0x112},
+{ 800, 600, 15                       , 0x113},
+{ 800, 600, 16                        , 0x114},
+{ 800, 600, 24                        , 0x115},
+{ 1024, 768, 15                      , 0x116},
+{ 1024, 768, 16                       , 0x117},
+{ 1024, 768, 24                       , 0x118},
+{ 1280, 1024, 15                     , 0x119},
+{ 1280, 1024, 16                      , 0x11A},
+{ 1280, 1024, 24                      , 0x11B},
+#if 0 /* Ubuntu fails with this */
+{ 1600, 1200, 8                        , 0x11C},
+{ 1600, 1200, 15                     , 0x11D},
+{ 1600, 1200, 16                      , 0x11E},
+{ 1600, 1200, 24                      , 0x11F},
+#endif
+
+      /* BOCHS/PLE, 86 'own' mode numbers */
+{ 320, 200, 32                        , 0x140},
+{ 640, 400, 32                        , 0x141},
+{ 640, 480, 32                        , 0x142},
+{ 800, 600, 32                        , 0x143},
+{ 1024, 768, 32                       , 0x144},
+{ 1280, 1024, 32                      , 0x145},
+{ 320, 200, 8                           , 0x146},
+{ 1600, 1200, 32                      , 0x147},
+{ 1152, 864, 8                      , 0x148},
+{ 1152, 864, 15                      , 0x149},
+{ 1152, 864, 16                      , 0x14a},
+{ 1152, 864, 24                      , 0x14b},
+{ 1152, 864, 32                      , 0x14c},
+{ 0, },
+};
+
+int main(int argc, char **argv)
+{
+  const ModeInfo *pm;
+  int pages, pitch;
+  int r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos;
+  const char *str;
+  long vram_size = VBE_DISPI_TOTAL_VIDEO_MEMORY_MB * 1024 * 1024;
+
+  printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n\n");
+  printf("#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB %d\n\n", VBE_DISPI_TOTAL_VIDEO_MEMORY_MB);
+  printf("static ModeInfoListItem mode_info_list[]=\n");
+  printf("{\n");
+  for (pm = modes; pm->mode != 0; pm++) {
+    if (pm->depth == 4)
+      pitch = (pm->width + 7) / 8;
+    else
+      pitch = pm->width * ((pm->depth + 7) / 8);
+    pages = vram_size / (pm->height * pitch);
+    if (pages > 0) {
+      printf("{ 0x%04x, /* %dx%dx%d */\n",
+             pm->mode, pm->width, pm->height, pm->depth);
+      if (pm->depth == 4)
+        printf("{ /*Bit16u ModeAttributes*/ %s,\n",
+               "VBE_MODE_ATTRIBUTE_SUPPORTED | "
+               "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
+               "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
+               "VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | "
+               "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
+      else
+        printf("{ /*Bit16u ModeAttributes*/ %s,\n",
+               "VBE_MODE_ATTRIBUTE_SUPPORTED | "
+               "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
+               "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
+               "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | "
+               "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
+      printf("/*Bit8u  WinAAttributes*/ %s,\n",
+             "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | "
+             "VBE_WINDOW_ATTRIBUTE_READABLE | "
+             "VBE_WINDOW_ATTRIBUTE_WRITEABLE");
+
+      printf("/*Bit8u  WinBAttributes*/ %d,\n", 0);
+
+      printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
+
+      printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
+
+      printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH");
+
+      printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0);
+
+      printf("/*Bit32u WinFuncPtr*/ %d,\n", 0);
+
+      printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch);
+
+      /* Mandatory information for VBE 1.2 and above */
+      printf("/*Bit16u XResolution*/ %d,\n", pm->width);
+      printf("/*Bit16u YResolution*/ %d,\n", pm->height);
+      printf("/*Bit8u  XCharSize*/ %d,\n", 8);
+      printf("/*Bit8u  YCharSize*/ %d,\n", 16);
+      if (pm->depth == 4) {
+        printf("/*Bit8u  NumberOfPlanes*/ %d,\n", 4);
+      } else {
+        printf("/*Bit8u  NumberOfPlanes*/ %d,\n", 1);
+      }
+      printf("/*Bit8u  BitsPerPixel*/ %d,\n", pm->depth);
+      printf("/*Bit8u  NumberOfBanks*/ %d,\n", 1);  /* This would only be non-zero for CGA/HGC modes! */
+
+      if (pm->depth == 4)
+        str = "VBE_MEMORYMODEL_PLANAR";
+      else if (pm->depth == 8)
+        str = "VBE_MEMORYMODEL_PACKED_PIXEL";
+      else
+        str = "VBE_MEMORYMODEL_DIRECT_COLOR";
+      printf("/*Bit8u  MemoryModel*/ %s,\n", str);
+      printf("/*Bit8u  BankSize*/ %d,\n", 0);
+      if (pm->depth == 4)
+        printf("/*Bit8u  NumberOfImagePages*/ %d,\n", (pages / 4) - 1);
+      else
+        printf("/*Bit8u  NumberOfImagePages*/ %d,\n", pages - 1);
+      printf("/*Bit8u  Reserved_page*/ %d,\n", 0);
+
+      /* Direct Color fields (required for direct/6 and YUV/7 memory models) */
+      switch(pm->depth) {
+        case 15:
+          r_size = 5;
+          r_pos = 10;
+          g_size = 5;
+          g_pos = 5;
+          b_size = 5;
+          b_pos = 0;
+          a_size = 1;
+          a_pos = 15;
+          break;
+        case 16:
+          r_size = 5;
+          r_pos = 11;
+          g_size = 6;
+          g_pos = 5;
+          b_size = 5;
+          b_pos = 0;
+          a_size = 0;
+          a_pos = 0;
+          break;
+        case 24:
+          r_size = 8;
+          r_pos = 16;
+          g_size = 8;
+          g_pos = 8;
+          b_size = 8;
+          b_pos = 0;
+          a_size = 0;
+          a_pos = 0;
+          break;
+        case 32:
+          r_size = 8;
+          r_pos = 16;
+          g_size = 8;
+          g_pos = 8;
+          b_size = 8;
+          b_pos = 0;
+          a_size = 8;
+          a_pos = 24;
+          break;
+        default:
+          r_size = 0;
+          r_pos = 0;
+          g_size = 0;
+          g_pos = 0;
+          b_size = 0;
+          b_pos = 0;
+          a_size = 0;
+          a_pos = 0;
+          break;
+      }
+
+      printf("/*Bit8u  RedMaskSize*/ %d,\n", r_size);
+      printf("/*Bit8u  RedFieldPosition*/ %d,\n", r_pos);
+      printf("/*Bit8u  GreenMaskSize*/ %d,\n", g_size);
+      printf("/*Bit8u  GreenFieldPosition*/ %d,\n", g_pos);
+      printf("/*Bit8u  BlueMaskSize*/ %d,\n", b_size);
+      printf("/*Bit8u  BlueFieldPosition*/ %d,\n", b_pos);
+      printf("/*Bit8u  RsvdMaskSize*/ %d,\n", a_size);
+      printf("/*Bit8u  RsvdFieldPosition*/ %d,\n", a_pos);
+      if (pm->depth == 32)
+        printf("/*Bit8u  DirectColorModeInfo*/ %s,\n",
+               "VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE");
+      else
+        printf("/*Bit8u  DirectColorModeInfo*/ %s,\n", "0");
+
+      /* Mandatory information for VBE 2.0 and above */
+      if (pm->depth > 4)
+        printf("/*Bit32u PhysBasePtr*/ %s,\n",
+               "0xFFFF0000 /* Filled in at run-time; low word must be zero! */");
+      else
+        printf("/*Bit32u PhysBasePtr*/ %s,\n", "0");
+      printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0);
+      printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0);
+      /* Mandatory information for VBE 3.0 and above */
+      printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch);
+      printf("/*Bit8u  BnkNumberOfPages*/ %d,\n", 0);
+      printf("/*Bit8u  LinNumberOfPages*/ %d,\n", 0);
+      printf("/*Bit8u  LinRedMaskSize*/ %d,\n", r_size);
+      printf("/*Bit8u  LinRedFieldPosition*/ %d,\n", r_pos);
+      printf("/*Bit8u  LinGreenMaskSize*/ %d,\n", g_size);
+      printf("/*Bit8u  LinGreenFieldPosition*/ %d,\n", g_pos);
+      printf("/*Bit8u  LinBlueMaskSize*/ %d,\n", b_size);
+      printf("/*Bit8u  LinBlueFieldPosition*/ %d,\n", b_pos);
+      printf("/*Bit8u  LinRsvdMaskSize*/ %d,\n", a_size);
+      printf("/*Bit8u  LinRsvdFieldPosition*/ %d,\n", a_pos);
+      printf("/*Bit32u MaxPixelClock*/ %d,\n", 0);
+      printf("} },\n");
+    }
+  }
+#ifndef VBOX    /* We'll add the terminator ourselves, thank you. */
+  printf("{ VBE_VESA_MODE_END_OF_LIST,\n");
+  printf("{ 0,\n");
+  printf("} },\n");
+#endif
+  printf("};\n");
+  return 0;
+}
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vgabios.c
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vgabios.c	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vgabios.c	(revision 43609)
@@ -0,0 +1,2320 @@
+// ============================================================================================
+/*
+ * vgabios.c
+ */
+// ============================================================================================
+//
+//  Copyright (C) 2001,2002 the LGPL VGABios developers Team
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2 of the License, or (at your option) any later version.
+//
+//  This library 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
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// ============================================================================================
+//
+//  This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+//  You can NOT drive any physical vga card with it.
+//
+// ============================================================================================
+//
+//  This file contains code ripped from :
+//   - rombios.c of plex86
+//
+//  This VGA Bios contains fonts from :
+//   - fntcol16.zip (c) by Joseph Gil avalable at :
+//      ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+//     These fonts are public domain
+//
+//  This VGA Bios is based on information taken from :
+//   - Kevin Lawton's vga card emulation for bochs/plex86
+//   - Ralf Brown's interrupts list available at http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+//   - Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+//   - Michael Abrash's Graphics Programming Black Book
+//   - Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" edited by sybex
+//   - DOSEMU 1.0.1 source code for several tables values and formulas
+//
+// Thanks for patches, comments and ideas to :
+//   - techt@pikeonline.net
+//
+// ============================================================================================
+
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <inttypes.h>
+#include "vgabios.h"
+
+#ifdef VBE
+#include "vbe.h"
+#endif
+
+#include "inlines.h"
+
+/* Declares */
+extern void vgabios_int10_handler(void);
+#pragma aux vgabios_int10_handler "*";
+
+// Output
+void __cdecl          unimplemented(void);
+void __cdecl          unknown(void);
+
+static uint8_t find_vga_entry();
+
+#ifdef VBE
+extern uint16_t __cdecl vbe_has_vbe_display(void);
+extern void             vbe_init(void);
+#endif
+
+void set_int_vector(uint8_t int_vec, void *offset)
+{
+    void __far * __far *ivt = 0;
+
+    ivt[int_vec] = 0xC000 :> offset;
+}
+
+//@todo!!
+#if 0
+
+vgabios_name:
+#ifdef VBOX
+.ascii  "VirtualBox VGA BIOS"
+#else
+.ascii  "Plex86/Bochs VGABios"
+#endif
+.ascii  " "
+.byte   0x00
+
+#ifndef VBOX
+vgabios_version:
+#ifndef VGABIOS_VERS
+.ascii  "current-cvs"
+#else
+.ascii VGABIOS_VERS
+#endif
+.ascii  " "
+
+vgabios_date:
+.ascii  VGABIOS_DATE
+.byte   0x0a,0x0d
+.byte   0x00
+#endif
+
+#ifndef VBOX
+char vgabios_copyright[] = "(C) 2003 the LGPL VGABios developers Team\r\n";
+char vgabios_license[]   = "This VGA/VBE Bios is released under the GNU LGPL\r\n\r\n";
+char vgabios_website[]   = "Please visit :\r\n" \
+                           " . http://www.plex86.org\r\n" \
+                           " . http://bochs.sourceforge.net\r\n" \
+                           " . http://www.nongnu.org/vgabios\r\n\r\n"
+#endif
+
+#endif
+
+extern void set_mode(int mode);
+#pragma aux set_mode =  \
+    "xor    ah, ah"     \
+    "int    10h"        \
+    parm [ax];
+
+char msg_vga_init[] = "Oracle VM VirtualBox Version " VBOX_VERSION_STRING " VGA BIOS\r\n";
+
+/*
+ * Boot time harware inits
+ */
+void init_vga_card(void)
+{
+    /* Switch to color mode and enable CPU access 480 lines. */
+    outb(0x3C2, 0xC3);
+    /* More than 64k 3C4/04. */
+    //@todo: 16-bit write
+    outb(0x3C4, 0x04);
+    outb(0x3C5, 0x02);
+
+#ifdef DEBUG_VGA
+    printf(msg_vga_init);
+#endif
+}
+
+#include "vgatables.h"
+#include "vgadefs.h"
+
+// --------------------------------------------------------------------------------------------
+/*
+ *  Boot time bios area inits
+ */
+void init_bios_area(void)
+{
+    uint8_t __far   *bda;
+
+    bda = 0x40 :> 0;
+
+    /* Indicate 80x25 color was detected. */
+    bda[BIOSMEM_INITIAL_MODE] = (bda[BIOSMEM_INITIAL_MODE] & 0xcf) | 0x20;
+    /* Just for the first int10 find its children. */
+
+    /* The default char height. */
+    bda[BIOSMEM_CHAR_HEIGHT] = 16;
+    /* Clear the screen. */
+    bda[BIOSMEM_VIDEO_CTL]   = 0x60;
+    /* Set the basic screen we have. */
+    bda[BIOSMEM_SWITCHES]    = 0xf9;
+    /* Set the basic mode set options. */
+    bda[BIOSMEM_MODESET_CTL] = 0x51;
+    /* Set the default MSR. */
+    bda[BIOSMEM_CURRENT_MSR] = 0x09;
+}
+
+void __far *video_save_pointer_table[7] = {
+    &video_param_table
+};
+
+// ============================================================================================
+//
+// Init Entry point
+//
+// ============================================================================================
+void __far __cdecl vgabios_init_func(void)
+{
+    init_vga_card();
+    init_bios_area();
+#ifdef VBE
+    vbe_init();
+#endif
+    set_int_vector(0x10, vgabios_int10_handler);
+#ifdef CIRRUS
+    cirrus_init();
+#endif
+
+#ifndef VBOX
+    display_splash_screen();
+
+    // init video mode and clear the screen
+    // @@AS: Do not remove this init, because it will break VESA graphics
+    set_mode(3);
+
+    display_info();
+
+#ifdef VBE
+    vbe_display_info();
+#endif
+
+#ifdef CIRRUS
+    cirrus_display_info();
+#endif
+
+#else /* VBOX */
+
+//#ifdef DEBUG_bird
+    /* Init video mode and clear the screen */
+    set_mode(3);
+//#endif
+#endif /* VBOX */
+}
+
+#include "vgafonts.h"
+
+#ifndef VBOX
+// --------------------------------------------------------------------------------------------
+/*
+ *  Boot time Splash screen
+ */
+static void display_splash_screen()
+{
+}
+
+// --------------------------------------------------------------------------------------------
+/*
+ *  Tell who we are
+ */
+
+static void display_string(void)
+{
+ // Get length of string
+ASM_START
+ mov ax,ds
+ mov es,ax
+ mov di,si
+ xor cx,cx
+ not cx
+ xor al,al
+ cld
+ repne
+  scasb
+ not cx
+ dec cx
+ push cx
+
+ mov ax,#0x0300
+ mov bx,#0x0000
+ int #0x10
+
+ pop cx
+ mov ax,#0x1301
+ mov bx,#0x000b
+ mov bp,si
+ int #0x10
+ASM_END
+}
+
+static void display_info(void)
+{
+    display_string(vgabios_name);
+    display_string(vgabios_version);
+    display_string(vgabios_copyright);
+    display_string(vgabios_license);
+    display_string(vgabios_website);
+}
+
+#endif
+
+// --------------------------------------------------------------------------------------------
+#ifdef VGA_DEBUG
+void __cdecl int10_debugmsg(uint16_t DI, uint16_t SI, uint16_t BP, uint16_t SP, uint16_t BX,
+                            uint16_t DX, uint16_t CX, uint16_t AX, uint16_t DS, uint16_t ES, uint16_t FLAGS)
+{
+    /* Function 0Eh is write char and would generate way too much output. */
+    if (GET_AH() != 0x0E)
+        printf("vgabios call ah%02x al%02x bx%04x cx%04x dx%04x\n", GET_AH(), GET_AL(), BX, CX, DX);
+}
+#endif
+
+static void vga_get_cursor_pos(uint8_t page, uint16_t STACK_BASED *scans, uint16_t STACK_BASED *loc)
+{
+    if (page > 7) {
+        *scans = 0;
+        *loc   = 0;
+    } else {
+        // FIXME should handle VGA 14/16 lines
+        *scans = read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE);
+        *loc   = read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_POS + page * 2);
+    }
+}
+
+
+static void vga_read_char_attr(uint8_t page, uint16_t STACK_BASED *chr_atr)
+{
+    uint8_t     xcurs, ycurs, mode, line;
+    uint16_t    nbcols, nbrows, address;
+    uint16_t    cursor, dummy;
+
+    // Get the mode
+    mode = read_byte(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE);
+    line = find_vga_entry(mode);
+    if (line == 0xFF)
+        return;
+
+    // Get the cursor pos for the page
+    vga_get_cursor_pos(page, &dummy, &cursor);
+    xcurs = cursor & 0x00ff;
+    ycurs = (cursor & 0xff00) >> 8;
+
+    // Get the dimensions
+    nbrows = read_byte(BIOSMEM_SEG, BIOSMEM_NB_ROWS) + 1;
+    nbcols = read_word(BIOSMEM_SEG, BIOSMEM_NB_COLS);
+
+    if (vga_modes[line].class == TEXT) {
+        // Compute the address
+        address  = SCREEN_MEM_START(nbcols, nbrows, page) + (xcurs + ycurs * nbcols) * 2;
+        *chr_atr = read_word(vga_modes[line].sstart, address);
+    } else {
+        //@todo: graphics modes (not so easy - or useful!)
+#ifdef VGA_DEBUG
+        unimplemented();
+#endif
+    }
+}
+
+static void vga_get_font_info (uint16_t func, uint16_t STACK_BASED *u_seg, uint16_t STACK_BASED *u_ofs,
+                               uint16_t STACK_BASED *c_height, uint16_t STACK_BASED *max_row)
+{
+    void    __far   *ptr;
+
+    switch (func) {
+    case 0x00:
+        ptr = (void __far *)read_dword(0x00, 0x1f * 4);
+        break;
+    case 0x01:
+        ptr = (void __far *)read_dword(0x00, 0x43 * 4);
+        break;
+    case 0x02:
+        ptr = 0xC000 :> vgafont14;
+        break;
+    case 0x03:
+        ptr = 0xC000 :> vgafont8;
+        break;
+    case 0x04:
+        ptr = 0xC000 :> (vgafont8 + 128 * 8);
+        break;
+    case 0x05:
+        ptr = 0xC000 :> vgafont14alt;
+        break;
+    case 0x06:
+        ptr = 0xC000 :> vgafont16;
+        break;
+    case 0x07:
+        ptr = 0xC000 :> vgafont16alt;
+        break;
+    default:
+#ifdef VGA_DEBUG
+        printf("Get font info subfn(%02x) not implemented\n", func);
+#endif
+        return;
+    }
+    /* Split the far pointer and write it back. */
+    *u_ofs = (uint16_t)ptr;
+    *u_seg = (uint32_t)ptr >> 16;
+
+    /* The character height (effectively bytes per glyph). */
+    *c_height = read_byte(BIOSMEM_SEG, BIOSMEM_CHAR_HEIGHT);
+
+    /* The highest row number. */
+    *max_row = read_byte(BIOSMEM_SEG, BIOSMEM_NB_ROWS);
+}
+
+static void vga_read_pixel(uint8_t page, uint16_t col, uint16_t row, uint16_t STACK_BASED *pixel)
+{
+    uint8_t     mode, line, mask, attr, data, i;
+    uint16_t    addr;
+
+    /* Determine current mode characteristics. */
+    mode = read_byte(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE);
+    line = find_vga_entry(mode);
+    if (line == 0xFF)
+        return;
+    if (vga_modes[line].class == TEXT)
+        return;
+
+    /* Read data depending on memory model. */
+    switch (vga_modes[line].memmodel) {
+    case PLANAR4:
+    case PLANAR1:
+        addr = col / 8 + row * read_word(BIOSMEM_SEG, BIOSMEM_NB_COLS);
+        mask = 0x80 >> (col & 0x07);
+        attr = 0x00;
+        for (i = 0; i < 4; i++) {
+            outw(VGAREG_GRDC_ADDRESS, (i << 8) | 0x04);
+            data = read_byte(0xa000,addr) & mask;
+            if (data > 0)
+                attr |= (0x01 << i);
+        }
+        break;
+    case CGA:
+        addr = (col >> 2) + (row >> 1) * 80;
+        if (row & 1)
+            addr += 0x2000;
+        data = read_byte(0xb800, addr);
+        if (vga_modes[line].pixbits == 2)
+            attr = (data >> ((3 - (col & 0x03)) * 2)) & 0x03;
+        else
+            attr = (data >> (7 - (col & 0x07))) & 0x01;
+        break;
+    case LINEAR8:
+        addr = col + row * (read_word(BIOSMEM_SEG, BIOSMEM_NB_COLS) * 8);
+        attr = read_byte(0xa000, addr);
+        break;
+    default:
+#ifdef VGA_DEBUG
+       unimplemented();
+#endif
+        attr = 0;
+    }
+    *(uint8_t STACK_BASED *)pixel = attr;
+}
+
+
+
+// --------------------------------------------------------------------------------------------
+/*static*/ void biosfn_perform_gray_scale_summing(uint16_t start, uint16_t count)
+{uint8_t r,g,b;
+ uint16_t i;
+ uint16_t index;
+
+ inb(VGAREG_ACTL_RESET);
+ outb(VGAREG_ACTL_ADDRESS,0x00);
+
+ for( index = 0; index < count; index++ )
+  {
+   // set read address and switch to read mode
+   outb(VGAREG_DAC_READ_ADDRESS,start);
+   // get 6-bit wide RGB data values
+   r=inb( VGAREG_DAC_DATA );
+   g=inb( VGAREG_DAC_DATA );
+   b=inb( VGAREG_DAC_DATA );
+
+   // intensity = ( 0.3 * Red ) + ( 0.59 * Green ) + ( 0.11 * Blue )
+   i = ( ( 77*r + 151*g + 28*b ) + 0x80 ) >> 8;
+
+   if(i>0x3f)i=0x3f;
+
+   // set write address and switch to write mode
+   outb(VGAREG_DAC_WRITE_ADDRESS,start);
+   // write new intensity value
+   outb( VGAREG_DAC_DATA, i&0xff );
+   outb( VGAREG_DAC_DATA, i&0xff );
+   outb( VGAREG_DAC_DATA, i&0xff );
+   start++;
+  }
+ inb(VGAREG_ACTL_RESET);
+ outb(VGAREG_ACTL_ADDRESS,0x20);
+#ifdef VBOX
+ inb(VGAREG_ACTL_RESET);
+#endif /* VBOX */
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_set_cursor_shape(uint8_t CH, uint8_t CL)
+{uint16_t cheight,curs,crtc_addr;
+ uint8_t modeset_ctl;
+
+ CH&=0x3f;
+ CL&=0x1f;
+
+ curs=(CH<<8)+CL;
+ write_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE,curs);
+
+ modeset_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL);
+ cheight = read_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT);
+ if((modeset_ctl&0x01) && (cheight>8) && (CL<8) && (CH<0x20))
+  {
+   if(CL!=(CH+1))
+    {
+     CH = ((CH+1) * cheight / 8) -1;
+    }
+   else
+    {
+     CH = ((CL+1) * cheight / 8) - 2;
+    }
+   CL = ((CL+1) * cheight / 8) - 1;
+  }
+
+ // CTRC regs 0x0a and 0x0b
+ crtc_addr=read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
+ outb(crtc_addr,0x0a);
+ outb(crtc_addr+1,CH);
+ outb(crtc_addr,0x0b);
+ outb(crtc_addr+1,CL);
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_set_cursor_pos (uint8_t page, uint16_t cursor)
+{
+ uint8_t xcurs,ycurs,current;
+ uint16_t nbcols,nbrows,address,crtc_addr;
+
+ // Should not happen...
+ if(page>7)return;
+
+ // Bios cursor pos
+ write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*page, cursor);
+
+ // Set the hardware cursor
+ current=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE);
+ if(page==current)
+  {
+   // Get the dimensions
+   nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+   nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+
+   xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+   // Calculate the address knowing nbcols nbrows and page num
+   address=SCREEN_IO_START(nbcols,nbrows,page)+xcurs+ycurs*nbcols;
+
+   // CRTC regs 0x0e and 0x0f
+   crtc_addr=read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
+   outb(crtc_addr,0x0e);
+   outb(crtc_addr+1,(address&0xff00)>>8);
+   outb(crtc_addr,0x0f);
+   outb(crtc_addr+1,address&0x00ff);
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_set_active_page(uint8_t page)
+{
+ uint16_t cursor,dummy,crtc_addr;
+ uint16_t nbcols,nbrows,address;
+ uint8_t mode,line;
+
+ if(page>7)return;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get pos curs pos for the right page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+
+ if(vga_modes[line].class==TEXT)
+  {
+   // Get the dimensions
+   nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+   nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+
+   // Calculate the address knowing nbcols nbrows and page num
+   address=SCREEN_MEM_START(nbcols,nbrows,page);
+   write_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START,address);
+
+   // Start address
+   address=SCREEN_IO_START(nbcols,nbrows,page);
+  }
+ else
+  {
+   address = page * (*(uint16_t *)&video_param_table[line_to_vpti[line]].slength_l);
+  }
+
+ // CRTC regs 0x0c and 0x0d
+ crtc_addr=read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
+ outb(crtc_addr,0x0c);
+ outb(crtc_addr+1,(address&0xff00)>>8);
+ outb(crtc_addr,0x0d);
+ outb(crtc_addr+1,address&0x00ff);
+
+ // And change the BIOS page
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE,page);
+
+#ifdef VGA_DEBUG
+ printf("Set active page %02x address %04x\n",page,address);
+#endif
+
+ // Display the cursor, now the page is active
+ biosfn_set_cursor_pos(page,cursor);
+}
+
+//@todo: Evaluate whether executing INT 10h is the right thing here
+extern void vga_font_set(uint8_t function, uint8_t data);
+#pragma aux vga_font_set =  \
+    "mov    ah, 11h"        \
+    "int    10h"            \
+    parm [al] [bl];
+
+// ============================================================================================
+//
+// BIOS functions
+//
+// ============================================================================================
+
+void biosfn_set_video_mode(uint8_t mode)
+{// mode: Bit 7 is 1 if no clear screen
+
+ // Should we clear the screen ?
+ uint8_t  noclearmem=mode&0x80;
+ uint8_t  line,mmask,*palette,vpti;
+ uint16_t i,twidth,theightm1,cheight;
+ uint8_t  modeset_ctl,video_ctl,vga_switches;
+ uint16_t crtc_addr;
+
+#ifdef VBE
+ if (vbe_has_vbe_display()) {
+   // Force controller into VGA mode
+   outb(VGAREG_SEQU_ADDRESS,7);
+   outb(VGAREG_SEQU_DATA,0x00);
+  }
+#endif // def VBE
+
+ // The real mode
+ mode=mode&0x7f;
+
+ // find the entry in the video modes
+ line=find_vga_entry(mode);
+
+#ifdef VGA_DEBUG
+ printf("mode search %02x found line %02x\n",mode,line);
+#endif
+
+ if(line==0xFF)
+  return;
+
+ vpti=line_to_vpti[line];
+ twidth=video_param_table[vpti].twidth;
+ theightm1=video_param_table[vpti].theightm1;
+ cheight=video_param_table[vpti].cheight;
+
+ // Read the bios vga control
+ video_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL);
+
+ // Read the bios vga switches
+ vga_switches=read_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES);
+
+ // Read the bios mode set control
+ modeset_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL);
+
+ // Then we know the number of lines
+// FIXME
+
+ // if palette loading (bit 3 of modeset ctl = 0)
+ if((modeset_ctl&0x08)==0)
+  {// Set the PEL mask
+   outb(VGAREG_PEL_MASK,vga_modes[line].pelmask);
+
+   // Set the whole dac always, from 0
+   outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+
+   // From which palette
+   switch(vga_modes[line].dacmodel)
+    {case 0:
+      palette=&palette0[0];
+      break;
+     case 1:
+      palette=&palette1[0];
+      break;
+     case 2:
+      palette=&palette2[0];
+      break;
+     case 3:
+      palette=&palette3[0];
+      break;
+    }
+   // Always 256*3 values
+   for(i=0;i<0x0100;i++)
+    {if(i<=dac_regs[vga_modes[line].dacmodel])
+      {outb(VGAREG_DAC_DATA,palette[(i*3)+0]);
+       outb(VGAREG_DAC_DATA,palette[(i*3)+1]);
+       outb(VGAREG_DAC_DATA,palette[(i*3)+2]);
+      }
+     else
+      {outb(VGAREG_DAC_DATA,0);
+       outb(VGAREG_DAC_DATA,0);
+       outb(VGAREG_DAC_DATA,0);
+      }
+    }
+   if((modeset_ctl&0x02)==0x02)
+    {
+     biosfn_perform_gray_scale_summing(0x00, 0x100);
+    }
+  }
+
+ // Reset Attribute Ctl flip-flop
+ inb(VGAREG_ACTL_RESET);
+
+ // Set Attribute Ctl
+ for(i=0;i<=0x13;i++)
+  {outb(VGAREG_ACTL_ADDRESS,i);
+   outb(VGAREG_ACTL_WRITE_DATA,video_param_table[vpti].actl_regs[i]);
+  }
+ outb(VGAREG_ACTL_ADDRESS,0x14);
+ outb(VGAREG_ACTL_WRITE_DATA,0x00);
+
+ // Set Sequencer Ctl
+ outb(VGAREG_SEQU_ADDRESS,0);
+ outb(VGAREG_SEQU_DATA,0x03);
+ for(i=1;i<=4;i++)
+  {outb(VGAREG_SEQU_ADDRESS,i);
+   outb(VGAREG_SEQU_DATA,video_param_table[vpti].sequ_regs[i - 1]);
+  }
+
+ // Set Grafx Ctl
+ for(i=0;i<=8;i++)
+  {outb(VGAREG_GRDC_ADDRESS,i);
+   outb(VGAREG_GRDC_DATA,video_param_table[vpti].grdc_regs[i]);
+  }
+
+ // Set CRTC address VGA or MDA
+ crtc_addr=vga_modes[line].memmodel==MTEXT?VGAREG_MDA_CRTC_ADDRESS:VGAREG_VGA_CRTC_ADDRESS;
+
+ // Disable CRTC write protection
+ outw(crtc_addr,0x0011);
+ // Set CRTC regs
+ for(i=0;i<=0x18;i++)
+  {outb(crtc_addr,i);
+   outb(crtc_addr+1,video_param_table[vpti].crtc_regs[i]);
+  }
+
+ // Set the misc register
+ outb(VGAREG_WRITE_MISC_OUTPUT,video_param_table[vpti].miscreg);
+
+ // Enable video
+ outb(VGAREG_ACTL_ADDRESS,0x20);
+ inb(VGAREG_ACTL_RESET);
+
+ if(noclearmem==0x00)
+  {
+   if(vga_modes[line].class==TEXT)
+    {
+     memsetw(vga_modes[line].sstart,0,0x0720,0x4000); // 32k
+    }
+   else
+    {
+     if(mode<0x0d)
+      {
+       memsetw(vga_modes[line].sstart,0,0x0000,0x4000); // 32k
+      }
+     else
+      {
+       outb( VGAREG_SEQU_ADDRESS, 0x02 );
+       mmask = inb( VGAREG_SEQU_DATA );
+       outb( VGAREG_SEQU_DATA, 0x0f ); // all planes
+       memsetw(vga_modes[line].sstart,0,0x0000,0x8000); // 64k
+       outb( VGAREG_SEQU_DATA, mmask );
+      }
+    }
+  }
+
+ // Set the BIOS mem
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE,mode);
+ write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS,twidth);
+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,*(uint16_t *)&video_param_table[vpti].slength_l);
+ write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS,crtc_addr);
+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,theightm1);
+ write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT,cheight);
+ write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60|noclearmem));
+ write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES,0xF9);
+ write_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL,read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL)&0x7f);
+
+ // FIXME We nearly have the good tables. to be reworked
+ write_byte(BIOSMEM_SEG,BIOSMEM_DCC_INDEX,0x08);    // 8 is VGA should be ok for now
+ write_dword(BIOSMEM_SEG,BIOSMEM_VS_POINTER, (uint32_t)(void __far *)video_save_pointer_table);
+
+ // FIXME
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MSR,0x00); // Unavailable on vanilla vga, but...
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAL,0x00); // Unavailable on vanilla vga, but...
+
+ // Set cursor shape
+ if(vga_modes[line].class==TEXT)
+  {
+   biosfn_set_cursor_shape(0x06,0x07);
+  }
+
+ // Set cursor pos for page 0..7
+ for(i=0;i<8;i++)
+  biosfn_set_cursor_pos(i,0x0000);
+
+ // Set active page 0
+ biosfn_set_active_page(0x00);
+
+ // Write the fonts in memory
+ if(vga_modes[line].class==TEXT)
+  {
+     vga_font_set(0x04, 0);     /* Load 8x16 font into page 0. */
+     vga_font_set(0x03, 0);     /* Select font page mode 0. */
+  }
+
+ // Set the ints 0x1F and 0x43
+ set_int_vector(0x1f, vgafont8+128*8);
+
+  switch(cheight)
+   {case 8:
+     set_int_vector(0x43, vgafont8);
+     break;
+    case 14:
+     set_int_vector(0x43, vgafont14);
+     break;
+    case 16:
+     set_int_vector(0x43, vgafont16);
+     break;
+   }
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_copy_pl4(uint8_t xstart, uint8_t ysrc, uint8_t ydest,
+                            uint8_t cols, uint8_t nbcols, uint8_t cheight)
+{
+ uint16_t src,dest;
+ uint8_t i;
+
+ src=ysrc*cheight*nbcols+xstart;
+ dest=ydest*cheight*nbcols+xstart;
+ outw(VGAREG_GRDC_ADDRESS, 0x0105);
+ for(i=0;i<cheight;i++)
+  {
+   memcpyb(0xa000,dest+i*nbcols,0xa000,src+i*nbcols,cols);
+  }
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_fill_pl4(uint8_t xstart, uint8_t ystart, uint8_t cols,
+                            uint8_t nbcols, uint8_t cheight, uint8_t attr)
+{
+ uint16_t dest;
+ uint8_t i;
+
+ dest=ystart*cheight*nbcols+xstart;
+ outw(VGAREG_GRDC_ADDRESS, 0x0205);
+ for(i=0;i<cheight;i++)
+  {
+   memsetb(0xa000,dest+i*nbcols,attr,cols);
+  }
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_copy_cga(uint8_t xstart, uint8_t ysrc, uint8_t ydest,
+                            uint8_t cols, uint8_t nbcols, uint8_t cheight)
+{
+ uint16_t src,dest;
+ uint8_t i;
+
+ src=((ysrc*cheight*nbcols)>>1)+xstart;
+ dest=((ydest*cheight*nbcols)>>1)+xstart;
+ for(i=0;i<cheight;i++)
+  {
+   if (i & 1)
+     memcpyb(0xb800,0x2000+dest+(i>>1)*nbcols,0xb800,0x2000+src+(i>>1)*nbcols,cols);
+   else
+     memcpyb(0xb800,dest+(i>>1)*nbcols,0xb800,src+(i>>1)*nbcols,cols);
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_fill_cga(uint8_t xstart, uint8_t ystart, uint8_t cols,
+                            uint8_t nbcols, uint8_t cheight, uint8_t attr)
+{
+ uint16_t dest;
+ uint8_t i;
+
+ dest=((ystart*cheight*nbcols)>>1)+xstart;
+ for(i=0;i<cheight;i++)
+  {
+   if (i & 1)
+     memsetb(0xb800,0x2000+dest+(i>>1)*nbcols,attr,cols);
+   else
+     memsetb(0xb800,dest+(i>>1)*nbcols,attr,cols);
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_scroll(uint8_t nblines, uint8_t attr, uint8_t rul, uint8_t cul,
+                          uint8_t rlr, uint8_t clr, uint8_t page, uint8_t dir)
+{
+ // page == 0xFF if current
+
+ uint8_t mode,line,cheight,bpp,cols;
+ uint16_t nbcols,nbrows,i;
+ uint16_t address;
+
+ if(rul>rlr)return;
+ if(cul>clr)return;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ // Get the current page
+ if(page==0xFF)
+  page=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE);
+
+ if(rlr>=nbrows)rlr=nbrows-1;
+ if(clr>=nbcols)clr=nbcols-1;
+ if(nblines>nbrows)nblines=0;
+ cols=clr-cul+1;
+
+ if(vga_modes[line].class==TEXT)
+  {
+   // Compute the address
+   address=SCREEN_MEM_START(nbcols,nbrows,page);
+#ifdef VGA_DEBUG
+   printf("Scroll, address %04x (%04x %04x %02x)\n",address,nbrows,nbcols,page);
+#endif
+
+   if(nblines==0&&rul==0&&cul==0&&rlr==nbrows-1&&clr==nbcols-1)
+    {
+     memsetw(vga_modes[line].sstart,address,(uint16_t)attr*0x100+' ',nbrows*nbcols);
+    }
+   else
+    {// if Scroll up
+     if(dir==SCROLL_UP)
+      {for(i=rul;i<=rlr;i++)
+        {
+         if((i+nblines>rlr)||(nblines==0))
+          memsetw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,(uint16_t)attr*0x100+' ',cols);
+         else
+          memcpyw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,vga_modes[line].sstart,((i+nblines)*nbcols+cul)*2,cols);
+        }
+      }
+     else
+      {for(i=rlr;i>=rul;i--)
+        {
+         if((i<rul+nblines)||(nblines==0))
+          memsetw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,(uint16_t)attr*0x100+' ',cols);
+         else
+          memcpyw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,vga_modes[line].sstart,((i-nblines)*nbcols+cul)*2,cols);
+         if (i>rlr) break;
+        }
+      }
+    }
+  }
+ else
+  {
+   // FIXME gfx mode not complete
+   cheight=video_param_table[line_to_vpti[line]].cheight;
+   switch(vga_modes[line].memmodel)
+    {
+     case PLANAR4:
+     case PLANAR1:
+       if(nblines==0&&rul==0&&cul==0&&rlr==nbrows-1&&clr==nbcols-1)
+        {
+         outw(VGAREG_GRDC_ADDRESS, 0x0205);
+         memsetb(vga_modes[line].sstart,0,attr,nbrows*nbcols*cheight);
+         outw(VGAREG_GRDC_ADDRESS, 0x0005);
+        }
+       else
+        {// if Scroll up
+         if(dir==SCROLL_UP)
+          {for(i=rul;i<=rlr;i++)
+            {
+             if((i+nblines>rlr)||(nblines==0))
+              vgamem_fill_pl4(cul,i,cols,nbcols,cheight,attr);
+             else
+              vgamem_copy_pl4(cul,i+nblines,i,cols,nbcols,cheight);
+            }
+          }
+         else
+          {for(i=rlr;i>=rul;i--)
+            {
+             if((i<rul+nblines)||(nblines==0))
+              vgamem_fill_pl4(cul,i,cols,nbcols,cheight,attr);
+             else
+              vgamem_copy_pl4(cul,i,i-nblines,cols,nbcols,cheight);
+             if (i>rlr) break;
+            }
+          }
+        }
+       break;
+     case CGA:
+       bpp=vga_modes[line].pixbits;
+       if(nblines==0&&rul==0&&cul==0&&rlr==nbrows-1&&clr==nbcols-1)
+        {
+         memsetb(vga_modes[line].sstart,0,attr,nbrows*nbcols*cheight*bpp);
+        }
+       else
+        {
+         if(bpp==2)
+          {
+           cul<<=1;
+           cols<<=1;
+           nbcols<<=1;
+          }
+         // if Scroll up
+         if(dir==SCROLL_UP)
+          {for(i=rul;i<=rlr;i++)
+            {
+             if((i+nblines>rlr)||(nblines==0))
+              vgamem_fill_cga(cul,i,cols,nbcols,cheight,attr);
+             else
+              vgamem_copy_cga(cul,i+nblines,i,cols,nbcols,cheight);
+            }
+          }
+         else
+          {for(i=rlr;i>=rul;i--)
+            {
+             if((i<rul+nblines)||(nblines==0))
+              vgamem_fill_cga(cul,i,cols,nbcols,cheight,attr);
+             else
+              vgamem_copy_cga(cul,i,i-nblines,cols,nbcols,cheight);
+             if (i>rlr) break;
+            }
+          }
+        }
+       break;
+#ifdef VGA_DEBUG
+     default:
+       printf("Scroll in graphics mode ");
+       unimplemented();
+#endif
+    }
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void write_gfx_char_pl4(uint8_t car, uint8_t attr, uint8_t xcurs,
+                               uint8_t ycurs, uint8_t nbcols, uint8_t cheight)
+{
+ uint8_t i,j,mask;
+ uint8_t *fdata;
+ uint16_t addr,dest,src;
+
+ switch(cheight)
+  {case 14:
+    fdata = &vgafont14;
+    break;
+   case 16:
+    fdata = &vgafont16;
+    break;
+   default:
+    fdata = &vgafont8;
+  }
+ addr=xcurs+ycurs*cheight*nbcols;
+ src = car * cheight;
+ outw(VGAREG_SEQU_ADDRESS, 0x0f02);
+ outw(VGAREG_GRDC_ADDRESS, 0x0205);
+ if(attr&0x80)
+  {
+   outw(VGAREG_GRDC_ADDRESS, 0x1803);
+  }
+ else
+  {
+   outw(VGAREG_GRDC_ADDRESS, 0x0003);
+  }
+ for(i=0;i<cheight;i++)
+  {
+   dest=addr+i*nbcols;
+   for(j=0;j<8;j++)
+    {
+     mask=0x80>>j;
+     outw(VGAREG_GRDC_ADDRESS, (mask << 8) | 0x08);
+     read_byte(0xa000,dest);
+     if(fdata[src+i]&mask)
+      {
+       write_byte(0xa000,dest,attr&0x0f);
+      }
+     else
+      {
+       write_byte(0xa000,dest,0x00);
+      }
+    }
+  }
+  outw(VGAREG_GRDC_ADDRESS, 0xff08);
+  outw(VGAREG_GRDC_ADDRESS, 0x0005);
+  outw(VGAREG_GRDC_ADDRESS, 0x0003);
+}
+
+// --------------------------------------------------------------------------------------------
+static void write_gfx_char_cga(uint8_t car, uint8_t attr, uint8_t xcurs,
+                               uint8_t ycurs, uint8_t nbcols, uint8_t bpp)
+{
+ uint8_t i,j,mask,data;
+ uint8_t *fdata;
+ uint16_t addr,dest,src;
+
+ fdata = &vgafont8;
+ addr=(xcurs*bpp)+ycurs*320;
+ src = car * 8;
+ for(i=0;i<8;i++)
+  {
+   dest=addr+(i>>1)*80;
+   if (i & 1) dest += 0x2000;
+   mask = 0x80;
+   if (bpp == 1)
+    {
+     if (attr & 0x80)
+      {
+       data = read_byte(0xb800,dest);
+      }
+     else
+      {
+       data = 0x00;
+      }
+     for(j=0;j<8;j++)
+      {
+       if (fdata[src+i] & mask)
+        {
+         if (attr & 0x80)
+          {
+           data ^= (attr & 0x01) << (7-j);
+          }
+         else
+          {
+           data |= (attr & 0x01) << (7-j);
+          }
+        }
+       mask >>= 1;
+      }
+     write_byte(0xb800,dest,data);
+    }
+   else
+    {
+     while (mask > 0)
+      {
+       if (attr & 0x80)
+        {
+         data = read_byte(0xb800,dest);
+        }
+       else
+        {
+         data = 0x00;
+        }
+       for(j=0;j<4;j++)
+        {
+         if (fdata[src+i] & mask)
+          {
+           if (attr & 0x80)
+            {
+             data ^= (attr & 0x03) << ((3-j)*2);
+            }
+           else
+            {
+             data |= (attr & 0x03) << ((3-j)*2);
+            }
+          }
+         mask >>= 1;
+        }
+       write_byte(0xb800,dest,data);
+       dest += 1;
+      }
+    }
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void write_gfx_char_lin(uint8_t car, uint8_t attr, uint8_t xcurs,
+                               uint8_t ycurs, uint8_t nbcols)
+{
+ uint8_t i,j,mask,data;
+ uint8_t *fdata;
+ uint16_t addr,dest,src;
+
+ fdata = &vgafont8;
+ addr=xcurs*8+ycurs*nbcols*64;
+ src = car * 8;
+ for(i=0;i<8;i++)
+  {
+   dest=addr+i*nbcols*8;
+   mask = 0x80;
+   for(j=0;j<8;j++)
+    {
+     data = 0x00;
+     if (fdata[src+i] & mask)
+      {
+       data = attr;
+      }
+     write_byte(0xa000,dest+j,data);
+     mask >>= 1;
+    }
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_char_attr(uint8_t car, uint8_t page, uint8_t attr, uint16_t count)
+{
+ uint8_t cheight,xcurs,ycurs,mode,line,bpp;
+ uint16_t nbcols,nbrows,address;
+ uint16_t cursor,dummy;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the cursor pos for the page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+ xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ if(vga_modes[line].class==TEXT)
+  {
+   // Compute the address
+   address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
+
+   dummy=((uint16_t)attr<<8)+car;
+   memsetw(vga_modes[line].sstart,address,dummy,count);
+  }
+ else
+  {
+   // FIXME gfx mode not complete
+   cheight=video_param_table[line_to_vpti[line]].cheight;
+   bpp=vga_modes[line].pixbits;
+   while((count-->0) && (xcurs<nbcols))
+    {
+     switch(vga_modes[line].memmodel)
+      {
+       case PLANAR4:
+       case PLANAR1:
+         write_gfx_char_pl4(car,attr,xcurs,ycurs,nbcols,cheight);
+         break;
+       case CGA:
+         write_gfx_char_cga(car,attr,xcurs,ycurs,nbcols,bpp);
+         break;
+       case LINEAR8:
+         write_gfx_char_lin(car,attr,xcurs,ycurs,nbcols);
+         break;
+#ifdef VGA_DEBUG
+       default:
+         unimplemented();
+#endif
+      }
+     xcurs++;
+    }
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_char_only(uint8_t car, uint8_t page, uint8_t attr, uint16_t count)
+{
+ uint8_t cheight,xcurs,ycurs,mode,line,bpp;
+ uint16_t nbcols,nbrows,address;
+ uint16_t cursor,dummy;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the cursor pos for the page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+ xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ if(vga_modes[line].class==TEXT)
+  {
+   // Compute the address
+   address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
+
+   while(count-->0)
+    {write_byte(vga_modes[line].sstart,address,car);
+     address+=2;
+    }
+  }
+ else
+  {
+   // FIXME gfx mode not complete
+   cheight=video_param_table[line_to_vpti[line]].cheight;
+   bpp=vga_modes[line].pixbits;
+   while((count-->0) && (xcurs<nbcols))
+    {
+     switch(vga_modes[line].memmodel)
+      {
+       case PLANAR4:
+       case PLANAR1:
+         write_gfx_char_pl4(car,attr,xcurs,ycurs,nbcols,cheight);
+         break;
+       case CGA:
+         write_gfx_char_cga(car,attr,xcurs,ycurs,nbcols,bpp);
+         break;
+       case LINEAR8:
+         write_gfx_char_lin(car,attr,xcurs,ycurs,nbcols);
+         break;
+#ifdef VGA_DEBUG
+       default:
+         unimplemented();
+#endif
+      }
+     xcurs++;
+    }
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_pixel(uint8_t BH, uint8_t AL, uint16_t CX, uint16_t DX)
+{
+ uint8_t mode,line,mask,attr,data;
+ uint16_t addr;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+ if(vga_modes[line].class==TEXT)return;
+
+ switch(vga_modes[line].memmodel)
+  {
+   case PLANAR4:
+   case PLANAR1:
+     addr = CX/8+DX*read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+     mask = 0x80 >> (CX & 0x07);
+     outw(VGAREG_GRDC_ADDRESS, (mask << 8) | 0x08);
+     outw(VGAREG_GRDC_ADDRESS, 0x0205);
+     data = read_byte(0xa000,addr);
+     if (AL & 0x80)
+      {
+       outw(VGAREG_GRDC_ADDRESS, 0x1803);
+      }
+     write_byte(0xa000,addr,AL);
+     outw(VGAREG_GRDC_ADDRESS, 0xff08);
+     outw(VGAREG_GRDC_ADDRESS, 0x0005);
+     outw(VGAREG_GRDC_ADDRESS, 0x0003);
+     break;
+   case CGA:
+     if(vga_modes[line].pixbits==2)
+      {
+       addr=(CX>>2)+(DX>>1)*80;
+      }
+     else
+      {
+       addr=(CX>>3)+(DX>>1)*80;
+      }
+     if (DX & 1) addr += 0x2000;
+     data = read_byte(0xb800,addr);
+     if(vga_modes[line].pixbits==2)
+      {
+       attr = (AL & 0x03) << ((3 - (CX & 0x03)) * 2);
+       mask = 0x03 << ((3 - (CX & 0x03)) * 2);
+      }
+     else
+      {
+       attr = (AL & 0x01) << (7 - (CX & 0x07));
+       mask = 0x01 << (7 - (CX & 0x07));
+      }
+     if (AL & 0x80)
+      {
+       data ^= attr;
+      }
+     else
+      {
+       data &= ~mask;
+       data |= attr;
+      }
+     write_byte(0xb800,addr,data);
+     break;
+   case LINEAR8:
+     addr=CX+DX*(read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS)*8);
+     write_byte(0xa000,addr,AL);
+     break;
+#ifdef VGA_DEBUG
+   default:
+     unimplemented();
+#endif
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_teletype(uint8_t car, uint8_t page, uint8_t attr, uint8_t flag)
+{// flag = WITH_ATTR / NO_ATTR
+
+ uint8_t cheight,xcurs,ycurs,mode,line,bpp;
+ uint16_t nbcols,nbrows,address;
+ uint16_t cursor,dummy;
+
+ // special case if page is 0xff, use current page
+ if(page==0xff)
+  page=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE);
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the cursor pos for the page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+ xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ switch(car)
+  {
+   case 7:
+    //FIXME should beep
+    break;
+
+   case 8:
+    if(xcurs>0)xcurs--;
+    break;
+
+   case '\r':
+    xcurs=0;
+    break;
+
+   case '\n':
+    ycurs++;
+    break;
+
+   case '\t':
+    do
+     {
+      biosfn_write_teletype(' ',page,attr,flag);
+      vga_get_cursor_pos(page,&dummy,&cursor);
+      xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+     }while(xcurs%8==0);
+    break;
+
+   default:
+
+    if(vga_modes[line].class==TEXT)
+     {
+      // Compute the address
+      address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
+
+      // Write the char
+      write_byte(vga_modes[line].sstart,address,car);
+
+      if(flag==WITH_ATTR)
+       write_byte(vga_modes[line].sstart,address+1,attr);
+     }
+    else
+     {
+      // FIXME gfx mode not complete
+      cheight=video_param_table[line_to_vpti[line]].cheight;
+      bpp=vga_modes[line].pixbits;
+      switch(vga_modes[line].memmodel)
+       {
+        case PLANAR4:
+        case PLANAR1:
+          write_gfx_char_pl4(car,attr,xcurs,ycurs,nbcols,cheight);
+          break;
+        case CGA:
+          write_gfx_char_cga(car,attr,xcurs,ycurs,nbcols,bpp);
+          break;
+        case LINEAR8:
+          write_gfx_char_lin(car,attr,xcurs,ycurs,nbcols);
+          break;
+#ifdef VGA_DEBUG
+        default:
+          unimplemented();
+#endif
+       }
+     }
+    xcurs++;
+  }
+
+ // Do we need to wrap ?
+ if(xcurs==nbcols)
+  {xcurs=0;
+   ycurs++;
+  }
+
+ // Do we need to scroll ?
+ if(ycurs==nbrows)
+  {
+   if(vga_modes[line].class==TEXT)
+    {
+     address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+(ycurs-1)*nbcols)*2;
+     attr=read_byte(vga_modes[line].sstart,address+1);
+     biosfn_scroll(0x01,attr,0,0,nbrows-1,nbcols-1,page,SCROLL_UP);
+    }
+   else
+    {
+     biosfn_scroll(0x01,0x00,0,0,nbrows-1,nbcols-1,page,SCROLL_UP);
+    }
+   ycurs-=1;
+  }
+
+ // Set the cursor for the page
+ cursor=ycurs; cursor<<=8; cursor+=xcurs;
+ biosfn_set_cursor_pos(page,cursor);
+}
+
+// --------------------------------------------------------------------------------------------
+static void get_font_access(void)
+{
+    outw(VGAREG_SEQU_ADDRESS, 0x0100);
+    outw(VGAREG_SEQU_ADDRESS, 0x0402);
+    outw(VGAREG_SEQU_ADDRESS, 0x0704);
+    outw(VGAREG_SEQU_ADDRESS, 0x0300);
+    outw(VGAREG_GRDC_ADDRESS, 0x0204);
+    outw(VGAREG_GRDC_ADDRESS, 0x0005);
+    outw(VGAREG_GRDC_ADDRESS, 0x0406);
+}
+
+static void release_font_access(void)
+{
+    outw(VGAREG_SEQU_ADDRESS, 0x0100);
+    outw(VGAREG_SEQU_ADDRESS, 0x0302);
+    outw(VGAREG_SEQU_ADDRESS, 0x0304);
+    outw(VGAREG_SEQU_ADDRESS, 0x0300);
+    outw(VGAREG_GRDC_ADDRESS, (((0x0a | ((inb(VGAREG_READ_MISC_OUTPUT) & 0x01) << 2)) << 8) | 0x06));
+    outw(VGAREG_GRDC_ADDRESS, 0x0004);
+    outw(VGAREG_GRDC_ADDRESS, 0x1005);
+}
+
+static void set_scan_lines(uint8_t lines)
+{
+ uint16_t crtc_addr,cols,vde;
+ uint8_t crtc_r9,ovl,rows;
+
+ crtc_addr = read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
+ outb(crtc_addr, 0x09);
+ crtc_r9 = inb(crtc_addr+1);
+ crtc_r9 = (crtc_r9 & 0xe0) | (lines - 1);
+ outb(crtc_addr+1, crtc_r9);
+ if(lines==8)
+  {
+   biosfn_set_cursor_shape(0x06,0x07);
+  }
+ else
+  {
+   biosfn_set_cursor_shape(lines-4,lines-3);
+  }
+ write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, lines);
+ outb(crtc_addr, 0x12);
+ vde = inb(crtc_addr+1);
+ outb(crtc_addr, 0x07);
+ ovl = inb(crtc_addr+1);
+ vde += (((ovl & 0x02) << 7) + ((ovl & 0x40) << 3) + 1);
+ rows = vde / lines;
+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, rows-1);
+ cols = read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, rows * cols * 2);
+}
+
+static void biosfn_load_text_user_pat(uint8_t AL, uint16_t ES, uint16_t BP, uint16_t CX,
+                                      uint16_t DX, uint8_t BL, uint8_t BH)
+{
+ uint16_t blockaddr,dest,i,src;
+
+ get_font_access();
+ blockaddr = ((BL & 0x03) << 14) + ((BL & 0x04) << 11);
+ for(i=0;i<CX;i++)
+  {
+   src = BP + i * BH;
+   dest = blockaddr + (DX + i) * 32;
+   memcpyb(0xA000, dest, ES, src, BH);
+  }
+ release_font_access();
+ if(AL>=0x10)
+  {
+   set_scan_lines(BH);
+  }
+}
+
+static void biosfn_load_text_8_14_pat(uint8_t AL, uint8_t BL)
+{
+ uint16_t blockaddr,dest,i,src;
+
+ get_font_access();
+ blockaddr = ((BL & 0x03) << 14) + ((BL & 0x04) << 11);
+ for(i=0;i<0x100;i++)
+  {
+   src = i * 14;
+   dest = blockaddr + i * 32;
+   memcpyb(0xA000, dest, 0xC000, (uint16_t)vgafont14+src, 14);
+  }
+ release_font_access();
+ if(AL>=0x10)
+  {
+   set_scan_lines(14);
+  }
+}
+
+static void biosfn_load_text_8_8_pat(uint8_t AL, uint8_t BL)
+{
+ uint16_t blockaddr,dest,i,src;
+
+ get_font_access();
+ blockaddr = ((BL & 0x03) << 14) + ((BL & 0x04) << 11);
+ for(i=0;i<0x100;i++)
+  {
+   src = i * 8;
+   dest = blockaddr + i * 32;
+   memcpyb(0xA000, dest, 0xC000, (uint16_t)vgafont8+src, 8);
+  }
+ release_font_access();
+ if(AL>=0x10)
+  {
+   set_scan_lines(8);
+  }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_load_text_8_16_pat(uint8_t AL, uint8_t BL)
+{
+ uint16_t blockaddr,dest,i,src;
+
+ get_font_access();
+ blockaddr = ((BL & 0x03) << 14) + ((BL & 0x04) << 11);
+ for(i=0;i<0x100;i++)
+  {
+   src = i * 16;
+   dest = blockaddr + i * 32;
+   memcpyb(0xA000, dest, 0xC000, (uint16_t)vgafont16+src, 16);
+  }
+ release_font_access();
+ if(AL>=0x10)
+  {
+   set_scan_lines(16);
+  }
+}
+
+static void biosfn_load_gfx_8_8_chars(uint16_t ES, uint16_t BP)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+static void biosfn_load_gfx_user_chars(uint16_t ES, uint16_t BP, uint16_t CX,
+                                       uint8_t BL, uint8_t DL)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+static void biosfn_load_gfx_8_14_chars(uint8_t BL)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+static void biosfn_load_gfx_8_8_dd_chars(uint8_t BL)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+static void biosfn_load_gfx_8_16_chars(uint8_t BL)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+// --------------------------------------------------------------------------------------------
+static void biosfn_alternate_prtsc(void)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_switch_video_interface (AL,ES,DX) uint8_t AL;uint16_t ES;uint16_t DX;
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+static void biosfn_enable_video_refresh_control(uint8_t AL)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_string(uint8_t flag, uint8_t page, uint8_t attr, uint16_t count,
+                                uint8_t row, uint8_t col, uint16_t seg, uint16_t offset)
+{
+ uint16_t newcurs,oldcurs,dummy;
+ uint8_t car;
+
+ // Read curs info for the page
+ vga_get_cursor_pos(page,&dummy,&oldcurs);
+
+ // if row=0xff special case : use current cursor position
+ if(row==0xff)
+  {col=oldcurs&0x00ff;
+   row=(oldcurs&0xff00)>>8;
+  }
+
+ newcurs=row; newcurs<<=8; newcurs+=col;
+ biosfn_set_cursor_pos(page,newcurs);
+
+ while(count--!=0)
+  {
+   car=read_byte(seg,offset++);
+   if((flag&0x02)!=0)
+    attr=read_byte(seg,offset++);
+
+   biosfn_write_teletype(car,page,attr,WITH_ATTR);
+  }
+
+ // Set back curs pos
+ if((flag&0x01)==0)
+  biosfn_set_cursor_pos(page,oldcurs);
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_read_state_info(uint16_t BX, uint16_t ES, uint16_t DI)
+{
+ // Address of static functionality table
+ write_dword(ES,DI+0x00, (uint32_t)(void __far *)static_functionality);
+
+ // Hard coded copy from BIOS area. Should it be cleaner ?
+ memcpyb(ES,DI+0x04,BIOSMEM_SEG,0x49,30);
+ memcpyb(ES,DI+0x22,BIOSMEM_SEG,0x84,3);
+
+ write_byte(ES,DI+0x25,read_byte(BIOSMEM_SEG,BIOSMEM_DCC_INDEX));
+ write_byte(ES,DI+0x26,0);
+ write_byte(ES,DI+0x27,16);
+ write_byte(ES,DI+0x28,0);
+ write_byte(ES,DI+0x29,8);
+ write_byte(ES,DI+0x2a,2);
+ write_byte(ES,DI+0x2b,0);
+ write_byte(ES,DI+0x2c,0);
+ write_byte(ES,DI+0x31,3);
+ write_byte(ES,DI+0x32,0);
+
+ memsetb(ES,DI+0x33,0,13);
+}
+
+// --------------------------------------------------------------------------------------------
+uint16_t biosfn_read_video_state_size2(uint16_t state)
+{
+    uint16_t    size;
+
+    size = 0;
+    if (state & 1)
+        size += 0x46;
+
+    if (state & 2)
+        size += (5 + 8 + 5) * 2 + 6;
+
+    if (state & 4)
+        size += 3 + 256 * 3 + 1;
+
+    //@todo: Is this supposed to be in 1-byte or 64-byte units?
+    return size;
+}
+
+static void vga_get_video_state_size(uint16_t state, uint16_t STACK_BASED *size)
+{
+    *size = biosfn_read_video_state_size2(state);
+}
+
+uint16_t biosfn_save_video_state(uint16_t CX, uint16_t ES, uint16_t BX)
+{
+    uint16_t i, crtc_addr, ar_index;
+
+    crtc_addr = read_word(BIOSMEM_SEG, BIOSMEM_CRTC_ADDRESS);
+    if (CX & 1) {
+        write_byte(ES, BX, inb(VGAREG_SEQU_ADDRESS)); BX++;
+        write_byte(ES, BX, inb(crtc_addr)); BX++;
+        write_byte(ES, BX, inb(VGAREG_GRDC_ADDRESS)); BX++;
+        inb(VGAREG_ACTL_RESET);
+        ar_index = inb(VGAREG_ACTL_ADDRESS);
+        write_byte(ES, BX, ar_index); BX++;
+        write_byte(ES, BX, inb(VGAREG_READ_FEATURE_CTL)); BX++;
+
+        for(i=1;i<=4;i++){
+            outb(VGAREG_SEQU_ADDRESS, i);
+            write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
+        }
+        outb(VGAREG_SEQU_ADDRESS, 0);
+        write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
+
+        for(i=0;i<=0x18;i++) {
+            outb(crtc_addr,i);
+            write_byte(ES, BX, inb(crtc_addr+1)); BX++;
+        }
+
+        for(i=0;i<=0x13;i++) {
+            inb(VGAREG_ACTL_RESET);
+            outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
+            write_byte(ES, BX, inb(VGAREG_ACTL_READ_DATA)); BX++;
+        }
+        inb(VGAREG_ACTL_RESET);
+
+        for(i=0;i<=8;i++) {
+            outb(VGAREG_GRDC_ADDRESS,i);
+            write_byte(ES, BX, inb(VGAREG_GRDC_DATA)); BX++;
+        }
+
+        write_word(ES, BX, crtc_addr); BX+= 2;
+
+        /* XXX: read plane latches */
+        write_byte(ES, BX, 0); BX++;
+        write_byte(ES, BX, 0); BX++;
+        write_byte(ES, BX, 0); BX++;
+        write_byte(ES, BX, 0); BX++;
+    }
+    if (CX & 2) {
+        write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE)); BX++;
+        write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS)); BX += 2;
+        write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE)); BX += 2;
+        write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS)); BX += 2;
+        write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)); BX++;
+        write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT)); BX += 2;
+        write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL)); BX++;
+        write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES)); BX++;
+        write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL)); BX++;
+        write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE)); BX += 2;
+        for(i=0;i<8;i++) {
+            write_word(ES, BX, read_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i));
+            BX += 2;
+        }
+        write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START)); BX += 2;
+        write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE)); BX++;
+        /* current font */
+        write_word(ES, BX, read_word(0, 0x1f * 4)); BX += 2;
+        write_word(ES, BX, read_word(0, 0x1f * 4 + 2)); BX += 2;
+        write_word(ES, BX, read_word(0, 0x43 * 4)); BX += 2;
+        write_word(ES, BX, read_word(0, 0x43 * 4 + 2)); BX += 2;
+    }
+    if (CX & 4) {
+        /* XXX: check this */
+        write_byte(ES, BX, inb(VGAREG_DAC_STATE)); BX++; /* read/write mode dac */
+        write_byte(ES, BX, inb(VGAREG_DAC_WRITE_ADDRESS)); BX++; /* pix address */
+        write_byte(ES, BX, inb(VGAREG_PEL_MASK)); BX++;
+        // Set the whole dac always, from 0
+        outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+        for(i=0;i<256*3;i++) {
+            write_byte(ES, BX, inb(VGAREG_DAC_DATA)); BX++;
+        }
+        write_byte(ES, BX, 0); BX++; /* color select register */
+    }
+    return BX;
+}
+
+uint16_t biosfn_restore_video_state(uint16_t CX, uint16_t ES, uint16_t BX)
+{
+    uint16_t i, crtc_addr, v, addr1, ar_index;
+
+    if (CX & 1) {
+        // Reset Attribute Ctl flip-flop
+        inb(VGAREG_ACTL_RESET);
+
+        crtc_addr = read_word(ES, BX + 0x40);
+        addr1 = BX;
+        BX += 5;
+
+        for(i=1;i<=4;i++){
+            outb(VGAREG_SEQU_ADDRESS, i);
+            outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
+        }
+        outb(VGAREG_SEQU_ADDRESS, 0);
+        outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
+
+        // Disable CRTC write protection
+        outw(crtc_addr,0x0011);
+        // Set CRTC regs
+        for(i=0;i<=0x18;i++) {
+            if (i != 0x11) {
+                outb(crtc_addr,i);
+                outb(crtc_addr+1, read_byte(ES, BX));
+            }
+            BX++;
+        }
+        // select crtc base address
+        v = inb(VGAREG_READ_MISC_OUTPUT) & ~0x01;
+        if (crtc_addr == 0x3d4)
+            v |= 0x01;
+        outb(VGAREG_WRITE_MISC_OUTPUT, v);
+
+        // enable write protection if needed
+        outb(crtc_addr, 0x11);
+        outb(crtc_addr+1, read_byte(ES, BX - 0x18 + 0x11));
+
+        // Set Attribute Ctl
+        ar_index = read_byte(ES, addr1 + 0x03);
+        inb(VGAREG_ACTL_RESET);
+        for(i=0;i<=0x13;i++) {
+            outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
+            outb(VGAREG_ACTL_WRITE_DATA, read_byte(ES, BX)); BX++;
+        }
+        outb(VGAREG_ACTL_ADDRESS, ar_index);
+        inb(VGAREG_ACTL_RESET);
+
+        for(i=0;i<=8;i++) {
+            outb(VGAREG_GRDC_ADDRESS,i);
+            outb(VGAREG_GRDC_DATA, read_byte(ES, BX)); BX++;
+        }
+        BX += 2; /* crtc_addr */
+        BX += 4; /* plane latches */
+
+        outb(VGAREG_SEQU_ADDRESS, read_byte(ES, addr1)); addr1++;
+        outb(crtc_addr, read_byte(ES, addr1)); addr1++;
+        outb(VGAREG_GRDC_ADDRESS, read_byte(ES, addr1)); addr1++;
+        addr1++;
+        outb(crtc_addr - 0x4 + 0xa, read_byte(ES, addr1)); addr1++;
+    }
+    if (CX & 2) {
+        write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE, read_byte(ES, BX)); BX++;
+        write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS, read_word(ES, BX)); BX += 2;
+        write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, read_word(ES, BX)); BX += 2;
+        write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS, read_word(ES, BX)); BX += 2;
+        write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, read_byte(ES, BX)); BX++;
+        write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, read_word(ES, BX)); BX += 2;
+        write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL, read_byte(ES, BX)); BX++;
+        write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES, read_byte(ES, BX)); BX++;
+        write_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL, read_byte(ES, BX)); BX++;
+        write_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE, read_word(ES, BX)); BX += 2;
+        for(i=0;i<8;i++) {
+            write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i, read_word(ES, BX));
+            BX += 2;
+        }
+        write_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START, read_word(ES, BX)); BX += 2;
+        write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE, read_byte(ES, BX)); BX++;
+        /* current font */
+        write_word(0, 0x1f * 4, read_word(ES, BX)); BX += 2;
+        write_word(0, 0x1f * 4 + 2, read_word(ES, BX)); BX += 2;
+        write_word(0, 0x43 * 4, read_word(ES, BX)); BX += 2;
+        write_word(0, 0x43 * 4 + 2, read_word(ES, BX)); BX += 2;
+    }
+    if (CX & 4) {
+        BX++;
+        v = read_byte(ES, BX); BX++;
+        outb(VGAREG_PEL_MASK, read_byte(ES, BX)); BX++;
+        // Set the whole dac always, from 0
+        outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+        for(i=0;i<256*3;i++) {
+            outb(VGAREG_DAC_DATA, read_byte(ES, BX)); BX++;
+        }
+        BX++;
+        outb(VGAREG_DAC_WRITE_ADDRESS, v);
+    }
+    return BX;
+}
+
+// ============================================================================================
+//
+// Video Utils
+//
+// ============================================================================================
+
+// --------------------------------------------------------------------------------------------
+static uint8_t find_vga_entry(uint8_t mode)
+{
+ uint8_t i,line=0xFF;
+ for(i=0;i<=MODE_MAX;i++)
+  if(vga_modes[i].svgamode==mode)
+   {line=i;
+    break;
+   }
+ return line;
+}
+
+/* =========================================================== */
+/*
+ * Misc Utils
+*/
+/* =========================================================== */
+
+uint8_t read_byte(uint16_t seg, uint16_t offset)
+{
+    return( *(seg:>(uint8_t *)offset) );
+}
+
+void write_byte(uint16_t seg, uint16_t offset, uint8_t data)
+{
+    *(seg:>(uint8_t *)offset) = data;
+}
+
+uint16_t read_word(uint16_t seg, uint16_t offset)
+{
+    return( *(seg:>(uint16_t *)offset) );
+}
+
+void write_word(uint16_t seg, uint16_t offset, uint16_t data)
+{
+    *(seg:>(uint16_t *)offset) = data;
+}
+
+uint32_t read_dword(uint16_t seg, uint16_t offset)
+{
+    return( *(seg:>(uint32_t *)offset) );
+}
+
+void write_dword(uint16_t seg, uint16_t offset, uint32_t data)
+{
+    *(seg:>(uint32_t *)offset) = data;
+}
+
+#ifdef VGA_DEBUG
+void __cdecl unimplemented()
+{
+ printf("--> Unimplemented\n");
+}
+
+void __cdecl unknown()
+{
+ printf("--> Unknown int10\n");
+}
+
+#undef VBE_PRINTF_PORT
+#define VBE_PRINTF_PORT 0x504
+
+// --------------------------------------------------------------------------------------------
+void __cdecl printf(char *s, ...)
+{
+    char        c;
+    Boolean     in_format;
+    unsigned    format_width, i;
+    uint16_t    arg, digit, nibble;
+    uint16_t STACK_BASED *arg_ptr;
+
+    arg_ptr = (uint16_t STACK_BASED *)&s;
+
+    in_format    = 0;
+    format_width = 0;
+
+    while (c = *s) {
+        if (c == '%') {
+            in_format    = 1;
+            format_width = 0;
+        } else if (in_format) {
+            if ((c >= '0') && (c <= '9')) {
+                format_width = (format_width * 10) + (c - '0');
+            } else if (c == 'x') {
+                arg_ptr++; // increment to next arg
+                arg = *arg_ptr;
+                if (format_width == 0)
+                    format_width = 4;
+                i = 0;
+                digit = format_width - 1;
+                for (i = 0; i < format_width; i++) {
+                    nibble = (arg >> (4 * digit)) & 0x000f;
+                    if (nibble <= 9)
+                        outb(VBE_PRINTF_PORT, nibble + '0');
+                    else
+                        outb(VBE_PRINTF_PORT, (nibble - 10) + 'A');
+                    digit--;
+                }
+                in_format = 0;
+            }
+            //else if (c == 'd') {
+            //  in_format = 0;
+            //  }
+        } else {
+            outb(VBE_PRINTF_PORT, c);
+        }
+        ++s;
+    }
+}
+#endif
+
+//@todo: rearrange, call only from VBE module?
+extern void vbe_biosfn_return_controller_information(uint16_t STACK_BASED *AX, uint16_t ES, uint16_t DI);
+extern void vbe_biosfn_return_mode_information(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t ES, uint16_t DI);
+extern void vbe_biosfn_set_mode(uint16_t STACK_BASED *AX, uint16_t BX, uint16_t ES, uint16_t DI);
+extern void vbe_biosfn_save_restore_state(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t DX, uint16_t ES, uint16_t STACK_BASED *BX);
+
+// --------------------------------------------------------------------------------------------
+/*
+ * int10 main dispatcher
+ */
+void __cdecl int10_func(uint16_t DI, uint16_t SI, uint16_t BP, uint16_t SP, uint16_t BX,
+                        uint16_t DX, uint16_t CX, uint16_t AX, uint16_t DS, uint16_t ES, uint16_t FLAGS)
+{
+
+ // BIOS functions
+ switch(GET_AH())
+  {
+   case 0x00:
+     biosfn_set_video_mode(GET_AL());
+     switch(GET_AL()&0x7F)
+      {case 6:
+        SET_AL(0x3F);
+        break;
+       case 0:
+       case 1:
+       case 2:
+       case 3:
+       case 4:
+       case 5:
+       case 7:
+        SET_AL(0x30);
+        break;
+      default:
+        SET_AL(0x20);
+      }
+     break;
+   case 0x01:
+     biosfn_set_cursor_shape(GET_CH(),GET_CL());
+     break;
+   case 0x02:
+     biosfn_set_cursor_pos(GET_BH(),DX);
+     break;
+   case 0x03:
+     vga_get_cursor_pos(GET_BH(), &CX, &DX);
+     break;
+   case 0x04:
+     // Read light pen pos (unimplemented)
+#ifdef VGA_DEBUG
+     unimplemented();
+#endif
+     AX=0x00;
+     BX=0x00;
+     CX=0x00;
+     DX=0x00;
+     break;
+   case 0x05:
+     biosfn_set_active_page(GET_AL());
+     break;
+   case 0x06:
+     biosfn_scroll(GET_AL(),GET_BH(),GET_CH(),GET_CL(),GET_DH(),GET_DL(),0xFF,SCROLL_UP);
+     break;
+   case 0x07:
+     biosfn_scroll(GET_AL(),GET_BH(),GET_CH(),GET_CL(),GET_DH(),GET_DL(),0xFF,SCROLL_DOWN);
+     break;
+   case 0x08:
+     vga_read_char_attr(GET_BH(), &AX);
+     break;
+   case 0x09:
+     biosfn_write_char_attr(GET_AL(),GET_BH(),GET_BL(),CX);
+     break;
+   case 0x0A:
+     biosfn_write_char_only(GET_AL(),GET_BH(),GET_BL(),CX);
+     break;
+   case 0x0C:
+     biosfn_write_pixel(GET_BH(),GET_AL(),CX,DX);
+     break;
+   case 0x0D:
+     vga_read_pixel(GET_BH(), CX, DX, &AX);
+     break;
+   case 0x0E:
+     // Ralf Brown Interrupt list is WRONG on bh(page)
+     // We do output only on the current page !
+#ifdef VGA_DEBUG
+     printf("write_teletype %02x\n", GET_AL());
+#endif
+
+     biosfn_write_teletype(GET_AL(),0xff,GET_BL(),NO_ATTR);
+     break;
+   case 0x10:
+     // All other functions of group AH=0x10 rewritten in assembler
+     biosfn_perform_gray_scale_summing(BX,CX);
+     break;
+   case 0x11:
+     switch(GET_AL())
+      {
+       case 0x00:
+       case 0x10:
+        biosfn_load_text_user_pat(GET_AL(),ES,BP,CX,DX,GET_BL(),GET_BH());
+        break;
+       case 0x01:
+       case 0x11:
+        biosfn_load_text_8_14_pat(GET_AL(),GET_BL());
+        break;
+       case 0x02:
+       case 0x12:
+        biosfn_load_text_8_8_pat(GET_AL(),GET_BL());
+        break;
+       case 0x04:
+       case 0x14:
+        biosfn_load_text_8_16_pat(GET_AL(),GET_BL());
+        break;
+       case 0x20:
+        biosfn_load_gfx_8_8_chars(ES,BP);
+        break;
+       case 0x21:
+        biosfn_load_gfx_user_chars(ES,BP,CX,GET_BL(),GET_DL());
+        break;
+       case 0x22:
+        biosfn_load_gfx_8_14_chars(GET_BL());
+        break;
+       case 0x23:
+        biosfn_load_gfx_8_8_dd_chars(GET_BL());
+        break;
+       case 0x24:
+        biosfn_load_gfx_8_16_chars(GET_BL());
+        break;
+       case 0x30:
+        vga_get_font_info(GET_BH(), &ES, &BP, &CX, &DX);
+        break;
+#ifdef VGA_DEBUG
+       default:
+        unknown();
+#endif
+      }
+
+     break;
+   case 0x12:
+     switch(GET_BL())
+      {
+       case 0x20:
+        biosfn_alternate_prtsc();
+        break;
+       case 0x35:
+        biosfn_switch_video_interface(GET_AL(),ES,DX);
+        SET_AL(0x12);
+        break;
+       case 0x36:
+        biosfn_enable_video_refresh_control(GET_AL());
+        SET_AL(0x12);
+        break;
+#ifdef VGA_DEBUG
+       default:
+        unknown();
+#endif
+      }
+     break;
+   case 0x13:
+     biosfn_write_string(GET_AL(),GET_BH(),GET_BL(),CX,GET_DH(),GET_DL(),ES,BP);
+     break;
+   case 0x1B:
+     biosfn_read_state_info(BX,ES,DI);
+     SET_AL(0x1B);
+     break;
+   case 0x1C:
+     switch(GET_AL())
+      {
+       case 0x00:
+        vga_get_video_state_size(CX,&BX);
+        break;
+       case 0x01:
+        biosfn_save_video_state(CX,ES,BX);
+        break;
+       case 0x02:
+        biosfn_restore_video_state(CX,ES,BX);
+        break;
+#ifdef VGA_DEBUG
+       default:
+        unknown();
+#endif
+      }
+     SET_AL(0x1C);
+     break;
+
+#ifdef VBE
+   case 0x4f:
+     if (vbe_has_vbe_display()) {
+       switch(GET_AL())
+       {
+         case 0x00:
+          vbe_biosfn_return_controller_information(&AX,ES,DI);
+          break;
+         case 0x01:
+          vbe_biosfn_return_mode_information(&AX,CX,ES,DI);
+          break;
+         case 0x02:
+          vbe_biosfn_set_mode(&AX,BX,ES,DI);
+          break;
+         case 0x04:
+          vbe_biosfn_save_restore_state(&AX, CX, DX, ES, &BX);
+          break;
+         case 0x09:
+          //FIXME
+#ifdef VGA_DEBUG
+          unimplemented();
+#endif
+          // function failed
+          AX=0x100;
+          break;
+         case 0x0A:
+          //FIXME
+#ifdef VGA_DEBUG
+          unimplemented();
+#endif
+          // function failed
+          AX=0x100;
+          break;
+         default:
+#ifdef VGA_DEBUG
+          unknown();
+#endif
+          // function failed
+          AX=0x100;
+          }
+        }
+        else {
+          // No VBE display
+          AX=0x0100;
+          }
+        break;
+#endif
+
+#ifdef VGA_DEBUG
+   default:
+     unknown();
+#endif
+  }
+}
+
+#ifdef VBE
+//#include "vbe.c"
+#endif
+
+#ifdef CIRRUS
+#include "clext.c"
+#endif
+
+// --------------------------------------------------------------------------------------------
+
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vgabios.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vgabios.h	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vgabios.h	(revision 43609)
@@ -0,0 +1,64 @@
+#ifndef vgabios_h_included
+#define vgabios_h_included
+
+/* Types */
+//typedef unsigned char  Bit8u;
+//typedef unsigned short Bit16u;
+//typedef unsigned long  Bit32u;
+typedef unsigned short Boolean;
+
+/* Defines */
+
+#define SET_AL(val8) AX = ((AX & 0xff00) | (val8))
+#define SET_BL(val8) BX = ((BX & 0xff00) | (val8))
+#define SET_CL(val8) CX = ((CX & 0xff00) | (val8))
+#define SET_DL(val8) DX = ((DX & 0xff00) | (val8))
+#define SET_AH(val8) AX = ((AX & 0x00ff) | ((val8) << 8))
+#define SET_BH(val8) BX = ((BX & 0x00ff) | ((val8) << 8))
+#define SET_CH(val8) CX = ((CX & 0x00ff) | ((val8) << 8))
+#define SET_DH(val8) DX = ((DX & 0x00ff) | ((val8) << 8))
+
+#define GET_AL() ( AX & 0x00ff )
+#define GET_BL() ( BX & 0x00ff )
+#define GET_CL() ( CX & 0x00ff )
+#define GET_DL() ( DX & 0x00ff )
+#define GET_AH() ( AX >> 8 )
+#define GET_BH() ( BX >> 8 )
+#define GET_CH() ( CX >> 8 )
+#define GET_DH() ( DX >> 8 )
+
+#define SET_CF()     FLAGS |= 0x0001
+#define CLEAR_CF()   FLAGS &= 0xfffe
+#define GET_CF()     (FLAGS & 0x0001)
+
+#define SET_ZF()     FLAGS |= 0x0040
+#define CLEAR_ZF()   FLAGS &= 0xffbf
+#define GET_ZF()     (FLAGS & 0x0040)
+
+#define SCROLL_DOWN 0
+#define SCROLL_UP   1
+#define NO_ATTR     2
+#define WITH_ATTR   3
+
+#define SCREEN_SIZE(x,y) (((x*y*2)|0x00ff)+1)
+#define SCREEN_MEM_START(x,y,p) ((((x*y*2)|0x00ff)+1)*p)
+#define SCREEN_IO_START(x,y,p) ((((x*y)|0x00ff)+1)*p)
+
+/* Macro for stack-based pointers. */
+#define STACK_BASED _based(_segname("_STACK"))
+
+/* Output. */
+extern void __cdecl printf(char *s, ...);
+
+/* VGA BIOS routines called by VBE. */
+extern void biosfn_set_video_mode(uint8_t mode);
+extern uint16_t biosfn_read_video_state_size2(uint16_t state);
+extern uint16_t biosfn_save_video_state(uint16_t CX, uint16_t ES, uint16_t BX);
+extern uint16_t biosfn_restore_video_state(uint16_t CX, uint16_t ES, uint16_t BX);
+
+/* Allow stand-alone compilation. */
+#ifndef VBOX_VERSION_STRING
+#include <VBox/version.h>
+#endif
+
+#endif
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vgadefs.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vgadefs.h	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vgadefs.h	(revision 43609)
@@ -0,0 +1,69 @@
+/*
+ *
+ * BIOS Memory
+ *
+ */
+#define BIOSMEM_SEG 0x40
+
+#define BIOSMEM_INITIAL_MODE  0x10
+#define BIOSMEM_CURRENT_MODE  0x49
+#define BIOSMEM_NB_COLS       0x4A
+#define BIOSMEM_PAGE_SIZE     0x4C
+#define BIOSMEM_CURRENT_START 0x4E
+#define BIOSMEM_CURSOR_POS    0x50
+#define BIOSMEM_CURSOR_TYPE   0x60
+#define BIOSMEM_CURRENT_PAGE  0x62
+#define BIOSMEM_CRTC_ADDRESS  0x63
+#define BIOSMEM_CURRENT_MSR   0x65
+#define BIOSMEM_CURRENT_PAL   0x66
+#define BIOSMEM_NB_ROWS       0x84
+#define BIOSMEM_CHAR_HEIGHT   0x85
+#define BIOSMEM_VIDEO_CTL     0x87
+#define BIOSMEM_SWITCHES      0x88
+#define BIOSMEM_MODESET_CTL   0x89
+#define BIOSMEM_DCC_INDEX     0x8A
+#define BIOSMEM_VS_POINTER    0xA8
+#define BIOSMEM_VBE_FLAG      0xB9
+#define BIOSMEM_VBE_MODE      0xBA
+
+
+/*
+ *
+ * VGA registers
+ *
+ */
+#define VGAREG_ACTL_ADDRESS            0x3c0
+#define VGAREG_ACTL_WRITE_DATA         0x3c0
+#define VGAREG_ACTL_READ_DATA          0x3c1
+
+#define VGAREG_INPUT_STATUS            0x3c2
+#define VGAREG_WRITE_MISC_OUTPUT       0x3c2
+#define VGAREG_VIDEO_ENABLE            0x3c3
+#define VGAREG_SEQU_ADDRESS            0x3c4
+#define VGAREG_SEQU_DATA               0x3c5
+
+#define VGAREG_PEL_MASK                0x3c6
+#define VGAREG_DAC_STATE               0x3c7
+#define VGAREG_DAC_READ_ADDRESS        0x3c7
+#define VGAREG_DAC_WRITE_ADDRESS       0x3c8
+#define VGAREG_DAC_DATA                0x3c9
+
+#define VGAREG_READ_FEATURE_CTL        0x3ca
+#define VGAREG_READ_MISC_OUTPUT        0x3cc
+
+#define VGAREG_GRDC_ADDRESS            0x3ce
+#define VGAREG_GRDC_DATA               0x3cf
+
+#define VGAREG_MDA_CRTC_ADDRESS        0x3b4
+#define VGAREG_MDA_CRTC_DATA           0x3b5
+#define VGAREG_VGA_CRTC_ADDRESS        0x3d4
+#define VGAREG_VGA_CRTC_DATA           0x3d5
+
+#define VGAREG_MDA_WRITE_FEATURE_CTL   0x3ba
+#define VGAREG_VGA_WRITE_FEATURE_CTL   0x3da
+#define VGAREG_ACTL_RESET              0x3da
+
+#define VGAREG_MDA_MODECTL             0x3b8
+#define VGAREG_CGA_MODECTL             0x3d8
+#define VGAREG_CGA_PALETTE             0x3d9
+
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vgadefs.inc
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vgadefs.inc	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vgadefs.inc	(revision 43609)
@@ -0,0 +1,58 @@
+VGAREG_ACTL_ADDRESS             EQU     3C0h
+VGAREG_ACTL_WRITE_DATA          EQU     3C0h
+VGAREG_ACTL_READ_DATA           EQU     3C1h
+VGAREG_ACTL_RESET               EQU     3DAh
+
+VGAREG_DAC_READ_ADDRESS         EQU     3C7h
+VGAREG_DAC_WRITE_ADDRESS        EQU     3C8h
+VGAREG_DAC_DATA                 EQU     3C9h
+
+VGAREG_PEL_MASK                 EQU     3C6h
+
+VGAREG_SEQU_ADDRESS             EQU     3C4h
+VGAREG_SEQU_DATA                EQU     3C5h
+
+VGAREG_GRDC_ADDRESS             EQU     3CEh
+VGAREG_GRDC_DATA                EQU     3CFh
+
+VGAREG_MDA_CRTC_ADDRESS         EQU     3B4h
+VGAREG_VGA_CRTC_ADDRESS         EQU     3D4h
+VGAREG_VGA_CRTC_DATA            EQU     3D5h
+
+
+VGAREG_READ_MISC_OUTPUT         EQU     3CCh
+VGAREG_WRITE_MISC_OUTPUT        EQU     3C2h
+
+BIOSMEM_SEG                     EQU     40h
+BIOSMEM_CURRENT_MODE            EQU     49h
+BIOSMEM_NB_COLS                 EQU     4Ah
+BIOSMEM_CURRENT_PAGE            EQU     62h
+BIOSMEM_CRTC_ADDRESS            EQU     63h
+BIOSMEM_VIDEO_CTL               EQU     87h
+BIOSMEM_SWITCHES                EQU     88h
+BIOSMEM_MODESET_CTL             EQU     89h
+BIOSMEM_DCC_INDEX               EQU     8Ah
+
+BIOSMEM_VBE_FLAG                EQU     0B9h
+BIOSMEM_VBE_MODE                EQU     0BAh
+
+VBE_DISPI_IOPORT_INDEX          EQU     1CEh
+VBE_DISPI_IOPORT_DATA           EQU     1CFh
+
+VBE_DISPI_INDEX_ID              EQU     00h
+VBE_DISPI_INDEX_XRES            EQU     01h
+VBE_DISPI_INDEX_YRES            EQU     02h
+VBE_DISPI_INDEX_BPP             EQU     03h
+VBE_DISPI_INDEX_ENABLE          EQU     04h
+VBE_DISPI_INDEX_BANK            EQU     05h
+VBE_DISPI_INDEX_VIRT_WIDTH      EQU     06h
+VBE_DISPI_INDEX_VIRT_HEIGHT     EQU     07h
+VBE_DISPI_INDEX_X_OFFSET        EQU     08h
+VBE_DISPI_INDEX_Y_OFFSET        EQU     09h
+
+VBE_DISPI_ENABLED               EQU     01h
+VBE_DISPI_GETCAPS               EQU     02h
+VBE_DISPI_8BIT_DAC              EQU     20h
+
+VBE_DISPI_ID0                   EQU     0B0C0h
+VBE_DISPI_ID4                   EQU     0B0C4h
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vgafonts.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vgafonts.h	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vgafonts.h	(revision 43609)
@@ -0,0 +1,868 @@
+/*
+ * These fonts come from ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+ * The package is (c) by Joseph Gil
+ * The individual fonts are public domain
+ */
+static uint8_t vgafont8[256*8]=
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e,
+ 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e,
+ 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00,
+ 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00,
+ 0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c,
+ 0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00,
+ 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff,
+ 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
+ 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff,
+ 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78,
+ 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18,
+ 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0,
+ 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0,
+ 0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99,
+ 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00,
+ 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00,
+ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
+ 0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00,
+ 0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00,
+ 0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff,
+ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
+ 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00,
+ 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00,
+ 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00,
+ 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00,
+ 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00,
+ 0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00,
+ 0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00,
+ 0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00,
+ 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00,
+ 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00,
+ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60,
+ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
+ 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00,
+ 0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00,
+ 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00,
+ 0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00,
+ 0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00,
+ 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00,
+ 0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00,
+ 0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00,
+ 0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00,
+ 0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00,
+ 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00,
+ 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60,
+ 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00,
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
+ 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00,
+ 0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00,
+ 0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00,
+ 0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00,
+ 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00,
+ 0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00,
+ 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00,
+ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00,
+ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00,
+ 0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00,
+ 0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00,
+ 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00,
+ 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00,
+ 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00,
+ 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00,
+ 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00,
+ 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00,
+ 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
+ 0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00,
+ 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00,
+ 0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00,
+ 0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00,
+ 0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00,
+ 0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00,
+ 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00,
+ 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00,
+ 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00,
+ 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00,
+ 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00,
+ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00,
+ 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00,
+ 0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00,
+ 0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00,
+ 0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
+ 0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
+ 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00,
+ 0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78,
+ 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00,
+ 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00,
+ 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00,
+ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0,
+ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e,
+ 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00,
+ 0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00,
+ 0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00,
+ 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
+ 0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00,
+ 0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00,
+ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00,
+ 0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00,
+ 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00,
+ 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x18, 0x0c, 0x78,
+ 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
+ 0x1c, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
+ 0x7e, 0xc3, 0x3c, 0x06, 0x3e, 0x66, 0x3f, 0x00,
+ 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
+ 0xe0, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
+ 0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
+ 0x00, 0x00, 0x78, 0xc0, 0xc0, 0x78, 0x0c, 0x38,
+ 0x7e, 0xc3, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0xcc, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
+ 0xe0, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
+ 0xcc, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x7c, 0xc6, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0xe0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00,
+ 0x30, 0x30, 0x00, 0x78, 0xcc, 0xfc, 0xcc, 0x00,
+ 0x1c, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00,
+ 0x00, 0x00, 0x7f, 0x0c, 0x7f, 0xcc, 0x7f, 0x00,
+ 0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00,
+ 0x78, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0xe0, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
+ 0x00, 0xe0, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
+ 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
+ 0xc3, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00,
+ 0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18,
+ 0x38, 0x6c, 0x64, 0xf0, 0x60, 0xe6, 0xfc, 0x00,
+ 0xcc, 0xcc, 0x78, 0xfc, 0x30, 0xfc, 0x30, 0x30,
+ 0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7,
+ 0x0e, 0x1b, 0x18, 0x3c, 0x18, 0x18, 0xd8, 0x70,
+ 0x1c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
+ 0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x00, 0x1c, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0x1c, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
+ 0x00, 0xf8, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0x00,
+ 0xfc, 0x00, 0xcc, 0xec, 0xfc, 0xdc, 0xcc, 0x00,
+ 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00,
+ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x60, 0xc0, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0xc0, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00,
+ 0xc3, 0xc6, 0xcc, 0xde, 0x33, 0x66, 0xcc, 0x0f,
+ 0xc3, 0xc6, 0xcc, 0xdb, 0x37, 0x6f, 0xcf, 0x03,
+ 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00,
+ 0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00,
+ 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88,
+ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
+ 0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, 0xdb, 0xee,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00,
+ 0x00, 0x78, 0xcc, 0xf8, 0xcc, 0xf8, 0xc0, 0xc0,
+ 0x00, 0xfc, 0xcc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00,
+ 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00,
+ 0xfc, 0xcc, 0x60, 0x30, 0x60, 0xcc, 0xfc, 0x00,
+ 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xc0,
+ 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0xfc, 0x30, 0x78, 0xcc, 0xcc, 0x78, 0x30, 0xfc,
+ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00,
+ 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00,
+ 0x1c, 0x30, 0x18, 0x7c, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00,
+ 0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0,
+ 0x38, 0x60, 0xc0, 0xf8, 0xc0, 0x60, 0x38, 0x00,
+ 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00,
+ 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00,
+ 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0xfc, 0x00,
+ 0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xfc, 0x00,
+ 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xfc, 0x00,
+ 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70,
+ 0x30, 0x30, 0x00, 0xfc, 0x00, 0x30, 0x30, 0x00,
+ 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00,
+ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c,
+ 0x78, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00,
+ 0x70, 0x18, 0x30, 0x60, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static uint8_t vgafont14[256*14]=
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x06, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x66, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe6, 0x66, 0x6c, 0x6c, 0x78, 0x6c, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x7c, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00,
+ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x70, 0x1c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
+ 0x00, 0xc6, 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00,
+ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
+ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
+ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfc, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x40, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static uint8_t vgafont16[256*16]=
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
+ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
+ 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, 0x0c, 0x1f, 0x00, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
+ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
+ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static uint8_t vgafont14alt[20*15+1]=
+{
+ 0x1d,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x22,
+ 0x00, 0x63, 0x63, 0x63, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2b,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x2d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4d,
+ 0x00, 0x00, 0xc3, 0xe7, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00,
+ 0x54,
+ 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x56,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x57,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00,
+ 0x58,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00,
+ 0x59,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x5a,
+ 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x61, 0xc3, 0xff, 0x00, 0x00, 0x00,
+ 0x6d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00,
+ 0x76,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x77,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00,
+ 0x91,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00,
+ 0x9b,
+ 0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x9d,
+ 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x9e,
+ 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00,
+ 0xf1,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0xf6,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00
+};
+static uint8_t vgafont16alt[19*17+1]=
+{
+ 0x1d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30,
+ 0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x4d,
+ 0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x54,
+ 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x56,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x57,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x58,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x59,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x5a,
+ 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x6d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00,
+ 0x76,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x77,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x91,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00,
+ 0x9b,
+ 0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x9d,
+ 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x9e,
+ 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
+ 0xab,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, 0x0c, 0x1f, 0x00, 0x00,
+ 0xac,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00,
+ 0x00
+};
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vgarom.asm
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vgarom.asm	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vgarom.asm	(revision 43609)
@@ -0,0 +1,1056 @@
+;; ============================================================================================
+;;
+;;  Copyright (C) 2001,2002 the LGPL VGABios developers Team
+;;
+;;  This library is free software; you can redistribute it and/or
+;;  modify it under the terms of the GNU Lesser General Public
+;;  License as published by the Free Software Foundation; either
+;;  version 2 of the License, or (at your option) any later version.
+;;
+;;  This library 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
+;;  Lesser General Public License for more details.
+;;
+;;  You should have received a copy of the GNU Lesser General Public
+;;  License along with this library; if not, write to the Free Software
+;;  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+;;
+;; ============================================================================================
+;;
+;;  This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+;;  You can NOT drive any physical vga card with it.
+;;
+;; ============================================================================================
+;;
+
+
+; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+; a choice of LGPL license versions is made available with the language indicating
+; that LGPLv2 or any later version may be used, or where a choice of which version
+; of the LGPL is applied is otherwise unspecified.
+
+include vgadefs.inc
+
+public  vgabios_int10_handler
+
+VGAROM	segment	public 'CODE'
+
+; Implemented in C
+extrn   _int10_func:near
+extrn   _vgabios_init_func:near
+
+ifdef VBE
+; Implemented in separate assembly module
+extrn	vbe_biosfn_return_current_mode:near
+extrn	vbe_biosfn_display_window_control:near
+extrn	vbe_biosfn_set_get_logical_scan_line_length:near
+extrn	vbe_biosfn_set_get_display_start:near
+extrn	vbe_biosfn_set_get_dac_palette_format:near
+extrn	vbe_biosfn_set_get_palette_data:near
+extrn	vbe_biosfn_return_protected_mode_interface:near
+endif
+
+ifdef VGA_DEBUG
+extrn	_int10_debugmsg:near
+extrn	_printf:near
+extrn	_unimplemented:near
+extrn	_unknown:near
+endif
+
+vgabios_start:
+
+db      055h, 0AAh      ; ROM signature, required for expansion ROMs
+db      40h             ; ROM module length in units of 512 bytes */
+
+
+vgabios_entry_point:
+
+  jmp _vgabios_init_func
+
+	org	1Eh
+
+	db	'IBM',0
+
+;;
+;;  int10 handled here
+;;
+
+.286
+
+vgabios_int10_handler:
+  pushf
+ifdef VGA_DEBUG
+  push es
+  push ds
+  pusha
+  mov   bx, 0C000h
+  mov   ds, bx
+  call _int10_debugmsg
+  popa
+  pop ds
+  pop es
+endif
+  cmp   ah, 0Fh
+  jne   int10_test_1A
+  call  biosfn_get_video_mode
+  jmp   int10_end
+int10_test_1A:
+  cmp   ah, 1Ah
+  jne   int10_test_0B
+  call  biosfn_group_1A
+  jmp   int10_end
+int10_test_0B:
+  cmp   ah, 0Bh
+  jne   int10_test_1103
+  call  biosfn_group_0B
+  jmp   int10_end
+int10_test_1103:
+  cmp   ax, 1103h
+  jne   int10_test_12
+  call  biosfn_set_text_block_specifier
+  jmp   int10_end
+int10_test_12:
+  cmp   ah, 12h
+  jne   int10_test_101B
+  cmp   bl, 10h
+  jne   int10_test_BL30
+  call  biosfn_get_ega_info
+  jmp   int10_end
+int10_test_BL30:
+  cmp   bl, 30h
+  jne   int10_test_BL31
+  call  biosfn_select_vert_res
+  jmp   int10_end
+int10_test_BL31:
+  cmp   bl, 31h
+  jne   int10_test_BL32
+  call  biosfn_enable_default_palette_loading
+  jmp   int10_end
+int10_test_BL32:
+  cmp   bl, 32h
+  jne   int10_test_BL33
+  call  biosfn_enable_video_addressing
+  jmp   int10_end
+int10_test_BL33:
+  cmp   bl, 33h
+  jne   int10_test_BL34
+  call  biosfn_enable_grayscale_summing
+  jmp   int10_end
+int10_test_BL34:
+  cmp   bl, 34h
+  jne   int10_normal
+  call  biosfn_enable_cursor_emulation
+  jmp   int10_end
+int10_test_101B:
+  cmp   ax, 101Bh
+  je    int10_normal
+  cmp   ah, 10h
+ifndef VBE
+  jne   int10_normal
+else
+  jne   int10_test_4F
+endif
+  call  biosfn_group_10
+  jmp   int10_end
+ifdef VBE
+int10_test_4F:
+  cmp   ah, 4Fh
+  jne   int10_normal
+  cmp   al, 3
+  jne   int10_test_vbe_05
+  call  vbe_biosfn_return_current_mode
+  jmp   int10_end
+int10_test_vbe_05:
+  cmp   al, 5
+  jne   int10_test_vbe_06
+  call  vbe_biosfn_display_window_control
+  jmp   int10_end
+int10_test_vbe_06:
+  cmp   al, 6
+  jne   int10_test_vbe_07
+  call  vbe_biosfn_set_get_logical_scan_line_length
+  jmp   int10_end
+int10_test_vbe_07:
+  cmp   al, 7
+  jne   int10_test_vbe_08
+  call  vbe_biosfn_set_get_display_start
+  jmp   int10_end
+int10_test_vbe_08:
+  cmp   al, 8
+  jne   int10_test_vbe_09
+  call  vbe_biosfn_set_get_dac_palette_format
+  jmp   int10_end
+int10_test_vbe_09:
+  cmp   al, 9
+  jne   int10_test_vbe_0A
+  call  vbe_biosfn_set_get_palette_data
+  jmp   int10_end
+int10_test_vbe_0A:
+  cmp   al, 0Ah
+  jne   int10_normal
+  call  vbe_biosfn_return_protected_mode_interface
+  jmp   int10_end
+endif
+
+int10_normal:
+  push es
+  push ds
+  pusha
+
+;; We have to set ds to access the right data segment
+  mov   bx, 0C000h
+  mov   ds, bx
+  call _int10_func
+
+  popa
+  pop ds
+  pop es
+int10_end:
+  popf
+  iret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_group_0B:
+  cmp   bh, 0
+  je    biosfn_set_border_color
+  cmp   bh, 1
+  je    biosfn_set_palette
+ifdef VGA_DEBUG
+  call  _unknown
+endif
+  ret
+biosfn_set_border_color:
+  push  ax
+  push  bx
+  push  cx
+  push  dx
+  push  ds
+  mov   dx, BIOSMEM_SEG
+  mov   ds, dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  cmp   byte ptr ds:[BIOSMEM_CURRENT_MODE], 3
+  jbe   set_border_done
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 00h
+  out   dx, al
+  mov   al, bl
+  and   al, 0Fh
+  test  al, 08h
+  jz    set_low_border
+  add   al, 08h
+set_low_border:
+  out   dx, al
+  mov   cl, 1
+  and   bl, 10h
+set_intensity_loop:
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, cl
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  and   al, 0EFh
+  or    al, bl
+  mov   dx, VGAREG_ACTL_ADDRESS
+  out   dx, al
+  inc   cl
+  cmp   cl, 4
+  jne   set_intensity_loop
+set_border_done:
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   ds
+  pop   dx
+  pop   cx
+  pop   bx
+  pop   ax
+  ret
+biosfn_set_palette:
+  push  ax
+  push  bx
+  push  cx
+  push  dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   cl, 01
+  and   bl, 01
+set_cga_palette_loop:
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, cl
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  and   al, 0FEh
+  or    al, bl
+  mov   dx, VGAREG_ACTL_ADDRESS
+  out   dx, al
+  inc   cl
+  cmp   cl, 4
+  jne   set_cga_palette_loop
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   dx
+  pop   cx
+  pop   bx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_video_mode:
+  push  ds
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  push  bx
+  mov   bx, BIOSMEM_CURRENT_PAGE
+  mov   al, [bx]
+  pop   bx
+  mov   bh, al
+  push  bx
+  mov   bx, BIOSMEM_VIDEO_CTL
+  mov   ah, [bx]
+  and   ah, 80h
+  mov   bx, BIOSMEM_CURRENT_MODE
+  mov   al, [bx]
+  or    al, ah
+  mov   bx, BIOSMEM_NB_COLS
+  mov   ah, [bx]
+  pop   bx
+  pop   ds
+  ret
+
+;--------------------------------------------------------------------------------------------
+
+biosfn_group_10:
+  cmp   al, 0
+  jne   int10_test_1001
+  jmp   biosfn_set_single_palette_reg
+int10_test_1001:
+  cmp   al, 1
+  jne   int10_test_1002
+  jmp   biosfn_set_overscan_border_color
+int10_test_1002:
+  cmp   al, 2
+  jne   int10_test_1003
+  jmp   biosfn_set_all_palette_reg
+int10_test_1003:
+  cmp   al, 3
+  jne   int10_test_1007
+  jmp   biosfn_toggle_intensity
+int10_test_1007:
+  cmp   al, 7
+  jne   int10_test_1008
+  jmp   biosfn_get_single_palette_reg
+int10_test_1008:
+  cmp   al, 8
+  jne   int10_test_1009
+  jmp   biosfn_read_overscan_border_color
+int10_test_1009:
+  cmp   al, 9
+  jne   int10_test_1010
+  jmp   biosfn_get_all_palette_reg
+int10_test_1010:
+  cmp   al, 10h
+  jne   int10_test_1012
+  jmp  biosfn_set_single_dac_reg
+int10_test_1012:
+  cmp   al, 12h
+  jne   int10_test_1013
+  jmp   biosfn_set_all_dac_reg
+int10_test_1013:
+  cmp   al, 13h
+  jne   int10_test_1015
+  jmp   biosfn_select_video_dac_color_page
+int10_test_1015:
+  cmp   al, 15h
+  jne   int10_test_1017
+  jmp   biosfn_read_single_dac_reg
+int10_test_1017:
+  cmp   al, 17h
+  jne   int10_test_1018
+  jmp   biosfn_read_all_dac_reg
+int10_test_1018:
+  cmp   al, 18h
+  jne   int10_test_1019
+  jmp   biosfn_set_pel_mask
+int10_test_1019:
+  cmp   al, 19h
+  jne   int10_test_101A
+  jmp   biosfn_read_pel_mask
+int10_test_101A:
+  cmp   al, 1Ah
+  jne   int10_group_10_unknown
+  jmp   biosfn_read_video_dac_state
+int10_group_10_unknown:
+ifdef VGA_DEBUG
+  call  _unknown
+endif
+  ret
+
+biosfn_set_single_palette_reg:
+  cmp   bl, 14h
+  ja    no_actl_reg1
+  push  ax
+  push  dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, bl
+  out   dx, al
+  mov   al, bh
+  out   dx, al
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   dx
+  pop   ax
+no_actl_reg1:
+  ret
+
+;--------------------------------------------------------------------------------------------
+
+biosfn_set_overscan_border_color:
+  push  bx
+  mov   bl, 11h
+  call  biosfn_set_single_palette_reg
+  pop   bx
+  ret
+
+;--------------------------------------------------------------------------------------------
+
+biosfn_set_all_palette_reg:
+  push  ax
+  push  bx
+  push  cx
+  push  dx
+  mov   bx, dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   cl, 0
+  mov   dx, VGAREG_ACTL_ADDRESS
+set_palette_loop:
+  mov   al, cl
+  out   dx, al
+  mov   al, es:[bx]
+  out   dx, al
+  inc   bx
+  inc   cl
+  cmp   cl, 10h
+  jne   set_palette_loop
+  mov   al, 11h
+  out   dx, al
+  mov   al, es:[bx]
+  out   dx, al
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   dx
+  pop   cx
+  pop   bx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_toggle_intensity:
+  push  ax
+  push  bx
+  push  dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 10h
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  and   al, 0F7h
+  and   bl, 01
+  shl   bl, 3
+  or    al, bl
+  mov   dx, VGAREG_ACTL_ADDRESS
+  out   dx, al
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   dx
+  pop   bx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_single_palette_reg:
+  cmp   bl, 14h
+  ja    no_actl_reg2
+  push  ax
+  push  dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, bl
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  mov   bh, al
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   dx
+  pop   ax
+no_actl_reg2:
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_overscan_border_color:
+  push  ax
+  push  bx
+  mov   bl, 11h
+  call  biosfn_get_single_palette_reg
+  mov   al, bh
+  pop   bx
+  mov   bh, al
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_all_palette_reg:
+  push  ax
+  push  bx
+  push  cx
+  push  dx
+  mov   bx, dx
+  mov   cl, 0
+get_palette_loop:
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, cl
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  mov   es:[bx], al
+  inc   bx
+  inc   cl
+  cmp   cl, 10h
+  jne   get_palette_loop
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 11h
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  mov   es:[bx], al
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   dx
+  pop   cx
+  pop   bx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_single_dac_reg:
+  push  ax
+  push  dx
+  mov   dx, VGAREG_DAC_WRITE_ADDRESS
+  mov   al, bl
+  out   dx, al
+  mov   dx, VGAREG_DAC_DATA
+  pop   ax
+  push  ax
+  mov   al, ah
+  out   dx, al
+  mov   al, ch
+  out   dx, al
+  mov   al, cl
+  out   dx, al
+  pop   dx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_all_dac_reg:
+  push  ax
+  push  bx
+  push  cx
+  push  dx
+  mov   dx, VGAREG_DAC_WRITE_ADDRESS
+  mov   al, bl
+  out   dx, al
+  pop   dx
+  push  dx
+  mov   bx, dx
+  mov   dx, VGAREG_DAC_DATA
+set_dac_loop:
+  mov   al, es:[bx]
+  out   dx, al
+  inc   bx
+  mov   al, es:[bx]
+  out   dx, al
+  inc   bx
+  mov   al, es:[bx]
+  out   dx, al
+  inc   bx
+  dec   cx
+  jnz   set_dac_loop
+  pop   dx
+  pop   cx
+  pop   bx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_select_video_dac_color_page:
+  push  ax
+  push  bx
+  push  dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 10h
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  and   bl, 01
+  jnz   set_dac_page
+  and   al, 07Fh
+  shl   bh, 7
+  or    al, bh
+  mov   dx, VGAREG_ACTL_ADDRESS
+  out   dx, al
+  jmp   set_actl_normal
+set_dac_page:
+  push  ax
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 14h
+  out   dx, al
+  pop   ax
+  and   al, 80h
+  jnz   set_dac_16_page
+  shl   bh, 2
+set_dac_16_page:
+  and   bh, 0Fh
+  mov   al, bh
+  out   dx, al
+set_actl_normal:
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX
+  pop   dx
+  pop   bx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_single_dac_reg:
+  push  ax
+  push  dx
+  mov   dx, VGAREG_DAC_READ_ADDRESS
+  mov   al, bl
+  out   dx, al
+  pop   ax
+  mov   ah, al
+  mov   dx, VGAREG_DAC_DATA
+  in    al, dx
+  xchg  al, ah
+  push  ax
+  in    al, dx
+  mov   ch, al
+  in    al, dx
+  mov   cl, al
+  pop   dx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_all_dac_reg:
+  push  ax
+  push  bx
+  push  cx
+  push  dx
+  mov   dx, VGAREG_DAC_READ_ADDRESS
+  mov   al, bl
+  out   dx, al
+  pop   dx
+  push  dx
+  mov   bx, dx
+  mov   dx, VGAREG_DAC_DATA
+read_dac_loop:
+  in    al, dx
+  mov   es:[bx], al
+  inc   bx
+  in    al, dx
+  mov   es:[bx], al
+  inc   bx
+  in    al, dx
+  mov   es:[bx], al
+  inc   bx
+  dec   cx
+  jnz   read_dac_loop
+  pop   dx
+  pop   cx
+  pop   bx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_pel_mask:
+  push  ax
+  push  dx
+  mov   dx, VGAREG_PEL_MASK
+  mov   al, bl
+  out   dx, al
+  pop   dx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_pel_mask:
+  push  ax
+  push  dx
+  mov   dx, VGAREG_PEL_MASK
+  in    al, dx
+  mov   bl, al
+  pop   dx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_video_dac_state:
+  push  ax
+  push  dx
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 10h
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  mov   bl, al
+  shr   bl, 7
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 14h
+  out   dx, al
+  mov   dx, VGAREG_ACTL_READ_DATA
+  in    al, dx
+  mov   bh, al
+  and   bh, 0Fh
+  test  bl, 01
+  jnz   get_dac_16_page
+  shr   bh, 2
+get_dac_16_page:
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+  mov   dx, VGAREG_ACTL_ADDRESS
+  mov   al, 20h
+  out   dx, al
+ifdef VBOX
+  mov   dx, VGAREG_ACTL_RESET
+  in    al, dx
+endif ; VBOX 
+  pop   dx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_text_block_specifier:
+  push  ax
+  push  dx
+  mov   dx, VGAREG_SEQU_ADDRESS
+  mov   ah, bl
+  mov   al, 03
+  out   dx, ax
+  pop   dx
+  pop   ax
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_ega_info:
+  push  ds
+  push  ax
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  xor   ch, ch
+  mov   bx, BIOSMEM_SWITCHES
+  mov   cl, [bx]
+  and   cl, 0Fh
+  mov   bx, BIOSMEM_CRTC_ADDRESS
+  mov   ax, [bx]
+  mov   bx, 0003h
+  cmp   ax, VGAREG_MDA_CRTC_ADDRESS
+  jne   mode_ega_color
+  mov   bh, 01
+mode_ega_color:
+  pop   ax
+  pop   ds
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_select_vert_res:
+
+; res : 00 200 lines, 01 350 lines, 02 400 lines
+
+  push  ds
+  push  bx
+  push  dx
+  mov   dl, al
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  mov   bx, BIOSMEM_MODESET_CTL
+  mov   al, [bx]
+  mov   bx, BIOSMEM_SWITCHES
+  mov   ah, [bx]
+  cmp   dl, 1
+  je    vert_res_350
+  jb    vert_res_200
+  cmp   dl, 2
+  je    vert_res_400
+ifdef VGA_DEBUG
+  mov   al, dl
+  xor   ah, ah
+  push  ax
+  mov   bx, msg_vert_res
+  push  bx
+  call  _printf
+  add   sp, 4
+endif
+  jmp   set_retcode
+vert_res_400:
+
+  ; reset modeset ctl bit 7 and set bit 4
+  ; set switches bit 3-0 to 09
+
+  and   al, 07Fh
+  or    al, 010h
+  and   ah, 0F0h
+  or    ah, 009h
+  jnz   set_vert_res
+vert_res_350:
+
+  ; reset modeset ctl bit 7 and bit 4
+  ; set switches bit 3-0 to 09
+
+  and   al, 06Fh
+  and   ah, 0F0h
+  or    ah, 009h
+  jnz   set_vert_res
+vert_res_200:
+
+  ; set modeset ctl bit 7 and reset bit 4
+  ; set switches bit 3-0 to 08
+
+  and   al, 0EFh
+  or    al, 080h
+  and   ah, 0F0h
+  or    ah, 008h
+set_vert_res:
+  mov   bx, BIOSMEM_MODESET_CTL
+  mov   [bx], al
+  mov   bx, BIOSMEM_SWITCHES
+  mov   [bx], ah
+set_retcode:
+  mov   ax, 1212h
+  pop   dx
+  pop   bx
+  pop   ds
+  ret
+
+ifdef VGA_DEBUG
+msg_vert_res:
+db "Select vert res (%02x) was discarded", 13, 10, 0
+endif
+
+
+biosfn_enable_default_palette_loading:
+  push  ds
+  push  bx
+  push  dx
+  mov   dl, al
+  and   dl, 01
+  shl   dl, 3
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  mov   bx, BIOSMEM_MODESET_CTL
+  mov   al, [bx]
+  and   al, 0F7h
+  or    al, dl
+  mov   [bx], al
+  mov   ax, 1212h
+  pop   dx
+  pop   bx
+  pop   ds
+  ret
+
+
+biosfn_enable_video_addressing:
+  push  bx
+  push  dx
+  mov   bl, al
+  and   bl, 01
+  xor   bl, 01
+  shl   bl, 1
+  mov   dx, VGAREG_READ_MISC_OUTPUT
+  in    al, dx
+  and   al, 0FDh
+  or    al, bl
+  mov   dx, VGAREG_WRITE_MISC_OUTPUT
+  out   dx, al
+  mov   ax, 1212h
+  pop   dx
+  pop   bx
+  ret
+
+
+biosfn_enable_grayscale_summing:
+  push  ds
+  push  bx
+  push  dx
+  mov   dl, al
+  and   dl, 01h
+  xor   dl, 01h
+  shl   dl, 1
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  mov   bx, BIOSMEM_MODESET_CTL
+  mov   al, [bx]
+  and   al, 0FDh
+  or    al, dl
+  mov   [bx], al
+  mov   ax, 1212h
+  pop   dx
+  pop   bx
+  pop   ds
+  ret
+
+
+biosfn_enable_cursor_emulation:
+  push  ds
+  push  bx
+  push  dx
+  mov   dl, al
+  and   dl, 01
+  xor   dl, 01
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  mov   bx, BIOSMEM_MODESET_CTL
+  mov   al, [bx]
+  and   al, 0FEh
+  or    al, dl
+  mov   [bx], al
+  mov   ax, 1212h
+  pop   dx
+  pop   bx
+  pop   ds
+  ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_group_1A:
+  cmp   al, 0
+  je    biosfn_read_display_code
+  cmp   al, 1
+  je    biosfn_set_display_code
+ifdef VGA_DEBUG
+  call  _unknown
+endif
+  ret
+biosfn_read_display_code:
+  push  ds
+  push  ax
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  mov   bx, BIOSMEM_DCC_INDEX
+  mov   al, [bx]
+  mov   bl, al
+  xor   bh, bh
+  pop   ax
+  mov   al, ah
+  pop   ds
+  ret
+biosfn_set_display_code:
+  push  ds
+  push  ax
+  push  bx
+  mov   ax, BIOSMEM_SEG
+  mov   ds, ax
+  mov   ax, bx
+  mov   bx, BIOSMEM_DCC_INDEX
+  mov   [bx], al
+ifdef VGA_DEBUG
+  mov   al, ah
+  xor   ah, ah
+  push  ax
+  mov   bx, msg_alt_dcc
+  push  bx
+  call  _printf
+  add   sp, 4
+endif
+  pop   bx
+  pop   ax
+  mov   al, ah
+  pop   ds
+  ret
+
+ifdef VGA_DEBUG
+msg_alt_dcc:
+db "Alternate Display code (%02x) was discarded", 13, 10, 0
+endif
+
+VGAROM	ends
+
+	end
Index: /trunk/src/VBox/Devices/Graphics/BIOS/vgatables.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/BIOS/vgatables.h	(revision 43609)
+++ /trunk/src/VBox/Devices/Graphics/BIOS/vgatables.h	(revision 43609)
@@ -0,0 +1,557 @@
+
+/* Video memory */
+#define VGAMEM_GRAPH 0xA000
+#define VGAMEM_CTEXT 0xB800
+#define VGAMEM_MTEXT 0xB000
+
+/*
+ *
+ * Tables of default values for each mode
+ *
+ */
+#define MODE_MAX   15
+#define TEXT       0x00
+#define GRAPH      0x01
+
+#define CTEXT      0x00
+#define MTEXT      0x01
+#define CGA        0x02
+#define PLANAR1    0x03
+#define PLANAR4    0x04
+#define LINEAR8    0x05
+
+// for SVGA
+#define LINEAR15   0x10
+#define LINEAR16   0x11
+#define LINEAR24   0x12
+#define LINEAR32   0x13
+
+typedef struct
+{uint8_t    svgamode;
+ uint8_t    class;    /* TEXT, GRAPH */
+ uint8_t    memmodel; /* CTEXT,MTEXT,CGA,PL1,PL2,PL4,P8,P15,P16,P24,P32 */
+ uint8_t    pixbits;
+ uint16_t   sstart;
+ uint8_t    pelmask;
+ uint8_t    dacmodel; /* 0 1 2 3 */
+} VGAMODES;
+
+static VGAMODES vga_modes[MODE_MAX+1]=
+{//mode  class  model bits sstart  pelm  dac
+ {0x00, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
+ {0x01, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
+ {0x02, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
+ {0x03, TEXT,  CTEXT,   4, 0xB800, 0xFF, 0x02},
+ {0x04, GRAPH, CGA,     2, 0xB800, 0xFF, 0x01},
+ {0x05, GRAPH, CGA,     2, 0xB800, 0xFF, 0x01},
+ {0x06, GRAPH, CGA,     1, 0xB800, 0xFF, 0x01},
+ {0x07, TEXT,  MTEXT,   4, 0xB000, 0xFF, 0x00},
+ {0x0D, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
+ {0x0E, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
+ {0x0F, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x00},
+ {0x10, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
+ {0x11, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x02},
+ {0x12, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
+ {0x13, GRAPH, LINEAR8, 8, 0xA000, 0xFF, 0x03},
+ {0x6A, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02}
+};
+
+/* convert index in vga_modes[] to index in video_param_table[] */
+static uint8_t line_to_vpti[MODE_MAX+1]={
+    0x17, 0x17, 0x18, 0x18, 0x04, 0x05, 0x06, 0x07,
+    0x0d, 0x0e, 0x11, 0x12, 0x1a, 0x1b, 0x1c, 0x1d,
+};
+
+/* Default Palette */
+#define DAC_MAX_MODEL 3
+
+static uint8_t dac_regs[DAC_MAX_MODEL+1]=
+{0x3f,0x3f,0x3f,0xff};
+
+/* standard BIOS Video Parameter Table */
+typedef struct {
+    uint8_t     twidth;
+    uint8_t     theightm1;
+    uint8_t     cheight;
+    uint8_t     slength_l;
+    uint8_t     slength_h;
+    uint8_t     sequ_regs[4];
+    uint8_t     miscreg;
+    uint8_t     crtc_regs[25];
+    uint8_t     actl_regs[20];
+    uint8_t     grdc_regs[9];
+} VideoParamTableEntry;
+
+static VideoParamTableEntry video_param_table[30] = {
+{
+ /* index=0x00 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x01 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x02 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x03 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x04 vga mode 0x04 */
+ 40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x05 vga mode 0x05 */
+ 40, 24, 8, 0x00, 0x08, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x06 vga mode 0x06 */
+ 80, 24, 8, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x01, 0x01, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xc2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x07 vga mode 0x07 */
+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x66, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x08 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x09 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0a no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0b no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0c no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0d vga mode 0x0d */
+ 40, 24, 8, 0x00, 0x20, /* tw, th-1, ch, slength */
+ 0x09, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x0e vga mode 0x0e */
+ 80, 24, 8, 0x00, 0x40, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x0f no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x10 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x11 vga mode 0x0f */
+ 80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x12 vga mode 0x10 */
+ 80, 24, 14, 0x00, 0x80, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x13 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x14 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x15 no mode defined */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+    /* index=0x18 ega mode 0x03 */
+    80, 24, 14, 0x00, 0x10, /* tw, th-1, ch, slength */
+    0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+    0x67, /* miscreg */
+    0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+    0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+    0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
+    0xff, /* crtc_regs */
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+    0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x17 vga mode 0x01 */
+ 40, 24, 16, 0x00, 0x08, /* tw, th-1, ch, slength */
+ 0x08, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x67, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x18 vga mode 0x03 */
+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x67, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x19 vga mode 0x07 */
+ 80, 24, 16, 0x00, 0x10, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x66, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1a vga mode 0x11 */
+ 80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1b vga mode 0x12 */
+ 80, 29, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1c vga mode 0x13 */
+ 40, 24, 8, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x0e, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x41, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1d vga mode 0x6a */
+ 100, 36, 16, 0x00, 0x00, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x7f, 0x63, 0x63, 0x83, 0x6b, 0x1b, 0x72, 0xf0,
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x8d, 0x57, 0x32, 0x00, 0x57, 0x73, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+};
+
+/* Mono */
+static uint8_t palette0[63+1][3]=
+{
+  0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
+  0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+  0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+  0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f,
+  0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
+  0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+  0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+  0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f
+};
+
+static uint8_t palette1[63+1][3]=
+{
+  0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+  0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+  0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+  0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+  0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+  0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+  0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+  0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
+};
+
+static uint8_t palette2[63+1][3]=
+{
+  0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x2a,0x00, 0x2a,0x2a,0x2a,
+  0x00,0x00,0x15, 0x00,0x00,0x3f, 0x00,0x2a,0x15, 0x00,0x2a,0x3f, 0x2a,0x00,0x15, 0x2a,0x00,0x3f, 0x2a,0x2a,0x15, 0x2a,0x2a,0x3f,
+  0x00,0x15,0x00, 0x00,0x15,0x2a, 0x00,0x3f,0x00, 0x00,0x3f,0x2a, 0x2a,0x15,0x00, 0x2a,0x15,0x2a, 0x2a,0x3f,0x00, 0x2a,0x3f,0x2a,
+  0x00,0x15,0x15, 0x00,0x15,0x3f, 0x00,0x3f,0x15, 0x00,0x3f,0x3f, 0x2a,0x15,0x15, 0x2a,0x15,0x3f, 0x2a,0x3f,0x15, 0x2a,0x3f,0x3f,
+  0x15,0x00,0x00, 0x15,0x00,0x2a, 0x15,0x2a,0x00, 0x15,0x2a,0x2a, 0x3f,0x00,0x00, 0x3f,0x00,0x2a, 0x3f,0x2a,0x00, 0x3f,0x2a,0x2a,
+  0x15,0x00,0x15, 0x15,0x00,0x3f, 0x15,0x2a,0x15, 0x15,0x2a,0x3f, 0x3f,0x00,0x15, 0x3f,0x00,0x3f, 0x3f,0x2a,0x15, 0x3f,0x2a,0x3f,
+  0x15,0x15,0x00, 0x15,0x15,0x2a, 0x15,0x3f,0x00, 0x15,0x3f,0x2a, 0x3f,0x15,0x00, 0x3f,0x15,0x2a, 0x3f,0x3f,0x00, 0x3f,0x3f,0x2a,
+  0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
+};
+
+static uint8_t palette3[256][3]=
+{
+  0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+  0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+  0x00,0x00,0x00, 0x05,0x05,0x05, 0x08,0x08,0x08, 0x0b,0x0b,0x0b, 0x0e,0x0e,0x0e, 0x11,0x11,0x11, 0x14,0x14,0x14, 0x18,0x18,0x18,
+  0x1c,0x1c,0x1c, 0x20,0x20,0x20, 0x24,0x24,0x24, 0x28,0x28,0x28, 0x2d,0x2d,0x2d, 0x32,0x32,0x32, 0x38,0x38,0x38, 0x3f,0x3f,0x3f,
+  0x00,0x00,0x3f, 0x10,0x00,0x3f, 0x1f,0x00,0x3f, 0x2f,0x00,0x3f, 0x3f,0x00,0x3f, 0x3f,0x00,0x2f, 0x3f,0x00,0x1f, 0x3f,0x00,0x10,
+  0x3f,0x00,0x00, 0x3f,0x10,0x00, 0x3f,0x1f,0x00, 0x3f,0x2f,0x00, 0x3f,0x3f,0x00, 0x2f,0x3f,0x00, 0x1f,0x3f,0x00, 0x10,0x3f,0x00,
+  0x00,0x3f,0x00, 0x00,0x3f,0x10, 0x00,0x3f,0x1f, 0x00,0x3f,0x2f, 0x00,0x3f,0x3f, 0x00,0x2f,0x3f, 0x00,0x1f,0x3f, 0x00,0x10,0x3f,
+  0x1f,0x1f,0x3f, 0x27,0x1f,0x3f, 0x2f,0x1f,0x3f, 0x37,0x1f,0x3f, 0x3f,0x1f,0x3f, 0x3f,0x1f,0x37, 0x3f,0x1f,0x2f, 0x3f,0x1f,0x27,
+
+  0x3f,0x1f,0x1f, 0x3f,0x27,0x1f, 0x3f,0x2f,0x1f, 0x3f,0x37,0x1f, 0x3f,0x3f,0x1f, 0x37,0x3f,0x1f, 0x2f,0x3f,0x1f, 0x27,0x3f,0x1f,
+  0x1f,0x3f,0x1f, 0x1f,0x3f,0x27, 0x1f,0x3f,0x2f, 0x1f,0x3f,0x37, 0x1f,0x3f,0x3f, 0x1f,0x37,0x3f, 0x1f,0x2f,0x3f, 0x1f,0x27,0x3f,
+  0x2d,0x2d,0x3f, 0x31,0x2d,0x3f, 0x36,0x2d,0x3f, 0x3a,0x2d,0x3f, 0x3f,0x2d,0x3f, 0x3f,0x2d,0x3a, 0x3f,0x2d,0x36, 0x3f,0x2d,0x31,
+  0x3f,0x2d,0x2d, 0x3f,0x31,0x2d, 0x3f,0x36,0x2d, 0x3f,0x3a,0x2d, 0x3f,0x3f,0x2d, 0x3a,0x3f,0x2d, 0x36,0x3f,0x2d, 0x31,0x3f,0x2d,
+  0x2d,0x3f,0x2d, 0x2d,0x3f,0x31, 0x2d,0x3f,0x36, 0x2d,0x3f,0x3a, 0x2d,0x3f,0x3f, 0x2d,0x3a,0x3f, 0x2d,0x36,0x3f, 0x2d,0x31,0x3f,
+  0x00,0x00,0x1c, 0x07,0x00,0x1c, 0x0e,0x00,0x1c, 0x15,0x00,0x1c, 0x1c,0x00,0x1c, 0x1c,0x00,0x15, 0x1c,0x00,0x0e, 0x1c,0x00,0x07,
+  0x1c,0x00,0x00, 0x1c,0x07,0x00, 0x1c,0x0e,0x00, 0x1c,0x15,0x00, 0x1c,0x1c,0x00, 0x15,0x1c,0x00, 0x0e,0x1c,0x00, 0x07,0x1c,0x00,
+  0x00,0x1c,0x00, 0x00,0x1c,0x07, 0x00,0x1c,0x0e, 0x00,0x1c,0x15, 0x00,0x1c,0x1c, 0x00,0x15,0x1c, 0x00,0x0e,0x1c, 0x00,0x07,0x1c,
+
+  0x0e,0x0e,0x1c, 0x11,0x0e,0x1c, 0x15,0x0e,0x1c, 0x18,0x0e,0x1c, 0x1c,0x0e,0x1c, 0x1c,0x0e,0x18, 0x1c,0x0e,0x15, 0x1c,0x0e,0x11,
+  0x1c,0x0e,0x0e, 0x1c,0x11,0x0e, 0x1c,0x15,0x0e, 0x1c,0x18,0x0e, 0x1c,0x1c,0x0e, 0x18,0x1c,0x0e, 0x15,0x1c,0x0e, 0x11,0x1c,0x0e,
+  0x0e,0x1c,0x0e, 0x0e,0x1c,0x11, 0x0e,0x1c,0x15, 0x0e,0x1c,0x18, 0x0e,0x1c,0x1c, 0x0e,0x18,0x1c, 0x0e,0x15,0x1c, 0x0e,0x11,0x1c,
+  0x14,0x14,0x1c, 0x16,0x14,0x1c, 0x18,0x14,0x1c, 0x1a,0x14,0x1c, 0x1c,0x14,0x1c, 0x1c,0x14,0x1a, 0x1c,0x14,0x18, 0x1c,0x14,0x16,
+  0x1c,0x14,0x14, 0x1c,0x16,0x14, 0x1c,0x18,0x14, 0x1c,0x1a,0x14, 0x1c,0x1c,0x14, 0x1a,0x1c,0x14, 0x18,0x1c,0x14, 0x16,0x1c,0x14,
+  0x14,0x1c,0x14, 0x14,0x1c,0x16, 0x14,0x1c,0x18, 0x14,0x1c,0x1a, 0x14,0x1c,0x1c, 0x14,0x1a,0x1c, 0x14,0x18,0x1c, 0x14,0x16,0x1c,
+  0x00,0x00,0x10, 0x04,0x00,0x10, 0x08,0x00,0x10, 0x0c,0x00,0x10, 0x10,0x00,0x10, 0x10,0x00,0x0c, 0x10,0x00,0x08, 0x10,0x00,0x04,
+  0x10,0x00,0x00, 0x10,0x04,0x00, 0x10,0x08,0x00, 0x10,0x0c,0x00, 0x10,0x10,0x00, 0x0c,0x10,0x00, 0x08,0x10,0x00, 0x04,0x10,0x00,
+
+  0x00,0x10,0x00, 0x00,0x10,0x04, 0x00,0x10,0x08, 0x00,0x10,0x0c, 0x00,0x10,0x10, 0x00,0x0c,0x10, 0x00,0x08,0x10, 0x00,0x04,0x10,
+  0x08,0x08,0x10, 0x0a,0x08,0x10, 0x0c,0x08,0x10, 0x0e,0x08,0x10, 0x10,0x08,0x10, 0x10,0x08,0x0e, 0x10,0x08,0x0c, 0x10,0x08,0x0a,
+  0x10,0x08,0x08, 0x10,0x0a,0x08, 0x10,0x0c,0x08, 0x10,0x0e,0x08, 0x10,0x10,0x08, 0x0e,0x10,0x08, 0x0c,0x10,0x08, 0x0a,0x10,0x08,
+  0x08,0x10,0x08, 0x08,0x10,0x0a, 0x08,0x10,0x0c, 0x08,0x10,0x0e, 0x08,0x10,0x10, 0x08,0x0e,0x10, 0x08,0x0c,0x10, 0x08,0x0a,0x10,
+  0x0b,0x0b,0x10, 0x0c,0x0b,0x10, 0x0d,0x0b,0x10, 0x0f,0x0b,0x10, 0x10,0x0b,0x10, 0x10,0x0b,0x0f, 0x10,0x0b,0x0d, 0x10,0x0b,0x0c,
+  0x10,0x0b,0x0b, 0x10,0x0c,0x0b, 0x10,0x0d,0x0b, 0x10,0x0f,0x0b, 0x10,0x10,0x0b, 0x0f,0x10,0x0b, 0x0d,0x10,0x0b, 0x0c,0x10,0x0b,
+  0x0b,0x10,0x0b, 0x0b,0x10,0x0c, 0x0b,0x10,0x0d, 0x0b,0x10,0x0f, 0x0b,0x10,0x10, 0x0b,0x0f,0x10, 0x0b,0x0d,0x10, 0x0b,0x0c,0x10,
+  0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00
+};
+
+static uint8_t static_functionality[0x10]=
+{
+ /* 0 */ 0xff,  // All modes supported #1
+ /* 1 */ 0xe0,  // All modes supported #2
+ /* 2 */ 0x0f,  // All modes supported #3
+ /* 3 */ 0x00, 0x00, 0x00, 0x00,  // reserved
+ /* 7 */ 0x07,  // 200, 350, 400 scan lines
+ /* 8 */ 0x02,  // mamimum number of visible charsets in text mode
+ /* 9 */ 0x08,  // total number of charset blocks in text mode
+ /* a */ 0xe7,  // Change to add new functions
+ /* b */ 0x0c,  // Change to add new functions
+ /* c */ 0x00,  // reserved
+ /* d */ 0x00,  // reserved
+ /* e */ 0x00,  // Change to add new functions
+ /* f */ 0x00   // reserved
+};
Index: /trunk/src/VBox/Devices/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Devices/Makefile.kmk	(revision 43608)
+++ /trunk/src/VBox/Devices/Makefile.kmk	(revision 43609)
@@ -39,9 +39,5 @@
  include $(PATH_SUB_CURRENT)/BiosCommonCode/Makefile.kmk
  include $(PATH_SUB_CURRENT)/PC/BIOS/Makefile.kmk
- ifdef VBOX_WITH_NEW_VGABIOS
-  include $(PATH_SUB_CURRENT)/Graphics/BIOS-new/Makefile.kmk
- else
-  include $(PATH_SUB_CURRENT)/Graphics/BIOS/Makefile.kmk
- endif
+ include $(PATH_SUB_CURRENT)/Graphics/BIOS/Makefile.kmk
  if defined(VBOX_WITH_EFI) && !defined(VBOX_WITH_OVMF)
   include $(PATH_SUB_CURRENT)/EFI/Thunk/Makefile.kmk
