Index: boot/Makefile
===================================================================
--- boot/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Include configuration
+#
+
+-include Makefile.config
+
+## Common flags
+#
+
+BASE = ..
+KERNELDIR = $(BASE)/kernel
+USPACEDIR = $(BASE)/uspace
+
+## Setup arch configuration
+#
+
+-include arch/$(ARCH)/Makefile.inc
+
+ifeq ($(ARCH),xen32)
+	UARCH = ia32
+else
+	UARCH = $(ARCH)
+endif
+
+ifeq ($(CONFIG_DEBUG),y)
+	DEFS += -DCONFIG_DEBUG
+endif
+
+ifeq ($(CONFIG_BAT),y)
+	DEFS += -DCONFIG_BAT
+endif
+
+.PHONY: all build config distclean arch_distclean clean kernel uspace clean_kernel clean_uspace distclean_kernel distclean_uspace
+
+all:
+	tools/config.py default
+	$(MAKE) -C . build $(ARCH)
+
+config:
+	tools/config.py
+
+distclean: clean arch_distclean
+	-rm Makefile.config
+
+kernel:
+	$(MAKE) -C $(KERNELDIR) NARCH=$(ARCH)
+
+uspace:
+	$(MAKE) -C $(USPACEDIR) NARCH=$(UARCH)
+
+clean_kernel:
+	$(MAKE) -C $(KERNELDIR) clean ARCH=$(ARCH)
+
+clean_uspace:
+	$(MAKE) -C $(USPACEDIR) clean ARCH=$(UARCH)
+
+clean_boot_gen:
+	-rm generic/*.o genarch/*.o
+
+distclean_kernel:
+	$(MAKE) -C $(KERNELDIR) distclean ARCH=$(ARCH)
+
+distclean_uspace:
+	$(MAKE) -C $(USPACEDIR) distclean ARCH=$(UARCH)
Index: boot/arch/amd64/Makefile.inc
===================================================================
--- boot/arch/amd64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/amd64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+build: image.iso
+
+image.iso: kernel uspace
+	mkdir -p arch/$(ARCH)/iso/boot/grub
+	cp arch/$(ARCH)/grub/stage2_eltorito arch/$(ARCH)/iso/boot/grub/
+	cp arch/$(ARCH)/grub/menu.lst arch/$(ARCH)/iso/boot/grub/
+	cp $(KERNELDIR)/kernel.bin arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/init/init arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/ns/ns arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/pci/pci arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/fb/fb arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/kbd/kbd arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/console/console arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/tetris/tetris arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/ipcc/ipcc arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/klog/klog arch/$(ARCH)/iso/boot/
+	mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o image.iso arch/$(ARCH)/iso/
+
+clean: clean_kernel clean_uspace
+	-rm -fr arch/$(ARCH)/iso
+	-rm -f image.iso
+
+arch_distclean: distclean_kernel distclean_uspace
Index: boot/arch/amd64/grub/COPYING
===================================================================
--- boot/arch/amd64/grub/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/amd64/grub/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,345 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies 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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+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 program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, 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.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: boot/arch/amd64/grub/README
===================================================================
--- boot/arch/amd64/grub/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/amd64/grub/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,5 @@
+For licensing terms of GRUB boot loader see the file COPYING contained
+in this directory. Full version of GRUB, including its source code,
+can be downloaded from GRUB's project page:
+
+http://www.gnu.org/software/grub/
Index: boot/arch/amd64/grub/menu.lst
===================================================================
--- boot/arch/amd64/grub/menu.lst	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/amd64/grub/menu.lst	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,15 @@
+default 0
+timeout 10
+
+title=HelenOS
+root (cd)
+kernel /boot/kernel.bin
+module /boot/ns
+module /boot/init
+module /boot/pci
+module /boot/fb
+module /boot/kbd
+module /boot/console
+module /boot/tetris
+module /boot/ipcc
+module /boot/klog
Index: boot/arch/ia32/Makefile.inc
===================================================================
--- boot/arch/ia32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ia32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+build: image.iso
+
+image.iso: kernel uspace
+	mkdir -p arch/$(ARCH)/iso/boot/grub
+	cp arch/$(ARCH)/grub/stage2_eltorito arch/$(ARCH)/iso/boot/grub/
+	cp arch/$(ARCH)/grub/menu.lst arch/$(ARCH)/iso/boot/grub/
+	cp $(KERNELDIR)/kernel.bin arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/init/init arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/ns/ns arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/pci/pci arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/fb/fb arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/kbd/kbd arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/console/console arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/tetris/tetris arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/ipcc/ipcc arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/klog/klog arch/$(ARCH)/iso/boot/
+	mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o image.iso arch/$(ARCH)/iso/
+
+clean: clean_kernel clean_uspace
+	-rm -fr arch/$(ARCH)/iso
+	-rm -f image.iso
+
+arch_distclean: distclean_kernel distclean_uspace
Index: boot/arch/ia32/grub/COPYING
===================================================================
--- boot/arch/ia32/grub/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ia32/grub/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,345 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies 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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+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 program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, 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.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: boot/arch/ia32/grub/README
===================================================================
--- boot/arch/ia32/grub/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ia32/grub/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,5 @@
+For licensing terms of GRUB boot loader see the file COPYING contained
+in this directory. Full version of GRUB, including its source code,
+can be downloaded from GRUB's project page:
+
+http://www.gnu.org/software/grub/
Index: boot/arch/ia32/grub/menu.lst
===================================================================
--- boot/arch/ia32/grub/menu.lst	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ia32/grub/menu.lst	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,15 @@
+default 0
+timeout 10
+
+title=HelenOS
+root (cd)
+kernel /boot/kernel.bin
+module /boot/ns
+module /boot/init
+module /boot/pci
+module /boot/fb
+module /boot/kbd
+module /boot/console
+module /boot/tetris
+module /boot/ipcc
+module /boot/klog
Index: boot/arch/ia64/Makefile.inc
===================================================================
--- boot/arch/ia64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ia64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+VMAXLMA_SRC=$(KERNELDIR)/contrib/arch/ia64/vmaxlma.c
+
+build: kernel.bin
+
+kernel.bin: kernel uspace vmaxlma
+	cp $(KERNELDIR)/kernel.bin .
+	./vmaxlma kernel.bin
+
+vmaxlma: $(VMAXLMA_SRC)
+	gcc $(VMAXLMA_SRC) -o $@
+
+clean: clean_kernel clean_uspace
+	-rm -f kernel.bin vmaxlma
+
+arch_distclean: distclean_kernel distclean_uspace
Index: boot/arch/mips32/Makefile.inc
===================================================================
--- boot/arch/mips32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+build: image.boot
+
+image.boot: kernel uspace
+	make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(CONFIG_IMAGE)
+	cp arch/$(ARCH)/loader/image.boot image.boot
+
+clean: clean_boot_gen clean_kernel clean_uspace
+	make -C arch/$(ARCH)/loader clean
+	-rm -f image.boot
+
+arch_distclean: distclean_kernel distclean_uspace
Index: boot/arch/mips32/loader/Makefile
===================================================================
--- boot/arch/mips32/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,94 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = mipsel-linux-gnu
+TOOLCHAIN_DIR = /usr/local/mipsel/bin
+
+ifeq ($(COMPILER),native)
+	CC = gcc
+	AS = as
+	LD = ld
+	OBJCOPY = objcopy
+	OBJDUMP = objdump
+else
+	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
+	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
+	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
+	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
+	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
+endif
+
+CFLAGS = -I. -I../../../generic -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mhard-float -mips3
+
+SOURCES = \
+	main.c \
+	msim.c \
+	../../../generic/printf.c \
+	asm.S \
+	boot.S
+
+COMPONENTS = \
+	$(KERNELDIR)/kernel.bin \
+	$(USPACEDIR)/ns/ns \
+	$(USPACEDIR)/init/init \
+	$(USPACEDIR)/fb/fb \
+	$(USPACEDIR)/kbd/kbd \
+	$(USPACEDIR)/console/console \
+	$(USPACEDIR)/tetris/tetris \
+	$(USPACEDIR)/ipcc/ipcc \
+	$(USPACEDIR)/klog/klog
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS))))
+
+.PHONY: all clean depend
+
+all: image.boot
+
+-include Makefile.depend
+
+image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) kernel.o 
+	$(LD) -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@
+
+depend:
+	-makedepend $(DEFS) $(CFLAGS) -f - $(SOURCES) > Makefile.depend 2> /dev/null
+
+clean:
+	-rm -f _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) image.boot Makefile.depend
+
+_components.h _link.ld $(COMPONENT_OBJECTS): $(COMPONENTS)
+	./pack $(IMAGE) $(OBJCOPY) $(COMPONENTS)
+
+%.o: %.S
+	$(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: boot/arch/mips32/loader/asm.S
===================================================================
--- boot/arch/mips32/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,111 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#include "regname.h"
+
+.set noat
+.set noreorder
+.set nomacro
+
+.text
+
+.global halt
+.global memcpy
+.global jump_to_kernel
+
+halt:
+	b halt
+	nop
+	
+memcpy:
+	addiu	$v0,$a1,3
+	li	$v1,-4			# 0xfffffffffffffffc
+	and	$v0,$v0,$v1
+	beq	$a1,$v0,3f
+	move	$t0,$a0
+
+0:
+	beq	$a2,$zero,2f
+	move	$a3,$zero
+
+1:
+	addu	$v0,$a1,$a3
+	lbu	$a0,0($v0)
+	addu	$v1,$t0,$a3
+	addiu	$a3,$a3,1
+	bne	$a3,$a2,1b
+	sb	$a0,0($v1)
+
+2:
+	jr	$ra
+	move	$v0,$a1
+
+3:
+	addiu	$v0,$a0,3
+	and	$v0,$v0,$v1
+	bne	$a0,$v0,0b
+	srl	$t1,$a2,2
+
+	beq	$t1,$zero,5f
+	move	$a3,$zero
+
+	move	$a3,$zero
+	move	$a0,$zero
+4:
+	addu	$v0,$a1,$a0
+	lw	$v1,0($v0)
+	addiu	$a3,$a3,1
+	addu	$v0,$t0,$a0
+	sw	$v1,0($v0)
+	bne	$a3,$t1,4b
+	addiu	$a0,$a0,4
+
+5:
+	andi	$a2,$a2,0x3
+	beq	$a2,$zero,2b
+	nop
+
+	sll	$v0,$a3,2
+	addu	$t1,$v0,$t0
+	move	$a3,$zero
+	addu	$t0,$v0,$a1
+6:
+	addu	$v0,$t0,$a3
+	lbu	$a0,0($v0)
+	addu	$v1,$t1,$a3
+	addiu	$a3,$a3,1
+	bne	$a3,$a2,6b
+	sb	$a0,0($v1)
+
+	jr	$ra
+	move	$v0,$a1
+
+jump_to_kernel:
+#	.word 0x39
+	j $a0
+	nop
Index: boot/arch/mips32/loader/asm.h
===================================================================
--- boot/arch/mips32/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ASM_H__
+#define __ASM_H__
+
+#define PAGE_SIZE 16384
+#define PAGE_WIDTH 14
+
+#define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
+
+void jump_to_kernel(void *entry, void *bootinfo, unsigned int bootinfo_size) __attribute__((noreturn));
+
+#endif
Index: boot/arch/mips32/loader/boot.S
===================================================================
--- boot/arch/mips32/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,45 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#include "regname.h"
+
+#define INITIAL_STACK 0x80040000
+
+.set noat
+.set noreorder
+.set nomacro
+
+.section BOOTSTRAP
+
+.global start
+start:
+	lui $sp, INITIAL_STACK >> 16
+	ori $sp, $sp, INITIAL_STACK & 0xffff
+	
+	j bootstrap
+	nop
Index: boot/arch/mips32/loader/main.c
===================================================================
--- boot/arch/mips32/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "main.h" 
+#include <printf.h>
+#include "msim.h"
+#include "asm.h"
+#include "_components.h"
+
+#define KERNEL_VIRTUAL_ADDRESS 0x80100000
+
+void bootstrap(void)
+{
+	printf("HelenOS MIPS Bootloader\n");
+	
+	component_t components[COMPONENTS];
+	bootinfo_t bootinfo;
+	init_components(components);
+	
+	printf("\nMemory statistics\n");
+	printf(" kernel entry point at %L\n", KERNEL_VIRTUAL_ADDRESS);
+	printf(" %L: boot info structure\n", &bootinfo);
+	
+	unsigned int i;
+	for (i = 0; i < COMPONENTS; i++)
+		printf(" %L: %s image (size %d bytes)\n", components[i].start, components[i].name, components[i].size);
+	
+	printf("\nCopying components\n");
+	unsigned int top = 0;
+	bootinfo.cnt = 0;
+	for (i = 0; i < COMPONENTS; i++) {
+		printf(" %s...", components[i].name);
+		top = ALIGN_UP(top, PAGE_SIZE);
+		memcpy(((void *) KERNEL_VIRTUAL_ADDRESS) + top, components[i].start, components[i].size);
+		if (i > 0) {
+			bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top;
+			bootinfo.tasks[bootinfo.cnt].size = components[i].size;
+			bootinfo.cnt++;
+		}
+		top += components[i].size;
+		printf("done.\n");
+	}
+	
+	printf("\nBooting the kernel...\n");
+	jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo, sizeof(bootinfo));
+}
Index: boot/arch/mips32/loader/main.h
===================================================================
--- boot/arch/mips32/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+/** Align to the nearest higher address.
+ *
+ * @param addr  Address or size to be aligned.
+ * @param align Size of alignment, must be power of 2.
+ */
+#define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1))
+
+#define TASKMAP_MAX_RECORDS 32
+
+typedef struct {
+	void *addr;
+	unsigned int size;
+} task_t;
+
+typedef struct {
+	unsigned int cnt;
+	task_t tasks[TASKMAP_MAX_RECORDS];
+} bootinfo_t;
+
+extern void start(void);
+extern void bootstrap(void);
+
+#endif
Index: boot/arch/mips32/loader/msim.c
===================================================================
--- boot/arch/mips32/loader/msim.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/msim.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+#include "msim.h"
+#include <printf.h>
+
+#define MSIM_VIDEORAM            0xB0000000
+
+void write(const char *str, const int len)
+{
+	int i;
+	
+	for (i = 0; i < len; i++)
+		*((char *) MSIM_VIDEORAM) = str[i];
+}
Index: boot/arch/mips32/loader/msim.h
===================================================================
--- boot/arch/mips32/loader/msim.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/msim.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MSIM_H__
+#define __MSIM_H__
+
+extern void init(void);
+extern void halt(void);
+
+extern void *translate(void *addr);
+
+#endif
Index: boot/arch/mips32/loader/pack
===================================================================
--- boot/arch/mips32/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,126 @@
+#! /bin/sh
+
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+[ "$#" -lt 1 ] && exit 1
+
+case "$1" in
+	"binary")
+		BFD="binary"
+		;;
+	"ecoff")
+		BFD="ecoff-littlemips"
+		;;
+	*)
+		echo "Undefined image format" >&1
+		exit 1
+		;;
+esac
+
+OBJCOPY="$2"
+LINK="_link.ld"
+HEADER="_components.h"
+
+shift 2
+
+echo "OUTPUT_FORMAT(\"${BFD}\")
+ENTRY(start)
+
+SECTIONS {
+	.boot 0xbfc00000: AT (0) {
+		*(BOOTSTRAP);
+		*(.text);
+		
+		*(.rodata);
+		*(.rodata.*);
+		*(.data);		/* initialized data */
+		*(.sdata);
+		*(.sdata2);
+		*(.sbss);
+		*(.scommon);
+		*(.bss);		/* uninitialized static variables */	
+		*(COMMON); 		/* global variables */
+		*(.reginfo);" > "$LINK"
+
+echo '#ifndef ___COMPONENTS_H__
+#define ___COMPONENTS_H__
+
+typedef struct {
+	char *name;
+	
+	void *start;
+	void *end;
+	unsigned int size;
+} component_t;' > "$HEADER"
+
+COUNT="0"
+DATA=""
+
+for TASK in "$@" ; do
+	BASENAME="`basename "$TASK" | sed 's/^\(.*\)\.[^.]*$/\1/'`"
+	OBJECT="${BASENAME}.o"
+	SYMBOL="`echo "_binary_$TASK" | tr "./" "__"`"
+	MACRO="`echo "$BASENAME" | tr [:lower:] [:upper:]`"
+	echo "$TASK -> $OBJECT"
+	
+	echo "
+		. = ALIGN(4096);
+		*(.${BASENAME}_image);" >> "$LINK"
+	
+	echo "
+extern int ${SYMBOL}_start;
+extern int ${SYMBOL}_end;
+
+#define ${MACRO}_START ((void *) &${SYMBOL}_start)
+#define ${MACRO}_END ((void *) &${SYMBOL}_end)
+#define ${MACRO}_SIZE ((unsigned int) ${MACRO}_END - (unsigned int) ${MACRO}_START)" >> "$HEADER"
+	
+	"$OBJCOPY" -I binary -O elf32-tradlittlemips -B mips --rename-section ".data=.${BASENAME}_image" "$TASK" "$OBJECT"
+		
+	DATA="${DATA}
+	components[$COUNT].name = \"${BASENAME}\";
+	components[$COUNT].start = ${MACRO}_START;
+	components[$COUNT].end = ${MACRO}_END;
+	components[$COUNT].size = ${MACRO}_SIZE;";
+	COUNT="`expr "$COUNT" + 1`"
+done
+
+echo '	}
+}' >> "$LINK"
+
+echo "
+#define COMPONENTS $COUNT
+
+static void init_components(component_t components[])
+{
+$DATA
+}
+
+#endif
+" >> "$HEADER"
Index: boot/arch/mips32/loader/regname.h
===================================================================
--- boot/arch/mips32/loader/regname.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/regname.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2005 Ondrej Palkovsky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __mips32_REGNAME_H_
+#define __mips32_REGNAME_H_
+
+#define zero    0
+#define at      1
+#define v0      2
+#define v1      3
+#define a0      4
+#define a1      5
+#define a2      6
+#define a3      7
+#define t0      8
+#define t1      9
+#define t2      10
+#define t3      11
+#define t4      12
+#define t5      13
+#define t6      14
+#define t7      15
+#define s0      16
+#define s1      17
+#define s2      18
+#define s3      19
+#define s4      20
+#define s5      21
+#define s6      22
+#define s7      23
+#define t8      24
+#define t9      25
+#define k0      26
+#define k1      27
+#define gp      28
+#define sp      29
+#define s8      30
+#define ra      31
+
+#define rindex		0
+#define rrandom		1
+#define entrylo0	2
+#define entrylo1	3
+#define context		4
+#define pagemask	5
+#define wired		6
+#define badvaddr	8
+#define count		9
+#define entryhi		10
+#define compare		11
+#define status		12
+#define cause		13
+#define epc		14
+#define rconfig		16
+#define lladdr		17
+#define watchlo		18
+#define watchhi		19
+#define xcontext	20
+#define rdebug		23
+#define depc		24
+#define eepc		30
+
+
+#endif /* _REGNAME_H_ */
Index: boot/arch/mips32/loader/types.h
===================================================================
--- boot/arch/mips32/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/mips32/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TYPES_H__
+#define TYPES_H__
+
+#include <gentypes.h>
+
+typedef signed char int8_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long uint64_t;
+
+typedef uint32_t uintptr_t;
+typedef uint32_t unative_t;
+
+#endif
Index: boot/arch/ppc32/Makefile.inc
===================================================================
--- boot/arch/ppc32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+build: image.boot
+
+image.boot: kernel uspace
+	make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)"
+	cp arch/$(ARCH)/loader/image.boot image.boot
+
+clean: clean_boot_gen clean_kernel clean_uspace
+	make -C arch/$(ARCH)/loader clean KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
+	-rm -f image.boot
+
+arch_distclean: distclean_kernel distclean_uspace
Index: boot/arch/ppc32/loader/Makefile
===================================================================
--- boot/arch/ppc32/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,95 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = ppc-linux-gnu
+TOOLCHAIN_DIR = /usr/local/ppc/bin
+
+ifeq ($(COMPILER),native)
+	CC = gcc
+	AS = as
+	LD = ld
+	OBJCOPY = objcopy
+	OBJDUMP = objdump
+else
+	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
+	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
+	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
+	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
+	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
+endif
+
+CFLAGS = -I. -I../../../generic -I../../../genarch -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=powerpc -msoft-float -m32
+
+SOURCES = \
+	main.c \
+	ofw.c \
+	../../../genarch/ofw.c \
+	../../../generic/printf.c \
+	asm.S \
+	boot.S
+
+COMPONENTS = \
+	$(KERNELDIR)/kernel.bin \
+	$(USPACEDIR)/ns/ns \
+	$(USPACEDIR)/init/init \
+	$(USPACEDIR)/fb/fb \
+	$(USPACEDIR)/kbd/kbd \
+	$(USPACEDIR)/console/console \
+	$(USPACEDIR)/tetris/tetris \
+	$(USPACEDIR)/ipcc/ipcc \
+	$(USPACEDIR)/klog/klog
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS))))
+
+.PHONY: all clean depend
+
+all: image.boot
+
+-include Makefile.depend
+
+image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) kernel.o 
+	$(LD) -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@
+
+depend:
+	-makedepend $(DEFS) $(CFLAGS) -f - $(SOURCES) > Makefile.depend 2> /dev/null
+
+clean:
+	-rm -f _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) image.boot Makefile.depend
+
+_components.h _link.ld $(COMPONENT_OBJECTS): $(COMPONENTS)
+	./pack $(OBJCOPY) $(COMPONENTS)
+
+%.o: %.S
+	$(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: boot/arch/ppc32/loader/asm.S
===================================================================
--- boot/arch/ppc32/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,383 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#include "asm.h"
+#include "regname.h"
+#include "debug.inc"
+
+.text
+
+.global halt
+.global memcpy
+.global jump_to_kernel
+
+halt:
+	b halt
+
+memcpy:
+	srwi. r7, r5, 3
+	addi r6, r3, -4
+	addi r4, r4, -4
+	beq	2f
+	
+	andi. r0, r6, 3
+	mtctr r7
+	bne 5f
+	
+	1:
+	
+	lwz r7, 4(r4)
+	lwzu r8, 8(r4)
+	stw r7, 4(r6)
+	stwu r8, 8(r6)
+	bdnz 1b
+	
+	andi. r5, r5, 7
+	
+	2:
+	
+	cmplwi 0, r5, 4
+	blt 3f
+	
+	lwzu r0, 4(r4)
+	addi r5, r5, -4
+	stwu r0, 4(r6)
+	
+	3:
+	
+	cmpwi 0, r5, 0
+	beqlr
+	mtctr r5
+	addi r4, r4, 3
+	addi r6, r6, 3
+	
+	4:
+	
+	lbzu r0, 1(r4)
+	stbu r0, 1(r6)
+	bdnz 4b
+	blr
+	
+	5:
+	
+	subfic r0, r0, 4
+	mtctr r0
+	
+	6:
+	
+	lbz r7, 4(r4)
+	addi r4, r4, 1
+	stb r7, 4(r6)
+	addi r6, r6, 1
+	bdnz 6b
+	subf r5, r0, r5
+	rlwinm. r7, r5, 32-3, 3, 31
+	beq 2b
+	mtctr r7
+	b 1b
+
+
+jump_to_kernel:
+	
+	# r3 = bootinfo (pa)
+	# r4 = bootinfo_size
+	# r5 = trans (pa)
+	# r6 = bytes to copy
+	# r7 = real_mode (pa)
+	# r8 = framebuffer (pa)
+	# r9 = scanline
+	
+	# disable interrupts
+	
+	mfmsr r31
+	rlwinm r31, r31, 0, 17, 15
+	mtmsr r31
+	
+	# set real_mode meeting point address
+	
+	mtspr srr0, r7
+	
+	# jumps to real_mode
+	
+	mfmsr r31
+	lis r30, ~0@h
+	ori r30, r30, ~(msr_ir | msr_dr | msr_ee)@l
+	and r31, r31, r30
+	mtspr srr1, r31
+	
+	sync
+	isync
+	rfi
+
+.section REALMODE, "ax"
+.align PAGE_WIDTH
+.global real_mode
+
+real_mode:
+	
+	DEBUG_INIT
+	DEBUG_real_mode
+	
+	# copy kernel to proper location
+	#
+	# r5 = trans (pa)
+	# r6 = bytes to copy
+	# r8 = framebuffer (pa)
+	# r9 = scanline
+	
+	li r31, PAGE_SIZE >> 2
+	li r30, 0
+	
+	page_copy:
+		
+		cmpwi r6, 0
+		beq copy_end
+		
+		# copy page
+		
+		mtctr r31
+		lwz r29, 0(r5)
+		
+		DEBUG_INIT
+		DEBUG_copy_loop
+		
+		copy_loop:
+			
+			lwz r28, 0(r29)
+			stw r28, 0(r30)
+			
+			addi r29, r29, 4
+			addi r30, r30, 4
+			subi r6, r6, 4
+			
+			cmpwi r6, 0
+			beq copy_end
+			
+			bdnz copy_loop
+			
+			DEBUG_end_copy_loop
+		
+		addi r5, r5, 4
+		b page_copy
+	
+	copy_end:
+	
+	DEBUG_segments
+	
+	# initially fill segment registers
+	
+	li r31, 0
+	
+	li r29, 8
+	mtctr r29
+	li r30, 0                     # ASID 0 (VSIDs 0 .. 7)
+
+	seg_fill_uspace:
+	
+		mtsrin r30, r31
+		addi r30, r30, 1
+		addis r31, r31, 0x1000    # move to next SR
+		
+		bdnz seg_fill_uspace
+	
+	li r29, 8
+	mtctr r29
+	lis r30, 0x4000               # priviledged access only
+	ori r30, r30, 8               # ASID 0 (VSIDs 8 .. 15)
+	
+	seg_fill_kernel:
+	
+		mtsrin r30, r31
+		addi r30, r30, 1
+		addis r31, r31, 0x1000    # move to next SR
+		
+		bdnz seg_fill_kernel
+	
+	# invalidate block address translation registers
+	
+	DEBUG_bat
+	
+	li r30, 0
+	
+	mtspr ibat0u, r30
+	mtspr ibat0l, r30
+	
+	mtspr ibat1u, r30
+	mtspr ibat1l, r30
+	
+	mtspr ibat2u, r30
+	mtspr ibat2l, r30
+	
+	mtspr ibat3u, r30
+	mtspr ibat3l, r30
+	
+	mtspr dbat0u, r30
+	mtspr dbat0l, r30
+	
+	mtspr dbat1u, r30
+	mtspr dbat1l, r30
+	
+	mtspr dbat2u, r30
+	mtspr dbat2l, r30
+	
+	mtspr dbat3u, r30
+	mtspr dbat3l, r30
+	
+	# create empty Page Hash Table
+	# on top of memory, size 64 KB
+	
+	DEBUG_pht
+	
+	lwz r31, 0(r3)                # r31 = memory size
+	
+	lis r30, 65536@h
+	ori r30, r30, 65536@l         # r30 = 65536
+	
+	subi r29, r30, 1              # r29 = 65535
+	
+	sub r31, r31, r30
+	andc r31, r31, r29            # pht = ALIGN_DOWN(memory_size - 65536, 65536)
+	
+	mtsdr1 r31
+	
+	li r29, 2
+	srw r30, r30, r29             # r30 = 16384
+	li r29, 0
+	
+	pht_clear:
+		
+		# write zeroes
+		
+		stw r29, 0(r31)
+		
+		addi r31, r31, 4
+		subi r30, r30, 4
+		
+		cmpwi r30, 0
+		beq clear_end
+		
+		bdnz pht_clear
+
+		DEBUG_end_pht_clear
+		
+	clear_end:
+	
+#ifdef CONFIG_BAT
+	
+	# create BAT identity mapping
+	
+	DEBUG_mapping
+	
+	lwz r31, 0(r3)                # r31 = memory size
+	
+	lis r29, 0x0002
+	cmpw r31, r29
+	blt no_bat                    # less than 128 KB -> no BAT
+	
+	li r29, 18
+	srw r31, r31, r29             # r31 = total >> 18
+	
+	# create Block Length mask by replicating
+	# the leading logical one 14 times
+	
+	li r29, 14
+	mtctr r31
+	li r29, 1
+	
+	bat_mask:
+		srw r30, r31, r29         # r30 = mask >> 1
+		or r31, r31, r30          # mask = mask | r30
+		
+		bdnz bat_mask
+	
+	DEBUG_bat_mask
+	
+	andi. r31, r31, 0x07ff        # mask = mask & 0x07ff (BAT can map up to 256 MB)
+	
+	li r29, 2
+	slw r31, r31, r29             # mask = mask << 2
+	ori r31, r31, 0x0002          # mask = mask | 0x0002 (priviledged access only)
+	
+	lis r29, 0x8000
+	or r29, r29, r31
+	
+	lis r30, 0x0000
+	ori r30, r30, 0x0002
+	
+	mtspr ibat0u, r29
+	mtspr ibat0l, r30
+	
+	mtspr dbat0u, r29
+	mtspr dbat0l, r30
+	
+	no_bat:
+
+#endif
+	
+	DEBUG_tlb
+	
+	tlbia
+	tlbsync
+	
+	DEBUG_prepare
+	
+	# start the kernel
+	#
+	# pc = KERNEL_START_ADDR
+	# r3 = bootinfo (pa)
+	# sprg0 = KA2PA(KERNEL_START_ADDR)
+	# sprg3 = physical memory size
+	# sp = 0 (pa)
+	
+	lis r31, KERNEL_START_ADDR@ha
+	addi r31, r31, KERNEL_START_ADDR@l
+	
+	mtspr srr0, r31
+	
+	subis r31, r31, 0x8000
+	mtsprg0 r31
+	
+	lwz r31, 0(r3)
+	mtsprg3 r31
+	
+	li sp, 0
+	
+	mfmsr r31
+	ori r31, r31, (msr_ir | msr_dr)@l
+	mtspr srr1, r31
+	
+	sync
+	isync
+	
+	DEBUG_rfi
+	rfi
+
+.align PAGE_WIDTH
+.global trans
+trans:
+	.space (TRANS_SIZE * TRANS_ITEM_SIZE)
Index: boot/arch/ppc32/loader/asm.h
===================================================================
--- boot/arch/ppc32/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ASM_H__
+#define __ASM_H__
+
+#define PAGE_SIZE 4096
+#define PAGE_WIDTH 12
+
+#define TRANS_SIZE 1024
+#define TRANS_ITEM_SIZE 4
+
+#define KERNEL_START_ADDR 0x80008000
+
+#ifndef __ASM__
+
+#define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
+
+extern void *trans[TRANS_SIZE];
+
+extern void halt();
+extern void jump_to_kernel(void *bootinfo, unsigned int bootinfo_size, void *trans, unsigned int kernel_size, void *real_mode, void *fb, unsigned int scanline) __attribute__((noreturn));
+extern void real_mode();
+
+#endif
+
+#endif
Index: boot/arch/ppc32/loader/boot.S
===================================================================
--- boot/arch/ppc32/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,42 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#include "regname.h"
+
+.section BOOTSTRAP, "ax"
+
+.global start
+
+start:
+	lis r4, ofw_cif@ha
+	addi r4, r4, ofw_cif@l
+	stw r5, 0(r4)
+	
+	bl init
+	
+	b bootstrap
Index: boot/arch/ppc32/loader/debug.inc
===================================================================
--- boot/arch/ppc32/loader/debug.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/debug.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,11479 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+.macro DEBUG_INIT
+#ifdef CONFIG_DEBUG
+	lis r11, 65535
+	ori r11, r11, 65535
+	
+	lis r12, 0
+	ori r12, r12, 0
+	
+	mr r10, r8
+#endif
+.endm
+
+.macro DEBUG_real_mode
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+#endif
+.endm
+
+.macro DEBUG_copy_loop
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+#endif
+.endm
+
+.macro DEBUG_end_copy_loop
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r11, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r11, 328(r10)
+	stw r11, 332(r10)
+	stw r11, 336(r10)
+	stw r11, 340(r10)
+	stw r11, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r11, 360(r10)
+	stw r11, 364(r10)
+	stw r11, 368(r10)
+	stw r11, 372(r10)
+	stw r11, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r11, 388(r10)
+	stw r11, 392(r10)
+	stw r12, 396(r10)
+	stw r11, 400(r10)
+	stw r11, 404(r10)
+	stw r11, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r11, 376(r10)
+	stw r11, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r11, 408(r10)
+	stw r11, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r11, 376(r10)
+	stw r11, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r11, 408(r10)
+	stw r11, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r11, 376(r10)
+	stw r11, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r11, 408(r10)
+	stw r11, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r11, 376(r10)
+	stw r11, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r11, 408(r10)
+	stw r11, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r11, 376(r10)
+	stw r11, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r11, 408(r10)
+	stw r11, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r11, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r11, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r11, 328(r10)
+	stw r11, 332(r10)
+	stw r11, 336(r10)
+	stw r11, 340(r10)
+	stw r11, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r11, 360(r10)
+	stw r11, 364(r10)
+	stw r11, 368(r10)
+	stw r11, 372(r10)
+	stw r11, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r11, 400(r10)
+	stw r11, 404(r10)
+	stw r11, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r11, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r11, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+#endif
+.endm
+
+.macro DEBUG_segments
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+#endif
+.endm
+
+.macro DEBUG_bat
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+#endif
+.endm
+
+.macro DEBUG_mapping
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+#endif
+.endm
+
+.macro DEBUG_tlb
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+#endif
+.endm
+
+.macro DEBUG_prepare
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r12, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+#endif
+.endm
+
+.macro DEBUG_rfi
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+#endif
+.endm
+
+.macro DEBUG_pht
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+#endif
+.endm
+
+.macro DEBUG_end_pht_clear
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r11, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r11, 328(r10)
+	stw r11, 332(r10)
+	stw r11, 336(r10)
+	stw r11, 340(r10)
+	stw r11, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r11, 360(r10)
+	stw r11, 364(r10)
+	stw r11, 368(r10)
+	stw r11, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r11, 388(r10)
+	stw r11, 392(r10)
+	stw r12, 396(r10)
+	stw r11, 400(r10)
+	stw r11, 404(r10)
+	stw r11, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r11, 372(r10)
+	stw r11, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r11, 400(r10)
+	stw r12, 404(r10)
+	stw r11, 408(r10)
+	stw r11, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r11, 332(r10)
+	stw r11, 336(r10)
+	stw r11, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r11, 360(r10)
+	stw r11, 364(r10)
+	stw r11, 368(r10)
+	stw r11, 372(r10)
+	stw r11, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r11, 408(r10)
+	stw r11, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r11, 372(r10)
+	stw r11, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r11, 372(r10)
+	stw r11, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r11, 260(r10)
+	stw r11, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r11, 280(r10)
+	stw r11, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r11, 324(r10)
+	stw r11, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r11, 344(r10)
+	stw r11, 348(r10)
+	stw r12, 352(r10)
+	stw r11, 356(r10)
+	stw r11, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r11, 372(r10)
+	stw r11, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r11, 264(r10)
+	stw r11, 268(r10)
+	stw r11, 272(r10)
+	stw r11, 276(r10)
+	stw r11, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r11, 300(r10)
+	stw r11, 304(r10)
+	stw r11, 308(r10)
+	stw r11, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r11, 328(r10)
+	stw r11, 332(r10)
+	stw r11, 336(r10)
+	stw r11, 340(r10)
+	stw r11, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r11, 360(r10)
+	stw r11, 364(r10)
+	stw r11, 368(r10)
+	stw r12, 372(r10)
+	stw r11, 376(r10)
+	stw r11, 380(r10)
+	stw r12, 384(r10)
+	stw r11, 388(r10)
+	stw r11, 392(r10)
+	stw r11, 396(r10)
+	stw r11, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	stw r12, 256(r10)
+	stw r12, 260(r10)
+	stw r12, 264(r10)
+	stw r12, 268(r10)
+	stw r12, 272(r10)
+	stw r12, 276(r10)
+	stw r12, 280(r10)
+	stw r12, 284(r10)
+	stw r12, 288(r10)
+	stw r12, 292(r10)
+	stw r12, 296(r10)
+	stw r12, 300(r10)
+	stw r12, 304(r10)
+	stw r12, 308(r10)
+	stw r12, 312(r10)
+	stw r12, 316(r10)
+	stw r12, 320(r10)
+	stw r12, 324(r10)
+	stw r12, 328(r10)
+	stw r12, 332(r10)
+	stw r12, 336(r10)
+	stw r12, 340(r10)
+	stw r12, 344(r10)
+	stw r12, 348(r10)
+	stw r12, 352(r10)
+	stw r12, 356(r10)
+	stw r12, 360(r10)
+	stw r12, 364(r10)
+	stw r12, 368(r10)
+	stw r12, 372(r10)
+	stw r12, 376(r10)
+	stw r12, 380(r10)
+	stw r12, 384(r10)
+	stw r12, 388(r10)
+	stw r12, 392(r10)
+	stw r12, 396(r10)
+	stw r12, 400(r10)
+	stw r12, 404(r10)
+	stw r12, 408(r10)
+	stw r12, 412(r10)
+#endif
+.endm
+
+.macro DEBUG_bat_mask
+#ifdef CONFIG_DEBUG
+	
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r11, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r11, 68(r10)
+	stw r11, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r12, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r11, 140(r10)
+	stw r11, 144(r10)
+	stw r11, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r11, 240(r10)
+	stw r11, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r11, 244(r10)
+	stw r11, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r11, 24(r10)
+	stw r11, 28(r10)
+	stw r12, 32(r10)
+	stw r11, 36(r10)
+	stw r11, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r11, 52(r10)
+	stw r11, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r11, 76(r10)
+	stw r11, 80(r10)
+	stw r12, 84(r10)
+	stw r11, 88(r10)
+	stw r11, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r11, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r11, 164(r10)
+	stw r11, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r11, 180(r10)
+	stw r11, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r11, 196(r10)
+	stw r11, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r11, 216(r10)
+	stw r11, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r11, 8(r10)
+	stw r11, 12(r10)
+	stw r11, 16(r10)
+	stw r11, 20(r10)
+	stw r11, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r11, 40(r10)
+	stw r11, 44(r10)
+	stw r11, 48(r10)
+	stw r12, 52(r10)
+	stw r11, 56(r10)
+	stw r11, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r11, 80(r10)
+	stw r11, 84(r10)
+	stw r11, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r11, 132(r10)
+	stw r11, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r11, 152(r10)
+	stw r11, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r11, 168(r10)
+	stw r11, 172(r10)
+	stw r11, 176(r10)
+	stw r12, 180(r10)
+	stw r11, 184(r10)
+	stw r11, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r11, 200(r10)
+	stw r11, 204(r10)
+	stw r11, 208(r10)
+	stw r11, 212(r10)
+	stw r11, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r11, 228(r10)
+	stw r11, 232(r10)
+	stw r11, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r11, 248(r10)
+	stw r11, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r11, 100(r10)
+	stw r11, 104(r10)
+	stw r11, 108(r10)
+	stw r11, 112(r10)
+	stw r11, 116(r10)
+	stw r11, 120(r10)
+	stw r11, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+	
+	add r10, r10, r9
+	stw r12, 0(r10)
+	stw r12, 4(r10)
+	stw r12, 8(r10)
+	stw r12, 12(r10)
+	stw r12, 16(r10)
+	stw r12, 20(r10)
+	stw r12, 24(r10)
+	stw r12, 28(r10)
+	stw r12, 32(r10)
+	stw r12, 36(r10)
+	stw r12, 40(r10)
+	stw r12, 44(r10)
+	stw r12, 48(r10)
+	stw r12, 52(r10)
+	stw r12, 56(r10)
+	stw r12, 60(r10)
+	stw r12, 64(r10)
+	stw r12, 68(r10)
+	stw r12, 72(r10)
+	stw r12, 76(r10)
+	stw r12, 80(r10)
+	stw r12, 84(r10)
+	stw r12, 88(r10)
+	stw r12, 92(r10)
+	stw r12, 96(r10)
+	stw r12, 100(r10)
+	stw r12, 104(r10)
+	stw r12, 108(r10)
+	stw r12, 112(r10)
+	stw r12, 116(r10)
+	stw r12, 120(r10)
+	stw r12, 124(r10)
+	stw r12, 128(r10)
+	stw r12, 132(r10)
+	stw r12, 136(r10)
+	stw r12, 140(r10)
+	stw r12, 144(r10)
+	stw r12, 148(r10)
+	stw r12, 152(r10)
+	stw r12, 156(r10)
+	stw r12, 160(r10)
+	stw r12, 164(r10)
+	stw r12, 168(r10)
+	stw r12, 172(r10)
+	stw r12, 176(r10)
+	stw r12, 180(r10)
+	stw r12, 184(r10)
+	stw r12, 188(r10)
+	stw r12, 192(r10)
+	stw r12, 196(r10)
+	stw r12, 200(r10)
+	stw r12, 204(r10)
+	stw r12, 208(r10)
+	stw r12, 212(r10)
+	stw r12, 216(r10)
+	stw r12, 220(r10)
+	stw r12, 224(r10)
+	stw r12, 228(r10)
+	stw r12, 232(r10)
+	stw r12, 236(r10)
+	stw r12, 240(r10)
+	stw r12, 244(r10)
+	stw r12, 248(r10)
+	stw r12, 252(r10)
+#endif
+.endm
Index: boot/arch/ppc32/loader/main.c
===================================================================
--- boot/arch/ppc32/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "main.h" 
+#include <printf.h>
+#include "asm.h"
+#include "_components.h"
+
+#define HEAP_GAP 1024000
+
+bootinfo_t bootinfo;
+
+
+static void check_align(const void *addr, const char *desc)
+{
+	if ((unsigned int) addr % PAGE_SIZE != 0) {
+		printf("Error: %s not on page boundary, halting.\n", desc);
+		halt();
+	}
+}
+
+
+static void fix_overlap(void *va, void **pa, const char *desc, unsigned int *top)
+{
+	if ((unsigned int) *pa + PAGE_SIZE < *top) {
+		printf("Warning: %s overlaps kernel physical area\n", desc);
+		
+		void *new_va = (void *) (ALIGN_UP((unsigned int) KERNEL_END + HEAP_GAP, PAGE_SIZE) + *top);
+		void *new_pa = (void *) (HEAP_GAP + *top);
+		*top += PAGE_SIZE;
+		
+		if (ofw_map(new_pa, new_va, PAGE_SIZE, 0) != 0) {
+			printf("Error: Unable to map page aligned memory at %L (physical %L), halting.\n", new_va, new_pa);
+			halt();
+		}
+		
+		if ((unsigned int) new_pa + PAGE_SIZE < KERNEL_SIZE) {
+			printf("Error: %s cannot be relocated, halting.\n", desc);
+			halt();	
+		}
+		
+		printf("Relocating %L -> %L (physical %L -> %L)\n", va, new_va, *pa, new_pa);
+		*pa = new_pa;
+		memcpy(new_va, va, PAGE_SIZE);
+	}
+}
+
+
+void bootstrap(void)
+{
+	printf("\nHelenOS PPC Bootloader\n");
+	
+	init_components();
+	
+	unsigned int i;
+	
+	for (i = 0; i < COMPONENTS; i++)
+		check_align(components[i].start, components[i].name);
+	
+	check_align(&real_mode, "bootstrap trampoline");
+	check_align(&trans, "translation table");
+	
+	if (!ofw_memmap(&bootinfo.memmap)) {
+		printf("Error: unable to get memory map, halting.\n");
+		halt();
+	}
+	
+	if (bootinfo.memmap.total == 0) {
+		printf("Error: no memory detected, halting.\n");
+		halt();
+	}
+	
+	if (!ofw_screen(&bootinfo.screen)) {
+		printf("Error: unable to get screen properties, halting.\n");
+		halt();
+	}
+	
+	if (!ofw_keyboard(&bootinfo.keyboard)) {
+		printf("Error: unable to get keyboard properties, halting.\n");
+		halt();
+	}
+	
+	printf("\nDevice statistics\n");
+	printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
+	printf(" keyboard at %L (size %d bytes)\n", bootinfo.keyboard.addr, bootinfo.keyboard.size);
+	
+	void *real_mode_pa = ofw_translate(&real_mode);
+	void *trans_pa = ofw_translate(&trans);
+	void *bootinfo_pa = ofw_translate(&bootinfo);
+	
+	printf("\nMemory statistics (total %d MB)\n", bootinfo.memmap.total >> 20);
+	printf(" %L: boot info structure (physical %L)\n", &bootinfo, bootinfo_pa);
+	printf(" %L: bootstrap trampoline (physical %L)\n", &real_mode, real_mode_pa);
+	printf(" %L: translation table (physical %L)\n", &trans, trans_pa);
+	for (i = 0; i < COMPONENTS; i++)
+		printf(" %L: %s image (size %d bytes)\n", components[i].start, components[i].name, components[i].size);
+	
+	unsigned int top = 0;
+	for (i = 0; i < COMPONENTS; i++)
+		top += ALIGN_UP(components[i].size, PAGE_SIZE);
+	
+	unsigned int pages = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE) >> PAGE_WIDTH;
+	
+	for (i = 0; i < pages; i++) {
+		void *pa = ofw_translate(KERNEL_START + (i << PAGE_WIDTH));
+		fix_overlap(KERNEL_START + (i << PAGE_WIDTH), &pa, "kernel", &top);
+		trans[i] = pa;
+	}
+	
+	bootinfo.taskmap.count = 0;
+	for (i = 1; i < COMPONENTS; i++) {
+		unsigned int component_pages = ALIGN_UP(components[i].size, PAGE_SIZE) >> PAGE_WIDTH;
+		unsigned int j;
+		
+		for (j = 0; j < component_pages; j++) {
+			void *pa = ofw_translate(components[i].start + (j << PAGE_WIDTH));
+			fix_overlap(components[i].start + (j << PAGE_WIDTH), &pa, components[i].name, &top);
+			trans[pages + j] = pa;
+			if (j == 0) {
+				bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = (void *) (pages << PAGE_WIDTH);
+				bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = components[i].size;
+				bootinfo.taskmap.count++;
+			}
+		}
+		
+		pages += component_pages;
+	}
+	
+	fix_overlap(&real_mode, &real_mode_pa, "bootstrap trampoline", &top);
+	fix_overlap(&trans, &trans_pa, "translation table", &top);
+	fix_overlap(&bootinfo, &bootinfo_pa, "boot info", &top);
+	
+	printf("\nBooting the kernel...\n");
+	jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa, (void *) bootinfo.screen.addr, bootinfo.screen.scanline);
+}
Index: boot/arch/ppc32/loader/main.h
===================================================================
--- boot/arch/ppc32/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+#include "ofw.h"
+
+/** Align to the nearest higher address.
+ *
+ * @param addr  Address or size to be aligned.
+ * @param align Size of alignment, must be power of 2.
+ */
+#define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1))
+
+#define TASKMAP_MAX_RECORDS 32
+
+typedef struct {
+	void *addr;
+	unsigned int size;
+} task_t;
+
+typedef struct {
+	unsigned int count;
+	task_t tasks[TASKMAP_MAX_RECORDS];
+} taskmap_t;
+
+typedef struct {
+	memmap_t memmap;
+	taskmap_t taskmap;
+	screen_t screen;
+	keyboard_t keyboard;
+} bootinfo_t;
+
+extern void start(void);
+extern void bootstrap(void);
+
+extern memmap_t memmap;
+
+#endif
Index: boot/arch/ppc32/loader/ofw.c
===================================================================
--- boot/arch/ppc32/loader/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+#include <ofw.h>
+#include <printf.h>
+
+typedef int (* ofw_entry_t)(ofw_args_t *args);
+
+int ofw(ofw_args_t *args)
+{
+	return ((ofw_entry_t) ofw_cif)(args);
+}
+
+void write(const char *str, const int len)
+{
+	ofw_write(str, len);
+}
+
+int ofw_keyboard(keyboard_t *keyboard)
+{
+	char device_name[BUF_SIZE];
+	
+	if (ofw_get_property(ofw_aliases, "macio", device_name, sizeof(device_name)) <= 0)
+		return false;
+				
+	phandle device = ofw_find_device(device_name);
+	if (device == -1)
+		return false;
+								
+	pci_reg_t macio;
+	if (ofw_get_property(device, "assigned-addresses", &macio, sizeof(macio)) <= 0)
+		return false;
+	keyboard->addr = macio.addr.addr_lo;
+	keyboard->size = macio.size_lo;
+
+	return true;
+}
+
+int ofw_translate_failed(ofw_arg_t flag)
+{
+	return 0;
+}
Index: boot/arch/ppc32/loader/pack
===================================================================
--- boot/arch/ppc32/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,115 @@
+#! /bin/sh
+
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+[ "$#" -lt 1 ] && exit 1
+
+OBJCOPY="$1"
+LINK="_link.ld"
+HEADER="_components.h"
+
+shift
+
+echo 'OUTPUT_FORMAT("elf32-powerpc")
+OUTPUT_ARCH(powerpc:common)
+ENTRY(start)
+
+SECTIONS {
+	.boot 0x10000000: AT (0) { 
+		*(BOOTSTRAP);
+		*(REALMODE);
+		*(.text);
+		
+		*(.rodata);
+		*(.rodata.*);
+		*(.data);		/* initialized data */
+		*(.sdata);
+		*(.sdata2);
+		*(.sbss);
+		*(.bss);		/* uninitialized static variables */	
+		*(COMMON); 		/* global variables */' > "$LINK"
+
+echo '#ifndef ___COMPONENTS_H__
+#define ___COMPONENTS_H__
+
+typedef struct {
+	char *name;
+	
+	void *start;
+	void *end;
+	unsigned int size;
+} component_t;' > "$HEADER"
+
+COUNT="0"
+DATA=""
+
+for TASK in "$@" ; do
+	BASENAME="`basename "$TASK" | sed 's/^\(.*\)\.[^.]*$/\1/'`"
+	OBJECT="${BASENAME}.o"
+	SYMBOL="`echo "_binary_$TASK" | tr "./" "__"`"
+	MACRO="`echo "$BASENAME" | tr [:lower:] [:upper:]`"
+	echo "$TASK -> $OBJECT"
+	
+	echo "
+		. = ALIGN(4096);
+		*(.${BASENAME}_image);" >> "$LINK"
+	
+	echo "
+extern int ${SYMBOL}_start;
+extern int ${SYMBOL}_end;
+
+#define ${MACRO}_START ((void *) &${SYMBOL}_start)
+#define ${MACRO}_END ((void *) &${SYMBOL}_end)
+#define ${MACRO}_SIZE ((unsigned int) ${MACRO}_END - (unsigned int) ${MACRO}_START)" >> "$HEADER"
+	
+	"$OBJCOPY" -I binary -O elf32-powerpc -B powerpc:common --rename-section ".data=.${BASENAME}_image" "$TASK" "$OBJECT"
+		
+	DATA="${DATA}
+	components[$COUNT].name = \"${BASENAME}\";
+	components[$COUNT].start = ${MACRO}_START;
+	components[$COUNT].end = ${MACRO}_END;
+	components[$COUNT].size = ${MACRO}_SIZE;";
+	COUNT="`expr "$COUNT" + 1`"
+done
+
+echo '	}
+}' >> "$LINK"
+
+echo "
+#define COMPONENTS $COUNT
+
+component_t components[COMPONENTS]; 
+
+static void init_components(void)
+{
+$DATA
+}
+
+#endif
+" >> "$HEADER"
Index: boot/arch/ppc32/loader/regname.h
===================================================================
--- boot/arch/ppc32/loader/regname.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/regname.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ppc32_REGNAME_H__
+#define __ppc32_REGNAME_H__
+
+/* Condition Register Bit Fields */
+#define	cr0	0
+#define	cr1	1
+#define	cr2	2
+#define	cr3	3
+#define	cr4	4
+#define	cr5	5
+#define	cr6	6
+#define	cr7	7
+
+/* General Purpose Registers (GPRs) */
+#define	r0	0
+#define	r1	1
+#define	r2	2
+#define	r3	3
+#define	r4	4
+#define	r5	5
+#define	r6	6
+#define	r7	7
+#define	r8	8
+#define	r9	9
+#define	r10	10
+#define	r11	11
+#define	r12	12
+#define	r13	13
+#define	r14	14
+#define	r15	15
+#define	r16	16
+#define	r17	17
+#define	r18	18
+#define	r19	19
+#define	r20	20
+#define	r21	21
+#define	r22	22
+#define	r23	23
+#define	r24	24
+#define	r25	25
+#define	r26	26
+#define	r27	27
+#define	r28	28
+#define	r29	29
+#define	r30	30
+#define	r31	31
+
+/* GPR Aliases */
+#define	sp	1
+
+/* Floating Point Registers (FPRs) */
+#define	fr0		0
+#define	fr1		1
+#define	fr2		2
+#define	fr3		3
+#define	fr4		4
+#define	fr5		5
+#define	fr6		6
+#define	fr7		7
+#define	fr8		8
+#define	fr9		9
+#define	fr10	10
+#define	fr11	11
+#define	fr12	12
+#define	fr13	13
+#define	fr14	14
+#define	fr15	15
+#define	fr16	16
+#define	fr17	17
+#define	fr18	18
+#define	fr19	19
+#define	fr20	20
+#define	fr21	21
+#define	fr22	22
+#define	fr23	23
+#define	fr24	24
+#define	fr25	25
+#define	fr26	26
+#define	fr27	27
+#define	fr28	28
+#define	fr29	29
+#define	fr30	30
+#define	fr31	31
+
+#define	vr0		0
+#define	vr1		1
+#define	vr2		2
+#define	vr3		3
+#define	vr4		4
+#define	vr5		5
+#define	vr6		6
+#define	vr7		7
+#define	vr8		8
+#define	vr9		9
+#define	vr10	10
+#define	vr11	11
+#define	vr12	12
+#define	vr13	13
+#define	vr14	14
+#define	vr15	15
+#define	vr16	16
+#define	vr17	17
+#define	vr18	18
+#define	vr19	19
+#define	vr20	20
+#define	vr21	21
+#define	vr22	22
+#define	vr23	23
+#define	vr24	24
+#define	vr25	25
+#define	vr26	26
+#define	vr27	27
+#define	vr28	28
+#define	vr29	29
+#define	vr30	30
+#define	vr31	31
+
+#define	evr0	0
+#define	evr1	1
+#define	evr2	2
+#define	evr3	3
+#define	evr4	4
+#define	evr5	5
+#define	evr6	6
+#define	evr7	7
+#define	evr8	8
+#define	evr9	9
+#define	evr10	10
+#define	evr11	11
+#define	evr12	12
+#define	evr13	13
+#define	evr14	14
+#define	evr15	15
+#define	evr16	16
+#define	evr17	17
+#define	evr18	18
+#define	evr19	19
+#define	evr20	20
+#define	evr21	21
+#define	evr22	22
+#define	evr23	23
+#define	evr24	24
+#define	evr25	25
+#define	evr26	26
+#define	evr27	27
+#define	evr28	28
+#define	evr29	29
+#define	evr30	30
+#define	evr31	31
+
+/* Special Purpose Registers (SPRs) */
+#define	xer		1
+#define lr		8
+#define ctr		9
+#define	dec		22
+#define	sdr1	25
+#define	srr0	26
+#define srr1	27
+#define	sprg0	272
+#define	sprg1	273
+#define	sprg2	274
+#define	sprg3	275
+#define	prv		287
+#define ibat0u	528
+#define ibat0l	529
+#define ibat1u	530
+#define ibat1l	531
+#define ibat2u	532
+#define ibat2l	533
+#define ibat3u	534
+#define ibat3l	535
+#define dbat0u	536
+#define dbat0l	537
+#define dbat1u	538
+#define dbat1l	539
+#define dbat2u	540
+#define dbat2l	541
+#define dbat3u	542
+#define dbat3l	543
+#define hid0	1008
+
+/* MSR bits */
+#define msr_ir	(1 << 4)
+#define msr_dr	(1 << 5)
+#define msr_ee	(1 << 15)
+
+/* HID0 bits */
+#define hid0_ice	(1 << 15)
+#define hid0_dce	(1 << 14)
+#define hid0_icfi	(1 << 11)
+#define hid0_dci	(1 << 10)
+
+#endif
Index: boot/arch/ppc32/loader/types.h
===================================================================
--- boot/arch/ppc32/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc32/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TYPES_H__
+#define TYPES_H__
+
+#include <gentypes.h>
+
+typedef signed char int8_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long uint64_t;
+
+typedef uint32_t uintptr_t;
+typedef uint32_t unative_t;
+
+#endif
Index: boot/arch/ppc64/Makefile.inc
===================================================================
--- boot/arch/ppc64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,39 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+build: image.boot
+
+image.boot: kernel uspace
+	make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
+	cp arch/$(ARCH)/loader/image.boot image.boot
+
+clean: clean_boot_gen clean_kernel clean_uspace
+	make -C arch/$(ARCH)/loader clean KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR)
+	-rm -f image.boot
+
+arch_distclean: distclean_kernel distclean_uspace
Index: boot/arch/ppc64/loader/Makefile
===================================================================
--- boot/arch/ppc64/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,90 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = ppc64-linux-gnu
+TOOLCHAIN_DIR = /usr/local/ppc64/bin
+
+ifeq ($(COMPILER),native)
+	CC = gcc
+	AS = as
+	LD = ld
+	OBJCOPY = objcopy
+	OBJDUMP = objdump
+else
+	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
+	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
+	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
+	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
+	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
+endif
+
+CFLAGS = -I. -I../../../generic -I../../../genarch -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=powerpc64 -msoft-float -m64
+DEFS = 
+
+SOURCES = \
+	main.c \
+	../../../genarch/ofw.c \
+	../../../generic/printf.c \
+	asm.S \
+	boot.S
+
+COMPONENTS = \
+	$(KERNELDIR)/kernel.bin \
+	$(USPACEDIR)/ns/ns \
+	$(USPACEDIR)/init/init \
+	$(USPACEDIR)/fb/fb
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS))))
+
+.PHONY: all clean depend
+
+all: image.boot
+
+-include Makefile.depend
+
+image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) kernel.o 
+	$(LD) -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@
+
+depend:
+	-makedepend $(DEFS) $(CFLAGS) -f - $(SOURCES) > Makefile.depend 2> /dev/null
+
+clean:
+	-rm -f _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) image.boot Makefile.depend
+
+_components.h _link.ld $(COMPONENT_OBJECTS): $(COMPONENTS)
+	./pack $(OBJCOPY) $(COMPONENTS)
+
+%.o: %.S
+	$(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: boot/arch/ppc64/loader/asm.S
===================================================================
--- boot/arch/ppc64/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,215 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#include "asm.h"
+#include "regname.h"
+
+.text
+
+.global halt
+.global memcpy
+.global jump_to_kernel
+
+halt:
+	b halt
+
+memcpy:
+	srwi. r7, r5, 3
+	addi r6, r3, -4
+	addi r4, r4, -4
+	beq	2f
+	
+	andi. r0, r6, 3
+	mtctr r7
+	bne 5f
+	
+	1:
+	
+	lwz r7, 4(r4)
+	lwzu r8, 8(r4)
+	stw r7, 4(r6)
+	stwu r8, 8(r6)
+	bdnz 1b
+	
+	andi. r5, r5, 7
+	
+	2:
+	
+	cmplwi 0, r5, 4
+	blt 3f
+	
+	lwzu r0, 4(r4)
+	addi r5, r5, -4
+	stwu r0, 4(r6)
+	
+	3:
+	
+	cmpwi 0, r5, 0
+	beqlr
+	mtctr r5
+	addi r4, r4, 3
+	addi r6, r6, 3
+	
+	4:
+	
+	lbzu r0, 1(r4)
+	stbu r0, 1(r6)
+	bdnz 4b
+	blr
+	
+	5:
+	
+	subfic r0, r0, 4
+	mtctr r0
+	
+	6:
+	
+	lbz r7, 4(r4)
+	addi r4, r4, 1
+	stb r7, 4(r6)
+	addi r6, r6, 1
+	bdnz 6b
+	subf r5, r0, r5
+	rlwinm. r7, r5, 32-3, 3, 31
+	beq 2b
+	mtctr r7
+	b 1b
+
+
+jump_to_kernel:
+	
+	# r3 = bootinfo (pa)
+	# r4 = bootinfo_size
+	# r5 = trans (pa)
+	# r6 = bytes to copy
+	# r7 = real_mode (pa)
+	
+	# disable interrupts
+	
+	mfmsr r31
+	rlwinm r31, r31, 0, 17, 15
+	mtmsr r31
+	
+	# set real_mode meeting point address
+	
+	mtspr srr0, r7
+	
+	# jumps to real_mode
+	
+	mfmsr r31
+	lis r30, ~0@h
+	ori r30, r30, ~(msr_ir | msr_dr)@l
+	and r31, r31, r30
+	mtspr srr1, r31
+	
+	sync
+	isync
+	rfid
+
+.section REALMODE, "ax"
+.align PAGE_WIDTH
+.global real_mode
+
+real_mode:
+	
+	# copy kernel to proper location
+	#
+	# r5 = trans (pa)
+	# r6 = bytes to copy
+	
+	li r31, PAGE_SIZE >> 2
+	li r30, 0
+	
+	page_copy:
+		
+		cmpwi r6, 0
+		beq copy_end
+		
+		# copy page
+		
+		mtctr r31
+		lwz r29, 0(r5)
+		
+		copy_loop:
+			
+			lwz r28, 0(r29)
+			stw r28, 0(r30)
+			
+			addi r29, r29, 4
+			addi r30, r30, 4
+			subi r6, r6, 4
+			
+			cmpwi r6, 0
+			beq copy_end
+			
+			bdnz copy_loop
+		
+		addi r5, r5, 4
+		b page_copy
+	
+	copy_end:
+	
+	# initially fill segment registers
+
+	li r31, 16
+	mtctr r31
+	li r31, 0
+	li r30, 0x2000
+
+	seg_fill:
+	
+		mtsrin r30, r31
+		addi r30, r30, 0x111
+		addis r31, r31, 0x1000    # move to next SR
+		
+		bdnz seg_fill
+	
+	tlbia
+	tlbsync
+	
+	# start the kernel
+	#
+	# r3 = bootinfo (pa)
+	
+	lis r31, KERNEL_START_ADDR@ha
+	addi r31, r31, KERNEL_START_ADDR@l
+	
+	mtspr srr0, r31
+	
+	mfmsr r31
+	ori r31, r31, (msr_ir | msr_dr)@l
+	mtspr srr1, r31
+	
+	sync
+	isync
+	rfid
+
+.align PAGE_WIDTH
+.global trans
+trans:
+	.space (TRANS_SIZE * TRANS_ITEM_SIZE)
Index: boot/arch/ppc64/loader/asm.h
===================================================================
--- boot/arch/ppc64/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ASM_H__
+#define __ASM_H__
+
+#define PAGE_SIZE 4096
+#define PAGE_WIDTH 12
+
+#define TRANS_SIZE 1024
+#define TRANS_ITEM_SIZE 8
+
+#define KERNEL_START_ADDR 0x80004000
+
+#ifndef __ASM__
+
+#define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
+
+extern void *trans[TRANS_SIZE];
+
+extern void halt();
+extern void jump_to_kernel(void *bootinfo, unsigned long bootinfo_size, void *trans, unsigned long kernel_size, void *real_mode) __attribute__((noreturn));
+extern void real_mode();
+
+#endif
+
+#endif
Index: boot/arch/ppc64/loader/boot.S
===================================================================
--- boot/arch/ppc64/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,42 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#include "regname.h"
+
+.section BOOTSTRAP, "ax"
+
+.global start
+
+start:
+	lis r4, ofw_cif@ha
+	addi r4, r4, ofw_cif@l
+	stw r5, 0(r4)
+	
+	bl init
+	
+	b bootstrap
Index: boot/arch/ppc64/loader/main.c
===================================================================
--- boot/arch/ppc64/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "main.h" 
+#include <printf.h>
+#include "asm.h"
+#include "_components.h"
+
+#define HEAP_GAP 1024000
+
+bootinfo_t bootinfo;
+
+
+static void check_align(const void *addr, const char *desc)
+{
+	if ((unsigned long) addr % PAGE_SIZE != 0) {
+		printf("Error: %s not on page boundary, halting.\n", desc);
+		halt();
+	}
+}
+
+
+static void fix_overlap(void *va, void **pa, const char *desc, unsigned long *top)
+{
+	if ((unsigned long) *pa + PAGE_SIZE < *top) {
+		printf("Warning: %s overlaps kernel physical area\n", desc);
+		
+		void *new_va = (void *) (ALIGN_UP((unsigned long) KERNEL_END + HEAP_GAP, PAGE_SIZE) + *top);
+		void *new_pa = (void *) (HEAP_GAP + *top);
+		*top += PAGE_SIZE;
+		
+		if (ofw_map(new_pa, new_va, PAGE_SIZE, 0) != 0) {
+			printf("Error: Unable to map page aligned memory at %L (physical %L), halting.\n", new_va, new_pa);
+			halt();
+		}
+		
+		if ((unsigned long) new_pa + PAGE_SIZE < KERNEL_SIZE) {
+			printf("Error: %s cannot be relocated, halting.\n", desc);
+			halt();	
+		}
+		
+		printf("Relocating %L -> %L (physical %L -> %L)\n", va, new_va, *pa, new_pa);
+		*pa = new_pa;
+		memcpy(new_va, va, PAGE_SIZE);
+	}
+}
+
+
+void bootstrap(void)
+{
+	printf("\nHelenOS PPC Bootloader\n");
+	
+	init_components();
+	
+	unsigned int i;
+	
+	for (i = 0; i < COMPONENTS; i++)
+		check_align(components[i].start, components[i].name);
+	
+	check_align(&real_mode, "bootstrap trampoline");
+	check_align(&trans, "translation table");
+	
+	if (!ofw_memmap(&bootinfo.memmap)) {
+		printf("Error: unable to get memory map, halting.\n");
+		halt();
+	}
+	
+	if (bootinfo.memmap.total == 0) {
+		printf("Error: no memory detected, halting.\n");
+		halt();
+	}
+	
+	if (!ofw_screen(&bootinfo.screen)) {
+		printf("Error: unable to get screen properties, halting.\n");
+		halt();
+	}
+	
+	printf("\nDevice statistics\n");
+	printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
+	
+	void *real_mode_pa = ofw_translate(&real_mode);
+	void *trans_pa = ofw_translate(&trans);
+	void *bootinfo_pa = ofw_translate(&bootinfo);
+	
+	printf("\nMemory statistics (total %d MB)\n", bootinfo.memmap.total >> 20);
+	printf(" %L: boot info structure (physical %L)\n", &bootinfo, bootinfo_pa);
+	printf(" %L: bootstrap trampoline (physical %L)\n", &real_mode, real_mode_pa);
+	printf(" %L: translation table (physical %L)\n", &trans, trans_pa);
+	for (i = 0; i < COMPONENTS; i++)
+		printf(" %L: %s image (size %d bytes)\n", components[i].start, components[i].name, components[i].size);
+	
+	unsigned long top = 0;
+	for (i = 0; i < COMPONENTS; i++)
+		top += ALIGN_UP(components[i].size, PAGE_SIZE);
+	
+	unsigned long pages = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE) >> PAGE_WIDTH;
+	
+	for (i = 0; i < pages; i++) {
+		void *pa = ofw_translate(KERNEL_START + (i << PAGE_WIDTH));
+		fix_overlap(KERNEL_START + (i << PAGE_WIDTH), &pa, "kernel", &top);
+		trans[i] = pa;
+	}
+	
+	bootinfo.taskmap.count = 0;
+	for (i = 1; i < COMPONENTS; i++) {
+		unsigned long component_pages = ALIGN_UP(components[i].size, PAGE_SIZE) >> PAGE_WIDTH;
+		unsigned long j;
+		
+		for (j = 0; j < component_pages; j++) {
+			void *pa = ofw_translate(components[i].start + (j << PAGE_WIDTH));
+			fix_overlap(components[i].start + (j << PAGE_WIDTH), &pa, components[i].name, &top);
+			trans[pages + j] = pa;
+			if (j == 0) {
+				bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = (void *) (pages << PAGE_WIDTH);
+				bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = components[i].size;
+				bootinfo.taskmap.count++;
+			}
+		}
+		
+		pages += component_pages;
+	}
+	
+	fix_overlap(&real_mode, &real_mode_pa, "bootstrap trampoline", &top);
+	fix_overlap(&trans, &trans_pa, "translation table", &top);
+	fix_overlap(&bootinfo, &bootinfo_pa, "boot info", &top);
+	
+	printf("\nBooting the kernel...\n");
+	jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa);
+}
Index: boot/arch/ppc64/loader/main.h
===================================================================
--- boot/arch/ppc64/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+#include "ofw.h"
+
+/** Align to the nearest higher address.
+ *
+ * @param addr  Address or size to be aligned.
+ * @param align Size of alignment, must be power of 2.
+ */
+#define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1))
+
+#define TASKMAP_MAX_RECORDS 32
+
+typedef struct {
+	void *addr;
+	unsigned long size;
+} task_t;
+
+typedef struct {
+	unsigned int count;
+	task_t tasks[TASKMAP_MAX_RECORDS];
+} taskmap_t;
+
+typedef struct {
+	taskmap_t taskmap;
+	memmap_t memmap;
+	screen_t screen;
+} bootinfo_t;
+
+extern void start(void);
+extern void bootstrap(void);
+
+extern memmap_t memmap;
+
+#endif
Index: boot/arch/ppc64/loader/ofw.c
===================================================================
--- boot/arch/ppc64/loader/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+#include <ofw.h>
+#include <printf.h>
+
+typedef int (* ofw_entry_t)(ofw_args_t *args);
+
+int ofw(ofw_args_t *args)
+{
+	return ((ofw_entry_t) ofw_cif)(args);
+}
+
+void write(const char *str, const int len)
+{
+	ofw_write(str, len);
+}
+
+int ofw_keyboard(keyboard_t *keyboard)
+{
+	char device_name[BUF_SIZE];
+	
+	if (ofw_get_property(ofw_aliases, "macio", device_name, sizeof(device_name)) <= 0)
+		return false;
+				
+	phandle device = ofw_find_device(device_name);
+	if (device == -1)
+		return false;
+								
+	pci_reg_t macio;
+	if (ofw_get_property(device, "assigned-addresses", &macio, sizeof(macio)) <= 0)
+		return false;
+	keyboard->addr = (void *) macio.addr.addr_lo;
+	keyboard->size = macio.size_lo;
+
+	return true;
+}
+
+int ofw_translate_failed(ofw_arg_t flag)
+{
+	return 0;
+}
Index: boot/arch/ppc64/loader/pack
===================================================================
--- boot/arch/ppc64/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,124 @@
+#! /bin/sh
+
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+[ "$#" -lt 1 ] && exit 1
+
+OBJCOPY="$1"
+LINK="_link.ld"
+HEADER="_components.h"
+
+shift
+
+echo 'OUTPUT_FORMAT("elf64-powerpc")
+OUTPUT_ARCH(powerpc:common64)
+ENTRY(start)
+
+SECTIONS {
+	.boot 0x0000000010000000: AT (0) { 
+		*(BOOTSTRAP);
+		*(REALMODE);
+		*(.text);
+		*(.toc);
+		
+		*(.opd);
+		*(.rodata);
+		*(.rodata.*);
+		*(.data);		/* initialized data */
+		*(.sdata);
+		*(.sdata2);
+		*(.sbss);
+		*(.bss);		/* uninitialized static variables */	
+		*(COMMON); 		/* global variables */
+		
+		. = ALIGN(4096);
+		*(.kernel_image);' > "$LINK"
+
+echo '#ifndef ___COMPONENTS_H__
+#define ___COMPONENTS_H__
+
+typedef struct {
+	char *name;
+	
+	void *start;
+	void *end;
+	unsigned long size;
+} component_t;' > "$HEADER"
+
+COUNT="0"
+DATA=""
+
+for TASK in "$@" ; do
+	BASENAME="`basename "$TASK" | sed 's/^\(.*\)\.[^.]*$/\1/'`"
+	OBJECT="${BASENAME}.o"
+	SYMBOL="`echo "_binary_$TASK" | tr "./" "__"`"
+	MACRO="`echo "$BASENAME" | tr [:lower:] [:upper:]`"
+	echo "$TASK -> $OBJECT"
+	
+	echo "
+		. = ALIGN(4096);
+		*(.${BASENAME}_image);" >> "$LINK"
+	
+	echo "
+extern int ${SYMBOL}_start;
+extern int ${SYMBOL}_end;
+
+#define ${MACRO}_START ((void *) &${SYMBOL}_start)
+#define ${MACRO}_END ((void *) &${SYMBOL}_end)
+#define ${MACRO}_SIZE ((unsigned long) ${MACRO}_END - (unsigned long) ${MACRO}_START)" >> "$HEADER"
+	
+	"$OBJCOPY" -I binary -O elf64-powerpc -B powerpc:common64 --rename-section ".data=.${BASENAME}_image" "$TASK" "$OBJECT"
+		
+	DATA="${DATA}
+	components[$COUNT].name = \"${BASENAME}\";
+	components[$COUNT].start = ${MACRO}_START;
+	components[$COUNT].end = ${MACRO}_END;
+	components[$COUNT].size = ${MACRO}_SIZE;";
+	COUNT="`expr "$COUNT" + 1`"
+done
+
+echo '}
+
+	/DISCARD/ : {
+		*(*);
+	}
+}' >> "$LINK"
+
+echo "
+#define COMPONENTS $COUNT
+
+component_t components[COMPONENTS]; 
+
+static void init_components(void)
+{
+$DATA
+}
+
+#endif
+" >> "$HEADER"
Index: boot/arch/ppc64/loader/regname.h
===================================================================
--- boot/arch/ppc64/loader/regname.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/regname.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ppc32_REGNAME_H__
+#define __ppc32_REGNAME_H__
+
+/* Condition Register Bit Fields */
+#define	cr0	0
+#define	cr1	1
+#define	cr2	2
+#define	cr3	3
+#define	cr4	4
+#define	cr5	5
+#define	cr6	6
+#define	cr7	7
+
+/* General Purpose Registers (GPRs) */
+#define	r0	0
+#define	r1	1
+#define	r2	2
+#define	r3	3
+#define	r4	4
+#define	r5	5
+#define	r6	6
+#define	r7	7
+#define	r8	8
+#define	r9	9
+#define	r10	10
+#define	r11	11
+#define	r12	12
+#define	r13	13
+#define	r14	14
+#define	r15	15
+#define	r16	16
+#define	r17	17
+#define	r18	18
+#define	r19	19
+#define	r20	20
+#define	r21	21
+#define	r22	22
+#define	r23	23
+#define	r24	24
+#define	r25	25
+#define	r26	26
+#define	r27	27
+#define	r28	28
+#define	r29	29
+#define	r30	30
+#define	r31	31
+
+/* GPR Aliases */
+#define	sp	1
+
+/* Floating Point Registers (FPRs) */
+#define	fr0		0
+#define	fr1		1
+#define	fr2		2
+#define	fr3		3
+#define	fr4		4
+#define	fr5		5
+#define	fr6		6
+#define	fr7		7
+#define	fr8		8
+#define	fr9		9
+#define	fr10	10
+#define	fr11	11
+#define	fr12	12
+#define	fr13	13
+#define	fr14	14
+#define	fr15	15
+#define	fr16	16
+#define	fr17	17
+#define	fr18	18
+#define	fr19	19
+#define	fr20	20
+#define	fr21	21
+#define	fr22	22
+#define	fr23	23
+#define	fr24	24
+#define	fr25	25
+#define	fr26	26
+#define	fr27	27
+#define	fr28	28
+#define	fr29	29
+#define	fr30	30
+#define	fr31	31
+
+#define	vr0		0
+#define	vr1		1
+#define	vr2		2
+#define	vr3		3
+#define	vr4		4
+#define	vr5		5
+#define	vr6		6
+#define	vr7		7
+#define	vr8		8
+#define	vr9		9
+#define	vr10	10
+#define	vr11	11
+#define	vr12	12
+#define	vr13	13
+#define	vr14	14
+#define	vr15	15
+#define	vr16	16
+#define	vr17	17
+#define	vr18	18
+#define	vr19	19
+#define	vr20	20
+#define	vr21	21
+#define	vr22	22
+#define	vr23	23
+#define	vr24	24
+#define	vr25	25
+#define	vr26	26
+#define	vr27	27
+#define	vr28	28
+#define	vr29	29
+#define	vr30	30
+#define	vr31	31
+
+#define	evr0	0
+#define	evr1	1
+#define	evr2	2
+#define	evr3	3
+#define	evr4	4
+#define	evr5	5
+#define	evr6	6
+#define	evr7	7
+#define	evr8	8
+#define	evr9	9
+#define	evr10	10
+#define	evr11	11
+#define	evr12	12
+#define	evr13	13
+#define	evr14	14
+#define	evr15	15
+#define	evr16	16
+#define	evr17	17
+#define	evr18	18
+#define	evr19	19
+#define	evr20	20
+#define	evr21	21
+#define	evr22	22
+#define	evr23	23
+#define	evr24	24
+#define	evr25	25
+#define	evr26	26
+#define	evr27	27
+#define	evr28	28
+#define	evr29	29
+#define	evr30	30
+#define	evr31	31
+
+/* Special Purpose Registers (SPRs) */
+#define	xer		1
+#define lr		8
+#define ctr		9
+#define	dec		22
+#define	sdr1	25
+#define	srr0	26
+#define srr1	27
+#define	sprg0	272
+#define	sprg1	273
+#define	sprg2	274
+#define	sprg3	275
+#define	prv		287
+#define hid0	1008
+
+/* MSR bits */
+#define msr_ir	(1 << 4)
+#define msr_dr	(1 << 5)
+
+/* HID0 bits */
+#define hid0_ice	(1 << 15)
+#define hid0_dce	(1 << 14)
+#define hid0_icfi	(1 << 11)
+#define hid0_dci	(1 << 10)
+
+#endif
Index: boot/arch/ppc64/loader/types.h
===================================================================
--- boot/arch/ppc64/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/ppc64/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TYPES_H__
+#define TYPES_H__
+
+#include <gentypes.h>
+
+typedef signed char int8_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long  uint64_t;
+
+typedef uint64_t uintptr_t;
+typedef uint64_t unative_t;
+
+#endif
Index: boot/arch/sparc64/Makefile.inc
===================================================================
--- boot/arch/sparc64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+TMP=distroot
+
+build: image.iso
+
+image.iso: kernel
+	make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(CONFIG_IMAGE)
+	mkdir -p $(TMP)/boot
+	mkdir -p $(TMP)/HelenOS
+	cat arch/$(ARCH)/silo/silo.tar.gz | (cd $(TMP)/boot; tar xvfz -)
+	cp arch/$(ARCH)/silo/README arch/$(ARCH)/silo/COPYING arch/$(ARCH)/silo/silo.conf $(TMP)/boot
+	cp arch/$(ARCH)/loader/image.boot $(TMP)/HelenOS/image.boot
+	mkisofs -f -G $(TMP)/boot/isofs.b -B ... -r -o image.iso $(TMP)/
+
+clean: clean_boot_gen clean_kernel
+	 make -C arch/$(ARCH)/loader clean
+	-rm -fr $(TMP)
+	-rm -f image.iso
+
+arch_distclean: distclean_kernel
Index: boot/arch/sparc64/loader/Makefile
===================================================================
--- boot/arch/sparc64/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,87 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+## Toolchain configuration
+#
+
+TARGET = sparc64-linux-gnu
+TOOLCHAIN_DIR = /usr/local/sparc64/bin
+
+ifeq ($(COMPILER),native)
+	CC = gcc
+	AS = as
+	LD = ld
+	OBJCOPY = objcopy
+	OBJDUMP = objdump
+else
+	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
+	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
+	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
+	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
+	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
+endif
+
+CFLAGS = -I. -I../../../generic -I../../../genarch -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=ultrasparc -m64
+
+SOURCES = \
+	main.c \
+	../../../generic/printf.c \
+	../../../genarch/ofw.c \
+	ofw.c \
+	asm.S \
+	boot.S
+
+COMPONENTS = \
+	$(KERNELDIR)/kernel.bin
+
+OBJECTS := $(addsuffix .o,$(basename $(SOURCES)))
+COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS))))
+
+.PHONY: all clean depend
+
+all: image.boot
+
+-include Makefile.depend
+
+image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) kernel.o 
+	$(LD) -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@
+
+depend:
+	-makedepend $(DEFS) $(CFLAGS) -f - $(SOURCES) > Makefile.depend 2> /dev/null
+
+clean:
+	-rm -f _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) image.boot Makefile.depend
+
+_components.h _link.ld $(COMPONENT_OBJECTS): $(COMPONENTS)
+	./pack $(IMAGE) $(OBJCOPY) $(COMPONENTS)
+
+%.o: %.S
+	$(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@
+
+%.o: %.c
+	$(CC) $(DEFS) $(CFLAGS) -c $< -o $@
Index: boot/arch/sparc64/loader/asm.S
===================================================================
--- boot/arch/sparc64/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/asm.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,121 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#define STACK_WINDOW_SAVE_AREA_SIZE     (16*8)
+
+#define PSTATE_AM_BIT	8
+
+.text
+
+.global halt
+.global memcpy
+.global jump_to_kernel
+
+halt:
+	b halt
+	nop
+	
+memcpy:
+	.register       %g2, #scratch
+        .register       %g3, #scratch
+	add	%o1, 7, %g1
+	and	%g1, -8, %g1
+	cmp	%o1, %g1
+	be,pn	%xcc, 3f
+	add	%o0, 7, %g1
+	mov	0, %g3
+0:
+	brz,pn	%o2, 2f
+	mov	0, %g2
+1:
+	ldub	[%g3 + %o1], %g1
+	add	%g2, 1, %g2
+	cmp	%o2, %g2
+	stb	%g1, [%g3 + %o0]
+	bne,pt	%xcc, 1b
+	mov	%g2, %g3
+2:
+	jmp	%o7 + 8			! exit point
+	mov	%o1, %o0
+3:
+	and	%g1, -8, %g1
+	cmp	%o0, %g1
+	bne,pt	%xcc, 0b
+	mov	0, %g3
+	srlx	%o2, 3, %g4
+	brz,pn	%g4, 5f
+	mov	0, %g5
+4:
+	sllx	%g3, 3, %g2
+	add	%g5, 1, %g3
+	ldx	[%o1 + %g2], %g1
+	mov	%g3, %g5
+	cmp	%g4, %g3
+	bne,pt	%xcc, 4b
+	stx	%g1, [%o0 + %g2]
+5:
+	and	%o2, 7, %o2
+	brz,pn	%o2, 2b
+	sllx	%g4, 3, %g1
+	mov	0, %g2
+	add	%g1, %o0, %o0
+	add	%g1, %o1, %g4
+	mov	0, %g3
+6:
+	ldub	[%g2 + %g4], %g1
+	stb	%g1, [%g2 + %o0]
+	add	%g3, 1, %g2
+	cmp	%o2, %g2
+	bne,pt	%xcc, 6b
+	mov	%g2, %g3
+
+	jmp	%o7 + 8			! exit point
+	mov	%o1, %o0
+
+jump_to_kernel:
+	set ofw_cif, %l0
+	jmp %o0				! jump to kernel
+	ldx [%l0], %o4			! pass OpenFirmware address in %o4
+
+.global ofw
+ofw:
+	save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
+	set ofw_cif, %l0
+	ldx [%l0], %l0
+
+	rdpr  %pstate, %l1
+	and  %l1, ~PSTATE_AM_BIT, %l2
+	wrpr  %l2, 0, %pstate
+    
+	jmpl %l0, %o7
+	mov %i0, %o0
+
+	wrpr %l1, 0, %pstate
+
+	ret
+	restore %o0, 0, %o0
Index: boot/arch/sparc64/loader/asm.h
===================================================================
--- boot/arch/sparc64/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/asm.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ASM_H__
+#define __ASM_H__
+
+#define PAGE_SIZE 8192
+#define PAGE_WIDTH 13
+
+#define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
+
+extern void halt(void);
+extern void jump_to_kernel(void *entry, void *bootinfo, unsigned int bootinfo_size) __attribute__((noreturn));
+
+#endif
Index: boot/arch/sparc64/loader/boot.S
===================================================================
--- boot/arch/sparc64/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/boot.S	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,72 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+#define INITIAL_STACK 0x0
+
+#define PSTATE_IE_BIT	2
+
+.register %g2, #scratch
+.register %g3, #scratch
+.register %g6, #scratch
+.register %g7, #scratch
+
+.section BOOTSTRAP, "ax"
+
+.global start
+start:
+	b 1f
+	nop
+
+/*
+ * This header forces SILO to load the image at 0x4000.
+ * More precisely, SILO will think this is an old version of Linux.
+ */
+	.ascii "HdrS"
+	.word 0
+	.half 0
+
+.align 8
+1:	
+	flushw
+
+	/*
+	 * Disable interrupts.
+	 */
+	rdpr %pstate, %g2
+	and %g2, ~PSTATE_IE_BIT, %g2	! mask the Interrupt Enable bit
+	wrpr %g2, 0, %pstate
+
+	# TODO: set initial stack
+
+	set ofw_cif, %l0
+ 
+	call init		! initialize OpenFirmware
+	stx %o4, [%l0]
+	
+	b bootstrap
+	nop
Index: boot/arch/sparc64/loader/main.c
===================================================================
--- boot/arch/sparc64/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/main.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "main.h" 
+#include <printf.h>
+#include "asm.h"
+#include "_components.h"
+#include <ofw.h>
+
+#define KERNEL_VIRTUAL_ADDRESS 0x400000
+
+bootinfo_t bootinfo;
+
+void bootstrap(void)
+{
+	printf("HelenOS SPARC64 Bootloader\n");
+
+	component_t components[COMPONENTS];
+	init_components(components);
+
+	printf("\nMemory statistics\n");
+	printf(" kernel entry point at %L\n", KERNEL_VIRTUAL_ADDRESS);
+	printf(" %L: boot info structure\n", &bootinfo);
+	
+	unsigned int i;
+	for (i = 0; i < COMPONENTS; i++)
+		printf(" %L: %s image (size %d bytes)\n", components[i].start, components[i].name, components[i].size);
+
+	printf("\nCopying components\n");
+	unsigned int top = 0;
+	bootinfo.cnt = 0;
+	for (i = 0; i < COMPONENTS; i++) {
+		printf(" %s...", components[i].name);
+		top = ALIGN_UP(top, PAGE_SIZE);
+		memcpy(((void *) KERNEL_VIRTUAL_ADDRESS) + top, components[i].start, components[i].size);
+		if (i > 0) {
+			bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top;
+			bootinfo.tasks[bootinfo.cnt].size = components[i].size;
+			bootinfo.cnt++;
+		}
+		top += components[i].size;
+		printf("done.\n");
+	}
+
+	printf("\nBooting the kernel...\n");
+	jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo, sizeof(bootinfo));
+}
Index: boot/arch/sparc64/loader/main.h
===================================================================
--- boot/arch/sparc64/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/main.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MAIN_H__
+#define __MAIN_H__
+
+/** Align to the nearest higher address.
+ *
+ * @param addr  Address or size to be aligned.
+ * @param align Size of alignment, must be power of 2.
+ */
+#define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1))
+
+#define TASKMAP_MAX_RECORDS 32
+
+typedef struct {
+	void *addr;
+	unsigned int size;
+} task_t;
+
+typedef struct {
+	unsigned int cnt;
+	task_t tasks[TASKMAP_MAX_RECORDS];
+} bootinfo_t;
+
+extern void start(void);
+extern void bootstrap(void);
+
+#endif
Index: boot/arch/sparc64/loader/ofw.c
===================================================================
--- boot/arch/sparc64/loader/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+#include <ofw.h>
+#include <printf.h>
+
+void write(const char *str, const int len)
+{
+	int i;
+	
+	for (i = 0; i < len; i++) {
+		if (str[i] == '\n')
+			ofw_write("\r", 1);
+		ofw_write(&str[i], 1);
+	}
+}
+
+int ofw_translate_failed(ofw_arg_t flag)
+{
+	return flag != -1;
+}
Index: boot/arch/sparc64/loader/pack
===================================================================
--- boot/arch/sparc64/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/pack	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,113 @@
+#! /bin/sh
+
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+[ "$#" -lt 1 ] && exit 1
+
+OBJCOPY="$1"
+LINK="_link.ld"
+HEADER="_components.h"
+
+shift
+
+echo 'OUTPUT_FORMAT("elf64-sparc")
+ENTRY(start)
+
+SECTIONS {
+	.boot 0x4000: AT (0x4000) {
+		*(BOOTSTRAP);
+		*(.text);
+		*(.rodata);
+		*(.rodata.*);
+		*(.data);               /* initialized data */
+		*(.sdata);
+		*(.sdata2);
+		*(.sbss);
+		*(.bss);                /* uninitialized static variables */
+		*(COMMON);' > "$LINK"
+
+echo '#ifndef ___COMPONENTS_H__
+#define ___COMPONENTS_H__
+
+typedef struct {
+	char *name;
+	
+	void *start;
+	void *end;
+	unsigned int size;
+} component_t;' > "$HEADER"
+
+COUNT="0"
+DATA=""
+
+for TASK in "$@" ; do
+	BASENAME="`basename "$TASK" | sed 's/^\(.*\)\.[^.]*$/\1/'`"
+	OBJECT="${BASENAME}.o"
+	SYMBOL="`echo "_binary_$TASK" | tr "./" "__"`"
+	MACRO="`echo "$BASENAME" | tr [:lower:] [:upper:]`"
+	echo "$TASK -> $OBJECT"
+	
+	echo "
+		*(.${BASENAME}_image);" >> "$LINK"
+	
+	echo "
+extern int ${SYMBOL}_start;
+extern int ${SYMBOL}_end;
+
+#define ${MACRO}_START ((void *) &${SYMBOL}_start)
+#define ${MACRO}_END ((void *) &${SYMBOL}_end)
+#define ${MACRO}_SIZE ((unsigned int) ${MACRO}_END - (unsigned int) ${MACRO}_START)" >> "$HEADER"
+	
+	"$OBJCOPY" -I binary -O elf64-sparc -B sparc --rename-section ".data=.${BASENAME}_image" "$TASK" "$OBJECT"
+		
+	DATA="${DATA}
+	components[$COUNT].name = \"${BASENAME}\";
+	components[$COUNT].start = ${MACRO}_START;
+	components[$COUNT].end = ${MACRO}_END;
+	components[$COUNT].size = ${MACRO}_SIZE;";
+	COUNT="`expr "$COUNT" + 1`"
+done
+
+echo '	}
+	/DISCARD/ : {
+		*(.comment);
+		*(.note*);
+	}
+}' >> "$LINK"
+
+echo "
+#define COMPONENTS $COUNT
+
+static void init_components(component_t components[])
+{
+$DATA
+}
+
+#endif
+" >> "$HEADER"
Index: boot/arch/sparc64/loader/types.h
===================================================================
--- boot/arch/sparc64/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/loader/types.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TYPES_H__
+#define TYPES_H__
+
+#include <gentypes.h>
+
+typedef signed char int8_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long uint64_t;
+
+typedef uint64_t uintptr_t;
+typedef uint64_t unative_t;
+
+#endif
Index: boot/arch/sparc64/silo/COPYING
===================================================================
--- boot/arch/sparc64/silo/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/silo/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,345 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies 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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+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 program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, 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.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: boot/arch/sparc64/silo/README
===================================================================
--- boot/arch/sparc64/silo/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/silo/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,5 @@
+For licensing terms of SILO boot loader see the file COPYING contained
+in this directory. Full version of SILO, including its source code,
+can be downloaded from SILO's project page:
+
+http://www.sparc-boot.org/
Index: boot/arch/sparc64/silo/silo.conf
===================================================================
--- boot/arch/sparc64/silo/silo.conf	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/sparc64/silo/silo.conf	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,3 @@
+timeout = 0
+image = /HelenOS/image.boot
+	label = HelenOS
Index: boot/arch/xen32/Makefile.inc
===================================================================
--- boot/arch/xen32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/xen32/Makefile.inc	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,52 @@
+#
+# Copyright (C) 2006 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+build: image.iso
+
+image.iso: kernel uspace
+	mkdir -p arch/$(ARCH)/iso/boot/grub
+	cp arch/$(ARCH)/grub/stage2_eltorito arch/$(ARCH)/iso/boot/grub/
+	cp arch/$(ARCH)/grub/menu.lst arch/$(ARCH)/iso/boot/grub/
+	cp arch/$(ARCH)/grub/xen.gz arch/$(ARCH)/iso/boot/
+	cp $(KERNELDIR)/kernel.bin arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/init/init arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/ns/ns arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/pci/pci arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/fb/fb arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/kbd/kbd arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/console/console arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/tetris/tetris arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/ipcc/ipcc arch/$(ARCH)/iso/boot/
+	cp $(USPACEDIR)/klog/klog arch/$(ARCH)/iso/boot/
+	mkisofs -J -r -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o image.iso arch/$(ARCH)/iso/
+
+clean: clean_kernel clean_uspace
+	-rm -fr arch/$(ARCH)/iso
+	-rm -f image.iso
+
+arch_distclean: distclean_kernel distclean_uspace
Index: boot/arch/xen32/grub/COPYING
===================================================================
--- boot/arch/xen32/grub/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/xen32/grub/COPYING	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,345 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 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.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies 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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+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 program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, 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.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: boot/arch/xen32/grub/README
===================================================================
--- boot/arch/xen32/grub/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/xen32/grub/README	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,5 @@
+For licensing terms of GRUB boot loader see the file COPYING contained
+in this directory. Full version of GRUB, including its source code,
+can be downloaded from GRUB's project page:
+
+http://www.gnu.org/software/grub/
Index: boot/arch/xen32/grub/menu.lst
===================================================================
--- boot/arch/xen32/grub/menu.lst	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/arch/xen32/grub/menu.lst	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,16 @@
+default 0
+timeout 10
+
+title=HelenOS/Xen
+root (cd)
+kernel /boot/xen.gz
+module /boot/kernel.bin
+module /boot/ns
+module /boot/init
+module /boot/pci
+module /boot/fb
+module /boot/kbd
+module /boot/console
+module /boot/tetris
+module /boot/ipcc
+module /boot/klog
Index: boot/boot.config
===================================================================
--- boot/boot.config	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/boot.config	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,41 @@
+## General configuration directives
+
+# Architecture
+@ "amd64" AMD64/Intel EM64T
+@ "ia32" Intel IA-32
+@ "ia64" Intel IA-64
+@ "mips32" MIPS 32-bit
+@ "ppc32" PowerPC 32-bit
+@ "ppc64" PowerPC 64-bit
+@ "sparc64" Sun UltraSPARC
+@ "xen32" Xen 32-bit
+! ARCH (choice)
+
+# PPC32 Compiler
+@ "cross" Cross-compiler
+@ "native" Native
+! [ARCH=ppc32] PPC32_COMPILER (choice)
+% [ARCH=ppc32] SAVEAS PPC32_COMPILER COMPILER
+
+# PPC64 Compiler
+@ "cross" Cross-compiler
+@ "native" Native
+! [ARCH=ppc64] PPC64_COMPILER (choice)
+% [ARCH=ppc64] SAVEAS PPC64_COMPILER COMPILER
+
+# MIPS32 Compiler
+@ "cross" Cross-compiler
+@ "native" Native
+! [ARCH=mips32] MIPS32_COMPILER (choice)
+% [ARCH=mips32] SAVEAS MIPS32_COMPILER COMPILER
+
+# Debug bootloader
+! [ARCH=ppc32] CONFIG_DEBUG (n/y)
+
+# Use Block Address Translation
+! [ARCH=ppc32] CONFIG_BAT (y/n)
+
+# Target image
+@ "binary" Binary image (MSIM)
+@ "ecoff" Ecoff image (GXEmul)
+! [ARCH=mips32] CONFIG_IMAGE (choice)
Index: boot/genarch/ofw.c
===================================================================
--- boot/genarch/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/genarch/ofw.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+#include "ofw.h"
+#include <printf.h>
+#include <asm.h>
+#include <types.h>
+
+uintptr_t ofw_cif;
+
+phandle ofw_chosen;
+ihandle ofw_stdout;
+phandle ofw_root;
+ihandle ofw_mmu;
+phandle ofw_memory;
+phandle ofw_aliases;
+
+static unsigned long ofw_call(const char *service, const int nargs, const int nret, ofw_arg_t *rets, ...)
+{
+	va_list list;
+	ofw_args_t args;
+	int i;
+	
+	args.service = service;
+	args.nargs = nargs;
+	args.nret = nret;
+	
+	va_start(list, rets);
+	for (i = 0; i < nargs; i++)
+		args.args[i] = va_arg(list, ofw_arg_t);
+	va_end(list);
+	
+	for (i = 0; i < nret; i++)
+		args.args[i + nargs] = 0;
+	
+	(void) ofw(&args);
+
+	for (i = 1; i < nret; i++)
+		rets[i - 1] = args.args[i + nargs];
+
+	return args.args[nargs];
+}
+
+
+phandle ofw_find_device(const char *name)
+{
+	return ofw_call("finddevice", 1, 1, NULL, name);
+}
+
+
+int ofw_get_property(const phandle device, const char *name, const void *buf, const int buflen)
+{
+	return ofw_call("getprop", 4, 1, NULL, device, name, buf, buflen);
+}
+
+
+static unsigned int ofw_get_address_cells(const phandle device)
+{
+	unsigned int ret;
+	
+	if (ofw_get_property(device, "#address-cells", &ret, sizeof(ret)) <= 0)
+		if (ofw_get_property(ofw_root, "#address-cells", &ret, sizeof(ret)) <= 0)
+			ret = 1;
+	
+	return ret;
+}
+
+
+static unsigned int ofw_get_size_cells(const phandle device)
+{
+	unsigned int ret;
+	
+	if (ofw_get_property(device, "#size-cells", &ret, sizeof(ret)) <= 0)
+		if (ofw_get_property(ofw_root, "#size-cells", &ret, sizeof(ret)) <= 0)
+			ret = 1;
+	
+	return ret;
+}
+
+
+static ihandle ofw_open(const char *name)
+{
+	return ofw_call("open", 1, 1, NULL, name);
+}
+
+
+void init(void)
+{
+	ofw_chosen = ofw_find_device("/chosen");
+	if (ofw_chosen == -1)
+		halt();
+	
+	if (ofw_get_property(ofw_chosen, "stdout",  &ofw_stdout, sizeof(ofw_stdout)) <= 0)
+		ofw_stdout = 0;
+	
+	ofw_root = ofw_find_device("/");
+	if (ofw_root == -1) {
+		puts("\r\nError: Unable to find / device, halted.\r\n");
+		halt();
+	}
+	
+	if (ofw_get_property(ofw_chosen, "mmu",  &ofw_mmu, sizeof(ofw_mmu)) <= 0) {
+		puts("\r\nError: Unable to get mmu property, halted.\r\n");
+		halt();
+	}
+	
+	ofw_memory = ofw_find_device("/memory");
+	if (ofw_memory == -1) {
+		puts("\r\nError: Unable to find /memory device, halted.\r\n");
+		halt();
+	}
+	
+	ofw_aliases = ofw_find_device("/aliases");
+	if (ofw_aliases == -1) {
+		puts("\r\nError: Unable to find /aliases device, halted.\r\n");
+		halt();
+	}
+}
+
+
+void ofw_write(const char *str, const int len)
+{
+	if (ofw_stdout == 0)
+		return;
+	
+	ofw_call("write", 3, 1, NULL, ofw_stdout, str, len);
+}
+
+
+void *ofw_translate(const void *virt)
+{
+	ofw_arg_t result[4];
+	int shift;
+
+	if (ofw_call("call-method", 3, 5, result, "translate", ofw_mmu, virt) != 0) {
+		puts("Error: MMU method translate() failed, halting.\n");
+		halt();
+	}
+
+	if (ofw_translate_failed(result[0]))
+		return NULL;
+
+	if (sizeof(unative_t) == 8)
+		shift = 32;
+	else
+		shift = 0;
+		
+	return (void *) ((result[2]<<shift)|result[3]);
+}
+
+void *ofw_claim(const void *virt, const int len)
+{
+	ofw_arg_t retaddr;
+	int shift;
+
+	if (ofw_call("call-method", 5, 2, &retaddr, "claim", ofw_mmu, 0, len, virt) != 0) {
+		puts("Error: MMU method claim() failed, halting.\n");
+		halt();
+	}
+
+	return (void *) retaddr;
+}
+
+int ofw_map(const void *phys, const void *virt, const int size, const int mode)
+{
+	uintptr_t phys_hi, phys_lo;
+
+	if (sizeof(unative_t) == 8) {
+		int shift = 32;
+		phys_hi = (uintptr_t) phys >> shift;
+		phys_lo = (uintptr_t) phys & 0xffffffff;
+	} else {
+		phys_hi = 0;
+		phys_lo = (uintptr_t) phys;
+	}
+
+	return ofw_call("call-method", 7, 1, NULL, "map", ofw_mmu, mode, size, virt,
+		phys_hi, phys_lo);
+}
+
+
+int ofw_memmap(memmap_t *map)
+{
+	unsigned long buf[BUF_SIZE];
+	int ret = ofw_get_property(ofw_memory, "reg", buf, sizeof(buf));
+	if (ret <= 0)
+		return false;
+		
+	unsigned int ac = ofw_get_address_cells(ofw_memory);
+	unsigned int sc = ofw_get_size_cells(ofw_memory);
+	
+	int pos;
+	map->total = 0;
+	map->count = 0;
+	for (pos = 0; (pos < ret / sizeof(unsigned long)) && (map->count < MEMMAP_MAX_RECORDS); pos += ac + sc) {
+		void * start = (void *) buf[pos + ac - 1];
+		unsigned int size = buf[pos + ac + sc - 1];
+		
+		if (size > 0) {
+			map->zones[map->count].start = start;
+			map->zones[map->count].size = size;
+			map->count++;
+			map->total += size;
+		}
+	}
+}
+
+
+int ofw_screen(screen_t *screen)
+{
+	char device_name[BUF_SIZE];
+	
+	if (ofw_get_property(ofw_aliases, "screen", device_name, sizeof(device_name)) <= 0)
+		return false;
+	
+	phandle device = ofw_find_device(device_name);
+	if (device == -1)
+		return false;
+	
+	if (ofw_get_property(device, "address", &screen->addr, sizeof(screen->addr)) <= 0)
+		return false;
+	
+	if (ofw_get_property(device, "width", &screen->width, sizeof(screen->width)) <= 0)
+		return false;
+	
+	if (ofw_get_property(device, "height", &screen->height, sizeof(screen->height)) <= 0)
+		return false;
+	
+	if (ofw_get_property(device, "depth", &screen->bpp, sizeof(screen->bpp)) <= 0)
+		return false;
+	
+	if (ofw_get_property(device, "linebytes", &screen->scanline, sizeof(screen->scanline)) <= 0)
+		return false;
+	
+	return true;
+}
Index: boot/genarch/ofw.h
===================================================================
--- boot/genarch/ofw.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/genarch/ofw.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __OFW_H__
+#define __OFW_H__
+
+#include <types.h>
+#include <stdarg.h>
+
+#define BUF_SIZE		1024
+
+#define MEMMAP_MAX_RECORDS 	32
+
+#define MAX_OFW_ARGS            12
+
+typedef unsigned long ofw_arg_t;
+typedef unsigned int ihandle;
+typedef unsigned int phandle;
+
+/** OpenFirmware command structure
+ *
+ */
+typedef struct {
+	const char *service;		/**< Command name */
+	unsigned long nargs;		/**< Number of in arguments */
+	unsigned long nret;		/**< Number of out arguments */
+	ofw_arg_t args[MAX_OFW_ARGS];	/**< List of arguments */
+} ofw_args_t;
+
+typedef struct {
+	void *start;
+	unsigned int size;
+} memzone_t;
+
+typedef struct {
+	unsigned int total;
+	unsigned int count;
+	memzone_t zones[MEMMAP_MAX_RECORDS];
+} memmap_t;
+
+typedef struct {
+	uint32_t addr;
+	unsigned int width;
+	unsigned int height;
+	unsigned int bpp;
+	unsigned int scanline;
+} screen_t;
+
+typedef struct {
+	uint32_t addr;
+	unsigned int size;
+} keyboard_t;
+
+typedef struct {
+	unsigned int info;
+	unsigned int addr_hi;
+	unsigned int addr_lo;
+} pci_addr_t;
+
+typedef struct {
+	pci_addr_t addr;
+	unsigned int size_hi;
+	unsigned int size_lo;
+} pci_reg_t;
+
+extern uintptr_t ofw_cif;
+
+extern phandle ofw_aliases;
+
+extern void init(void);
+extern void ofw_write(const char *str, const int len);
+
+extern int ofw_get_property(const phandle device, const char *name, const void *buf, const int buflen);
+extern phandle ofw_find_device(const char *name);
+
+extern int ofw(ofw_args_t *arg);
+extern void *ofw_translate(const void *virt);
+extern int ofw_translate_failed(ofw_arg_t flag);
+extern void *ofw_claim(const void *virt, const int len);
+extern int ofw_map(const void *phys, const void *virt, const int size, const int mode);
+extern int ofw_memmap(memmap_t *map);
+extern int ofw_screen(screen_t *screen);
+extern int ofw_keyboard(keyboard_t *keyboard);
+
+#endif
Index: boot/generic/gentypes.h
===================================================================
--- boot/generic/gentypes.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/generic/gentypes.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef GENTYPES_H__
+#define GENTYPES_H__
+
+#define NULL 0
+#define false 0
+#define true 1
+
+#endif
Index: boot/generic/printf.c
===================================================================
--- boot/generic/printf.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/generic/printf.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "printf.h"
+#include "stdarg.h"
+#include <types.h>
+
+typedef char *char_ptr;
+
+static char digits[] = "0123456789abcdef";  /**< Hexadecimal characters */
+
+void puts(const char *str)
+{
+	int len = 0;
+	
+	while (str[len] != 0)
+		len++;
+	
+	write(str, len);
+}
+
+
+/** Print hexadecimal digits
+ *
+ * Print fixed count of hexadecimal digits from
+ * the number num. The digits are printed in
+ * natural left-to-right order starting with
+ * the width-th digit.
+ *
+ * @param num   Number containing digits.
+ * @param width Count of digits to print.
+ *
+ */
+static void print_fixed_hex(const uint64_t num, const int width)
+{
+	int i;
+    
+	for (i = width * 8 - 4; i >= 0; i -= 4)
+	    write(digits + ((num >> i) & 0xf), 1);
+}
+
+
+/** Print number in given base
+ *
+ * Print significant digits of a number in given
+ * base.
+ *
+ * @param num  Number to print.
+ * @param base Base to print the number in (should
+ *             be in range 2 .. 16).
+ *
+ */
+static void print_number(const unative_t num, const unsigned int base)
+{
+	int val = num;
+	char d[sizeof(unative_t) * 8 + 1];		/* this is good enough even for base == 2 */
+	int i = sizeof(unative_t) * 8 - 1;
+	
+	do {
+		d[i--] = digits[val % base];
+	} while (val /= base);
+	
+	d[sizeof(unative_t) * 8] = 0;	
+	puts(&d[i + 1]);
+}
+
+
+/** General formatted text print
+ *
+ * Print text formatted according the fmt parameter
+ * and variant arguments. Each formatting directive
+ * begins with \% (percentage) character and one of the
+ * following character:
+ *
+ * \%    Prints the percentage character.
+ *
+ * s    The next variant argument is treated as char*
+ *      and printed as a NULL terminated string.
+ *
+ * c    The next variant argument is treated as a single char.
+ *
+ * p    The next variant argument is treated as a maximum
+ *      bit-width integer with respect to architecture
+ *      and printed in full hexadecimal width.
+ *
+ * P    As with 'p', but '0x' is prefixed.
+ *
+ * q    The next variant argument is treated as a 64b integer
+ *      and printed in full hexadecimal width.
+ *
+ * Q    As with 'q', but '0x' is prefixed.
+ *
+ * l    The next variant argument is treated as a 32b integer
+ *      and printed in full hexadecimal width.
+ *
+ * L    As with 'l', but '0x' is prefixed.
+ *
+ * w    The next variant argument is treated as a 16b integer
+ *      and printed in full hexadecimal width.
+ *
+ * W    As with 'w', but '0x' is prefixed.
+ *
+ * b    The next variant argument is treated as a 8b integer
+ *      and printed in full hexadecimal width.
+ *
+ * B    As with 'b', but '0x' is prefixed.
+ *
+ * d    The next variant argument is treated as integer
+ *      and printed in standard decimal format (only significant
+ *      digits).
+ *
+ * x    The next variant argument is treated as integer
+ *      and printed in standard hexadecimal format (only significant
+ *      digits).
+ *
+ * X    As with 'x', but '0x' is prefixed.
+ *
+ * All other characters from fmt except the formatting directives
+ * are printed in verbatim.
+ *
+ * @param fmt Formatting NULL terminated string.
+ */
+void printf(const char *fmt, ...)
+{
+	int i = 0;
+	va_list ap;
+	char c;	
+	
+	va_start(ap, fmt);
+	
+	while ((c = fmt[i++])) {
+		switch (c) {
+			
+			/* control character */
+			case '%':
+				
+				switch (c = fmt[i++]) {
+					
+					/* percentile itself */
+					case '%':
+						break;
+					
+					/*
+					 * String and character conversions.
+					 */
+					case 's':
+						puts(va_arg(ap, char_ptr));
+						goto loop;
+					
+					case 'c':
+						c = (char) va_arg(ap, int);
+						break;
+					
+					/*
+					 * Hexadecimal conversions with fixed width.
+					 */
+					case 'P': 
+						puts("0x");
+					case 'p':
+						print_fixed_hex(va_arg(ap, unative_t), sizeof(unative_t));
+						goto loop;
+					
+					case 'Q':
+						puts("0x");
+					case 'q':
+						print_fixed_hex(va_arg(ap, uint64_t), INT64);
+						goto loop;
+					
+					case 'L': 
+						puts("0x");
+					case 'l':
+						print_fixed_hex(va_arg(ap, unative_t), INT32);
+						goto loop;
+					
+					case 'W':
+						puts("0x");
+					case 'w':
+						print_fixed_hex(va_arg(ap, unative_t), INT16);
+						goto loop;
+					
+					case 'B':
+						puts("0x");
+					case 'b':
+						print_fixed_hex(va_arg(ap, unative_t), INT8);
+						goto loop;
+					
+					/*
+					 * Decimal and hexadecimal conversions.
+					 */
+					case 'd':
+						print_number(va_arg(ap, unative_t), 10);
+						goto loop;
+					
+					case 'X':
+						puts("0x");
+					case 'x':
+						print_number(va_arg(ap, unative_t), 16);
+						goto loop;
+					
+					/*
+					 * Bad formatting.
+					 */
+					default:
+						goto out;
+			}
+			
+			default:
+				write(&c, 1);
+		}
+	
+loop:
+		;
+	}
+	
+out:
+	
+	va_end(ap);
+}
Index: boot/generic/printf.h
===================================================================
--- boot/generic/printf.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/generic/printf.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PRINTF_H__
+#define PRINTF_H__
+
+#define INT8	1
+#define INT16	2
+#define INT32	4
+#define INT64	8
+
+extern void puts(const char *str);
+extern void printf(const char *fmt, ...);
+
+extern void write(const char *str, const int len);
+
+#endif
Index: boot/generic/stdarg.h
===================================================================
--- boot/generic/stdarg.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/generic/stdarg.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2006 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STDARG_H__
+#define STDARG_H__
+
+typedef __builtin_va_list va_list;
+
+#define va_start(ap, last)              __builtin_va_start(ap, last)
+#define va_arg(ap, type)                __builtin_va_arg(ap, type)
+#define va_end(ap)                      __builtin_va_end(ap)
+
+#endif
Index: boot/tools/config.py
===================================================================
--- boot/tools/config.py	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/tools/config.py	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,494 @@
+#!/usr/bin/env python
+"""
+Boot configuration script
+"""
+import sys
+import os
+import re
+import commands
+
+INPUT = 'boot.config'
+OUTPUT = 'Makefile.config'
+TMPOUTPUT = 'Makefile.config.tmp'
+
+class DefaultDialog:
+    "Wrapper dialog that tries to return default values"
+    def __init__(self, dlg):
+        self.dlg = dlg
+
+    def set_title(self,text):
+        self.dlg.set_title(text)
+        
+    def yesno(self, text, default=None):
+        if default is not None:
+            return default
+        return self.dlg.yesno(text, default)
+    def noyes(self, text, default=None):
+        if default is not None:
+            return default
+        return self.dlg.noyes(text, default)
+    
+    def choice(self, text, choices, defopt=None):
+        if defopt is not None:
+            return choices[defopt][0]
+        return self.dlg.choice(text, choices, defopt)
+
+class NoDialog:
+    def __init__(self):
+        self.printed = None
+        self.title = 'HelenOS Configuration'
+
+    def print_title(self):
+        if not self.printed:
+            sys.stdout.write("\n*** %s ***\n" % self.title)
+            self.printed = True
+
+    def set_title(self, text):
+        self.title = text
+        self.printed = False
+    
+    def noyes(self, text, default=None):
+        if not default:
+            default = 'n'
+        return self.yesno(text, default)
+    
+    def yesno(self, text, default=None):
+        self.print_title()
+        
+        if default != 'n':
+            default = 'y'
+        while 1:
+            sys.stdout.write("%s (y/n)[%s]: " % (text,default))
+            inp = sys.stdin.readline()
+            if not inp:
+                raise EOFError
+            inp = inp.strip().lower()
+            if not inp:
+                return default
+            if inp == 'y':
+                return 'y'
+            elif inp == 'n':
+                return 'n'
+
+    def _print_choice(self, text, choices, defopt):
+        sys.stdout.write('%s:\n' % text)
+        for i,(text,descr) in enumerate(choices):
+            sys.stdout.write('\t%2d. %s\n' % (i, descr))
+        if defopt is not None:
+            sys.stdout.write('Enter choice number[%d]: ' % defopt)
+        else:
+            sys.stdout.write('Enter choice number: ')
+
+    def menu(self, text, choices, button, defopt=None):
+        self.title = 'Main menu'
+        menu = []
+        for key, descr in choices:
+            txt = key + (45-len(key))*' ' + ': ' + descr
+            menu.append((key, txt))
+            
+        return self.choice(text, [button] + menu)
+        
+    def choice(self, text, choices, defopt=None):
+        self.print_title()
+        while 1:
+            self._print_choice(text, choices, defopt)
+            inp = sys.stdin.readline()
+            if not inp:
+                raise EOFError
+            if not inp.strip():
+                if defopt is not None:
+                    return choices[defopt][0]
+                continue
+            try:
+                number = int(inp.strip())
+            except ValueError:
+                continue
+            if number < 0 or number >= len(choices):
+                continue
+            return choices[number][0]
+
+
+def eof_checker(fnc):
+    def wrapper(self, *args, **kw):
+        try:
+            return fnc(self, *args, **kw)
+        except EOFError:
+            return getattr(self.bckdialog,fnc.func_name)(*args, **kw)
+    return wrapper
+
+class Dialog(NoDialog):
+    def __init__(self):
+        NoDialog.__init__(self)
+        self.dlgcmd = os.environ.get('DIALOG','dialog')
+        self.title = ''
+        self.backtitle = 'HelenOS Kernel Configuration'
+        
+        if os.system('%s --print-maxsize >/dev/null 2>&1' % self.dlgcmd) != 0:
+            raise NotImplementedError
+        
+        self.bckdialog = NoDialog()
+
+    def set_title(self,text):
+        self.title = text
+        self.bckdialog.set_title(text)
+        
+    def calldlg(self,*args,**kw):
+        "Wrapper for calling 'dialog' program"
+        indesc, outdesc = os.pipe()
+        pid = os.fork()
+        if not pid:
+            os.close(2)
+            os.dup(outdesc)
+            os.close(indesc)
+            
+            dlgargs = [self.dlgcmd,'--title',self.title,
+                       '--backtitle', self.backtitle]
+            for key,val in kw.items():
+                dlgargs.append('--'+key)
+                dlgargs.append(val)
+            dlgargs += args            
+            os.execlp(self.dlgcmd,*dlgargs)
+
+        os.close(outdesc)
+        
+        try:
+            errout = os.fdopen(indesc,'r')
+            data = errout.read()
+            errout.close()
+            pid,status = os.wait()
+        except:
+            os.system('reset') # Reset terminal
+            raise
+        
+        if not os.WIFEXITED(status):
+            os.system('reset') # Reset terminal
+            raise EOFError
+        
+        status = os.WEXITSTATUS(status)
+        if status == 255:
+            raise EOFError
+        return status,data
+        
+    def yesno(self, text, default=None):
+        if text[-1] not in ('?',':'):
+            text = text + ':'
+        width = '50'
+        height = '5'
+        if len(text) < 48:
+            text = ' '*int(((48-len(text))/2)) + text
+        else:
+            width = '0'
+            height = '0'
+        if default == 'n':
+            res,data = self.calldlg('--defaultno','--yesno',text,height,width)
+        else:
+            res,data = self.calldlg('--yesno',text,height,width)
+
+        if res == 0:
+            return 'y'
+        return 'n'
+    yesno = eof_checker(yesno)
+
+    def menu(self, text, choices, button, defopt=None):
+        self.title = 'Main menu'
+        text = text + ':'
+        width = '70'
+        height = str(8 + len(choices))
+        args = []
+        for key,val in choices:
+            args.append(key)
+            args.append(val)
+
+        kw = {}
+        if defopt:
+            kw['default-item'] = choices[defopt][0] 
+        res,data = self.calldlg('--ok-label','Change',
+                                '--extra-label',button[1],
+                                '--extra-button',
+                                '--menu',text,height,width,
+                                str(len(choices)),*args,**kw)
+        if res == 3:
+            return button[0]
+        if res == 1: # Cancel
+            sys.exit(1)
+        elif res:
+            print data
+            raise EOFError
+        return data
+    menu = eof_checker(menu)
+    
+    def choice(self, text, choices, defopt=None):
+        text = text + ':'
+        width = '50'
+        height = str(8 + len(choices))
+        args = []
+        for key,val in choices:
+            args.append(key)
+            args.append(val)
+
+        kw = {}
+        if defopt:
+            kw['default-item'] = choices[defopt][0] 
+        res,data = self.calldlg('--nocancel','--menu',text,height,width,
+                                str(len(choices)),*args, **kw)
+        if res:
+            print data
+            raise EOFError
+        return data
+    choice = eof_checker(choice)
+    
+def read_defaults(fname,defaults):
+    "Read saved values from last configuration run"
+    f = file(fname,'r')
+    for line in f:
+        res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line)
+        if res:
+            defaults[res.group(1)] = res.group(2)
+    f.close()
+
+def check_condition(text, defaults, asked_names):
+    seen_vars = [ x[0] for x in asked_names ]
+    ctype = 'cnf'
+    if ')|' in text or '|(' in text:
+        ctype = 'dnf'
+    
+    if ctype == 'cnf':
+        conds = text.split('&')
+    else:
+        conds = text.split('|')
+
+    for cond in conds:
+        if cond.startswith('(') and cond.endswith(')'):
+            cond = cond[1:-1]
+            
+        inside = check_inside(cond, defaults, ctype, seen_vars)
+        
+        if ctype == 'cnf' and not inside:
+            return False
+        if ctype == 'dnf' and inside:
+            return True
+
+    if ctype == 'cnf':
+        return True
+    return False
+
+def check_inside(text, defaults, ctype, seen_vars):
+    """
+    Check that the condition specified on input line is True
+
+    only CNF is supported
+    """
+    if ctype == 'cnf':
+        conds = text.split('|')
+    else:
+        conds = text.split('&')
+    for cond in conds:
+        res = re.match(r'^(.*?)(!?=)(.*)$', cond)
+        if not res:
+            raise RuntimeError("Invalid condition: %s" % cond)
+        condname = res.group(1)
+        oper = res.group(2)
+        condval = res.group(3)
+        if condname not in seen_vars:
+            varval = ''
+##             raise RuntimeError("Variable %s not defined before being asked." %\
+##                                condname)
+        elif not defaults.has_key(condname):
+            raise RuntimeError("Condition var %s does not exist: %s" % \
+                               (condname,text))
+        else:
+            varval = defaults[condname]
+        if ctype == 'cnf':
+            if oper == '=' and  condval == varval:
+                return True
+            if oper == '!=' and condval != varval:
+                return True
+        else:
+            if oper== '=' and condval != varval:
+                return False
+            if oper== '!=' and condval == varval:
+                return False
+    if ctype=='cnf':
+        return False
+    return True
+
+def parse_config(input, output, dlg, defaults={}, askonly=None):
+    "Parse configuration file and create Makefile.config on the fly"
+    def ask_the_question(dialog):
+        "Ask question based on the type of variables to ask"
+        # This is quite a hack, this thingy is written just to
+        # have access to local variables..
+        if vartype == 'y/n':
+            return dialog.yesno(comment, default)
+        elif vartype == 'n/y':
+            return dialog.noyes(comment, default)
+        elif vartype == 'choice':
+            defopt = None
+            if default is not None:
+                for i,(key,val) in enumerate(choices):
+                    if key == default:
+                        defopt = i
+                        break
+            return dialog.choice(comment, choices, defopt)
+        else:
+            raise RuntimeError("Bad method: %s" % vartype)
+
+    
+    f = file(input, 'r')
+    outf = file(output, 'w')
+
+    outf.write('#########################################\n')
+    outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n')
+    outf.write('#########################################\n\n')
+
+    asked_names = []
+
+    comment = ''
+    default = None
+    choices = []
+    for line in f:
+        if line.startswith('%'):
+            res = re.match(r'^%\s*(?:\[(.*?)\])?\s*(.*)$', line)
+            if not res:
+                raise RuntimeError('Invalid command: %s' % line)
+            if res.group(1):
+                if not check_condition(res.group(1), defaults,
+                                       asked_names):
+                    continue
+            args = res.group(2).strip().split(' ')
+            cmd = args[0].lower()
+            args = args[1:]
+            if cmd == 'saveas':
+                outf.write('%s = %s\n' % (args[1],defaults[args[0]]))
+            elif cmd == 'shellcmd':
+                varname = args[0]
+                args = args[1:]
+                for i,arg in enumerate(args):
+                    if arg.startswith('$'):
+                        args[i] = defaults[arg[1:]]
+                data,status = commands.getstatusoutput(' '.join(args))
+                if status:
+                    raise RuntimeError('Error running: %s' % ' '.join(args))
+                outf.write('%s = %s\n' % (varname,data.strip()))
+            continue
+            
+        if line.startswith('!'):
+            # Ask a question
+            res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line)
+            if not res:
+                raise RuntimeError("Weird line: %s" % line)
+            varname = res.group(2)
+            vartype = res.group(3)
+
+            default = defaults.get(varname,None)
+            
+            if res.group(1):
+                if not check_condition(res.group(1), defaults,
+                                       asked_names):
+                    if default is not None:
+                        outf.write('#!# %s = %s\n' % (varname, default))
+                    # Clear cumulated values
+                    comment = ''
+                    default = None
+                    choices = []
+                    continue
+                
+            asked_names.append((varname,comment))
+
+            if default is None or not askonly or askonly == varname:
+                default = ask_the_question(dlg)
+            else:
+                default = ask_the_question(DefaultDialog(dlg))
+
+            outf.write('%s = %s\n' % (varname, default))
+            # Remeber the selected value
+            defaults[varname] = default
+            # Clear cumulated values
+            comment = ''
+            default = None
+            choices = []
+            continue
+        
+        if line.startswith('@'):
+            # Add new line into the 'choice array' 
+            res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line)
+            if not res:
+                raise RuntimeError("Bad line: %s" % line)
+            if res.group(1):
+                if not check_condition(res.group(1),defaults,
+                                       asked_names):
+                    continue
+            choices.append((res.group(2), res.group(3)))
+            continue
+
+        # All other things print to output file
+        outf.write(line)
+        if re.match(r'^#[^#]', line):
+            # Last comment before question will be displayed to the user
+            comment = line[1:].strip()
+        elif line.startswith('## '):
+            # Set title of the dialog window
+            dlg.set_title(line[2:].strip())
+
+    outf.write('\n')
+    outf.write('REVISION = %s\n' % commands.getoutput('svnversion . 2> /dev/null'))
+    outf.write('TIMESTAMP = %s\n' % commands.getoutput('date "+%Y-%m-%d %H:%M:%S"'))
+    outf.close()
+    f.close()
+    return asked_names
+
+def main():
+    defaults = {}
+    try:
+        dlg = Dialog()
+    except NotImplementedError:
+        dlg = NoDialog()
+
+    if len(sys.argv) >= 2 and sys.argv[1]=='default':
+        defmode = True
+    else:
+        defmode = False
+
+    # Default run will update the configuration file
+    # with newest options
+    if os.path.exists(OUTPUT):
+        read_defaults(OUTPUT, defaults)
+
+	# Get ARCH from command line if specified	
+    if len(sys.argv) >= 3:
+        defaults['ARCH'] = sys.argv[2]
+
+    # Dry run only with defaults
+    varnames = parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults)
+    # If not in default mode, present selection of all possibilities
+    if not defmode:
+        defopt = 0
+        while 1:
+            # varnames contains variable names that were in the
+            # last question set
+            choices = [ (x[1],defaults[x[0]]) for x in varnames ]
+            res = dlg.menu('Configuration',choices,('save','Save'),defopt)
+            if res == 'save':
+                parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults)
+                break
+            # transfer description back to varname
+            for i,(vname,descr) in enumerate(varnames):
+                if res == descr:
+                    defopt = i
+                    break
+            # Ask the user a simple question, produce output
+            # as if the user answered all the other questions
+            # with default answer
+            varnames = parse_config(INPUT, TMPOUTPUT, dlg, defaults,
+                                    askonly=varnames[i][0])
+        
+    
+    if os.path.exists(OUTPUT):
+        os.unlink(OUTPUT)
+    os.rename(TMPOUTPUT, OUTPUT)
+    
+    if not defmode and dlg.yesno('Rebuild everything?') == 'y':
+        os.execlp('make','make','clean','build')
+
+if __name__ == '__main__':
+    main()
Index: boot/tools/ppc32/Makefile
===================================================================
--- boot/tools/ppc32/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/tools/ppc32/Makefile	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,8 @@
+debug: debug.o font-8x16.o
+	gcc -o debug debug.o font-8x16.o
+
+debug.o: debug.c font-8x16.h
+	gcc -c -o debug.o debug.c
+
+font-8x16.o: font-8x16.c font-8x16.h
+	gcc -c -o font-8x16.o font-8x16.c
Index: boot/tools/ppc32/debug.c
===================================================================
--- boot/tools/ppc32/debug.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/tools/ppc32/debug.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,68 @@
+#include "font-8x16.h"
+
+#define FB_REG "r8"
+#define SCAN_REG "r9"
+
+#define ADDR_REG "r10"
+#define FG_REG "r11"
+#define BG_REG "r12"
+
+#define FG_COLOR 0xffffffff
+#define BG_COLOR 0x00000000
+
+#define BPP 4
+
+void print_macro_init(void) {
+	printf(".macro DEBUG_INIT\n");
+	printf("#ifdef CONFIG_DEBUG\n");
+	printf("\tlis %s, %d\n", FG_REG, FG_COLOR >> 16);
+	printf("\tori %s, %s, %d\n", FG_REG, FG_REG, FG_COLOR & 0xffff);
+	printf("\t\n");
+	printf("\tlis %s, %d\n", BG_REG, BG_COLOR >> 16);
+	printf("\tori %s, %s, %d\n", BG_REG, BG_REG, BG_COLOR & 0xffff);
+	printf("\t\n");
+	printf("\tmr %s, %s\n", ADDR_REG, FB_REG);
+	printf("#endif\n");
+	printf(".endm\n");
+}
+
+void print_macro(const char *name) {
+	printf(".macro DEBUG_%s\n", name);
+	printf("#ifdef CONFIG_DEBUG\n");
+	
+	unsigned int y;
+	for (y = 0; y < FONT_SCANLINES; y++) {
+		printf("\t\n");
+		
+		if (y > 0)
+			printf("\tadd %s, %s, %s\n", ADDR_REG, ADDR_REG, SCAN_REG);
+		
+		unsigned int i;
+		for (i = 0; name[i] != 0; i++) {
+			char c = name[i];
+			
+			unsigned int x;
+			for (x = 0; x < FONT_WIDTH; x++) {
+				if (((fb_font[c * FONT_SCANLINES + y] >> (FONT_WIDTH - x)) & 1) == 1)
+					printf("\tstw %s, %d(%s)\n", FG_REG, (i * FONT_WIDTH + x) * BPP, ADDR_REG);
+				else
+					printf("\tstw %s, %d(%s)\n", BG_REG, (i * FONT_WIDTH + x) * BPP, ADDR_REG);
+			}
+		}
+	}
+	
+	printf("#endif\n");
+	printf(".endm\n");
+}
+
+int main(int argc, char *argv[]) {
+	print_macro_init();
+	
+	int i;
+	for (i = 1; i < argc; i++) {
+		printf("\n");
+		print_macro(argv[i]);
+	}
+	
+	return 0;
+}
Index: boot/tools/ppc32/font-8x16.c
===================================================================
--- boot/tools/ppc32/font-8x16.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/tools/ppc32/font-8x16.c	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,4642 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "font-8x16.h"
+
+unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES] = {
+
+	/* 0 0x00 '^@' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 1 0x01 '^A' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x81, /* 10000001 */
+	0xa5, /* 10100101 */
+	0x81, /* 10000001 */
+	0x81, /* 10000001 */
+	0xbd, /* 10111101 */
+	0x99, /* 10011001 */
+	0x81, /* 10000001 */
+	0x81, /* 10000001 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 2 0x02 '^B' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0xff, /* 11111111 */
+	0xdb, /* 11011011 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xc3, /* 11000011 */
+	0xe7, /* 11100111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 3 0x03 '^C' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 4 0x04 '^D' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x7c, /* 01111100 */
+	0xfe, /* 11111110 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 5 0x05 '^E' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0xe7, /* 11100111 */
+	0xe7, /* 11100111 */
+	0xe7, /* 11100111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 6 0x06 '^F' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 7 0x07 '^G' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 8 0x08 '^H' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xe7, /* 11100111 */
+	0xc3, /* 11000011 */
+	0xc3, /* 11000011 */
+	0xe7, /* 11100111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 9 0x09 '^I' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x42, /* 01000010 */
+	0x42, /* 01000010 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 10 0x0a '^J' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xc3, /* 11000011 */
+	0x99, /* 10011001 */
+	0xbd, /* 10111101 */
+	0xbd, /* 10111101 */
+	0x99, /* 10011001 */
+	0xc3, /* 11000011 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 11 0x0b '^K' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1e, /* 00011110 */
+	0x0e, /* 00001110 */
+	0x1a, /* 00011010 */
+	0x32, /* 00110010 */
+	0x78, /* 01111000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 12 0x0c '^L' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 13 0x0d '^M' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3f, /* 00111111 */
+	0x33, /* 00110011 */
+	0x3f, /* 00111111 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x70, /* 01110000 */
+	0xf0, /* 11110000 */
+	0xe0, /* 11100000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 14 0x0e '^N' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7f, /* 01111111 */
+	0x63, /* 01100011 */
+	0x7f, /* 01111111 */
+	0x63, /* 01100011 */
+	0x63, /* 01100011 */
+	0x63, /* 01100011 */
+	0x63, /* 01100011 */
+	0x67, /* 01100111 */
+	0xe7, /* 11100111 */
+	0xe6, /* 11100110 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 15 0x0f '^O' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xdb, /* 11011011 */
+	0x3c, /* 00111100 */
+	0xe7, /* 11100111 */
+	0x3c, /* 00111100 */
+	0xdb, /* 11011011 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 16 0x10 '^P' */
+	0x00, /* 00000000 */
+	0x80, /* 10000000 */
+	0xc0, /* 11000000 */
+	0xe0, /* 11100000 */
+	0xf0, /* 11110000 */
+	0xf8, /* 11111000 */
+	0xfe, /* 11111110 */
+	0xf8, /* 11111000 */
+	0xf0, /* 11110000 */
+	0xe0, /* 11100000 */
+	0xc0, /* 11000000 */
+	0x80, /* 10000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 17 0x11 '^Q' */
+	0x00, /* 00000000 */
+	0x02, /* 00000010 */
+	0x06, /* 00000110 */
+	0x0e, /* 00001110 */
+	0x1e, /* 00011110 */
+	0x3e, /* 00111110 */
+	0xfe, /* 11111110 */
+	0x3e, /* 00111110 */
+	0x1e, /* 00011110 */
+	0x0e, /* 00001110 */
+	0x06, /* 00000110 */
+	0x02, /* 00000010 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 18 0x12 '^R' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 19 0x13 '^S' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 20 0x14 '^T' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7f, /* 01111111 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0x7b, /* 01111011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 21 0x15 '^U' */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x0c, /* 00001100 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 22 0x16 '^V' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 23 0x17 '^W' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 24 0x18 '^X' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 25 0x19 '^Y' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 26 0x1a '^Z' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0xfe, /* 11111110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 27 0x1b '^[' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xfe, /* 11111110 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 28 0x1c '^\' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 29 0x1d '^]' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x28, /* 00101000 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x28, /* 00101000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 30 0x1e '^^' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x7c, /* 01111100 */
+	0x7c, /* 01111100 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 31 0x1f '^_' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0x7c, /* 01111100 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 32 0x20 ' ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 33 0x21 '!' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 34 0x22 '"' */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x24, /* 00100100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 35 0x23 '#' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 36 0x24 '$' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0x7c, /* 01111100 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x86, /* 10000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 37 0x25 '%' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc2, /* 11000010 */
+	0xc6, /* 11000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc6, /* 11000110 */
+	0x86, /* 10000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 38 0x26 '&' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 39 0x27 ''' */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 40 0x28 '(' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 41 0x29 ')' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 42 0x2a '*' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0xff, /* 11111111 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 43 0x2b '+' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 44 0x2c ',' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 45 0x2d '-' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 46 0x2e '.' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 47 0x2f '/' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x02, /* 00000010 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0x80, /* 10000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 48 0x30 '0' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 49 0x31 '1' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x38, /* 00111000 */
+	0x78, /* 01111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 50 0x32 '2' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 51 0x33 '3' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x3c, /* 00111100 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 52 0x34 '4' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x1c, /* 00011100 */
+	0x3c, /* 00111100 */
+	0x6c, /* 01101100 */
+	0xcc, /* 11001100 */
+	0xfe, /* 11111110 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x1e, /* 00011110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 53 0x35 '5' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xfc, /* 11111100 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 54 0x36 '6' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xfc, /* 11111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 55 0x37 '7' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 56 0x38 '8' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 57 0x39 '9' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7e, /* 01111110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 58 0x3a ':' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 59 0x3b ';' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 60 0x3c '<' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 61 0x3d '=' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 62 0x3e '>' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 63 0x3f '?' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 64 0x40 '@' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xde, /* 11011110 */
+	0xde, /* 11011110 */
+	0xde, /* 11011110 */
+	0xdc, /* 11011100 */
+	0xc0, /* 11000000 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 65 0x41 'A' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 66 0x42 'B' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfc, /* 11111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xfc, /* 11111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 67 0x43 'C' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc2, /* 11000010 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 68 0x44 'D' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 69 0x45 'E' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x66, /* 01100110 */
+	0x62, /* 01100010 */
+	0x68, /* 01101000 */
+	0x78, /* 01111000 */
+	0x68, /* 01101000 */
+	0x60, /* 01100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 70 0x46 'F' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x66, /* 01100110 */
+	0x62, /* 01100010 */
+	0x68, /* 01101000 */
+	0x78, /* 01111000 */
+	0x68, /* 01101000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 71 0x47 'G' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xde, /* 11011110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x66, /* 01100110 */
+	0x3a, /* 00111010 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 72 0x48 'H' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 73 0x49 'I' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 74 0x4a 'J' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1e, /* 00011110 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 75 0x4b 'K' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe6, /* 11100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x78, /* 01111000 */
+	0x78, /* 01111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 76 0x4c 'L' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf0, /* 11110000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 77 0x4d 'M' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xee, /* 11101110 */
+	0xfe, /* 11111110 */
+	0xfe, /* 11111110 */
+	0xd6, /* 11010110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 78 0x4e 'N' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xe6, /* 11100110 */
+	0xf6, /* 11110110 */
+	0xfe, /* 11111110 */
+	0xde, /* 11011110 */
+	0xce, /* 11001110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 79 0x4f 'O' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 80 0x50 'P' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfc, /* 11111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 81 0x51 'Q' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xde, /* 11011110 */
+	0x7c, /* 01111100 */
+	0x0c, /* 00001100 */
+	0x0e, /* 00001110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 82 0x52 'R' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfc, /* 11111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 83 0x53 'S' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x38, /* 00111000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 84 0x54 'T' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x5a, /* 01011010 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 85 0x55 'U' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 86 0x56 'V' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 87 0x57 'W' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xfe, /* 11111110 */
+	0xee, /* 11101110 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 88 0x58 'X' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x7c, /* 01111100 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x7c, /* 01111100 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 89 0x59 'Y' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 90 0x5a 'Z' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0x86, /* 10000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc2, /* 11000010 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 91 0x5b '[' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 92 0x5c '\' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x80, /* 10000000 */
+	0xc0, /* 11000000 */
+	0xe0, /* 11100000 */
+	0x70, /* 01110000 */
+	0x38, /* 00111000 */
+	0x1c, /* 00011100 */
+	0x0e, /* 00001110 */
+	0x06, /* 00000110 */
+	0x02, /* 00000010 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 93 0x5d ']' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 94 0x5e '^' */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 95 0x5f '_' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 96 0x60 '`' */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 97 0x61 'a' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 98 0x62 'b' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe0, /* 11100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x78, /* 01111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 99 0x63 'c' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 100 0x64 'd' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1c, /* 00011100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x3c, /* 00111100 */
+	0x6c, /* 01101100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 101 0x65 'e' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 102 0x66 'f' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1c, /* 00011100 */
+	0x36, /* 00110110 */
+	0x32, /* 00110010 */
+	0x30, /* 00110000 */
+	0x78, /* 01111000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 103 0x67 'g' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x7c, /* 01111100 */
+	0x0c, /* 00001100 */
+	0xcc, /* 11001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+
+	/* 104 0x68 'h' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe0, /* 11100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x6c, /* 01101100 */
+	0x76, /* 01110110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 105 0x69 'i' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 106 0x6a 'j' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+
+	/* 107 0x6b 'k' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xe0, /* 11100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x78, /* 01111000 */
+	0x78, /* 01111000 */
+	0x6c, /* 01101100 */
+	0x66, /* 01100110 */
+	0xe6, /* 11100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 108 0x6c 'l' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 109 0x6d 'm' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xec, /* 11101100 */
+	0xfe, /* 11111110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 110 0x6e 'n' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 111 0x6f 'o' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 112 0x70 'p' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+
+	/* 113 0x71 'q' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x7c, /* 01111100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x1e, /* 00011110 */
+	0x00, /* 00000000 */
+
+	/* 114 0x72 'r' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x76, /* 01110110 */
+	0x66, /* 01100110 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 115 0x73 's' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x38, /* 00111000 */
+	0x0c, /* 00001100 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 116 0x74 't' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0xfc, /* 11111100 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x36, /* 00110110 */
+	0x1c, /* 00011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 117 0x75 'u' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 118 0x76 'v' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 119 0x77 'w' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xd6, /* 11010110 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 120 0x78 'x' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 121 0x79 'y' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7e, /* 01111110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+
+	/* 122 0x7a 'z' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xcc, /* 11001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 123 0x7b '{' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x0e, /* 00001110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 124 0x7c '|' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 125 0x7d '}' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x70, /* 01110000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x0e, /* 00001110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 126 0x7e '~' */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 127 0x7f '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 128 0x80 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0xc2, /* 11000010 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc2, /* 11000010 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 129 0x81 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 130 0x82 '' */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 131 0x83 '' */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 132 0x84 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 133 0x85 '
+' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 134 0x86 '' */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 135 0x87 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x18, /* 00011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 136 0x88 '' */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 137 0x89 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 138 0x8a '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 139 0x8b '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 140 0x8c '' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 141 0x8d '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 142 0x8e '' */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 143 0x8f '' */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 144 0x90 '' */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x66, /* 01100110 */
+	0x62, /* 01100010 */
+	0x68, /* 01101000 */
+	0x78, /* 01111000 */
+	0x68, /* 01101000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 145 0x91 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xec, /* 11101100 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x7e, /* 01111110 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0x6e, /* 01101110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 146 0x92 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3e, /* 00111110 */
+	0x6c, /* 01101100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xfe, /* 11111110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xce, /* 11001110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 147 0x93 '' */
+	0x00, /* 00000000 */
+	0x10, /* 00010000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 148 0x94 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 149 0x95 '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 150 0x96 '' */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x78, /* 01111000 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 151 0x97 '' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 152 0x98 '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7e, /* 01111110 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x78, /* 01111000 */
+	0x00, /* 00000000 */
+
+	/* 153 0x99 '' */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 154 0x9a '' */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 155 0x9b '' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 156 0x9c '' */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x64, /* 01100100 */
+	0x60, /* 01100000 */
+	0xf0, /* 11110000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xe6, /* 11100110 */
+	0xfc, /* 11111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 157 0x9d '' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 158 0x9e '' */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xf8, /* 11111000 */
+	0xc4, /* 11000100 */
+	0xcc, /* 11001100 */
+	0xde, /* 11011110 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 159 0x9f '' */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x1b, /* 00011011 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xd8, /* 11011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 160 0xa0 ' ' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0x0c, /* 00001100 */
+	0x7c, /* 01111100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 161 0xa1 '¡' */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 162 0xa2 '¢' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 163 0xa3 '£' */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x00, /* 00000000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 164 0xa4 '¤' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0xdc, /* 11011100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 165 0xa5 '¥' */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0xc6, /* 11000110 */
+	0xe6, /* 11100110 */
+	0xf6, /* 11110110 */
+	0xfe, /* 11111110 */
+	0xde, /* 11011110 */
+	0xce, /* 11001110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 166 0xa6 '¦' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x3e, /* 00111110 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 167 0xa7 '§' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 168 0xa8 '¨' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x7c, /* 01111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 169 0xa9 '©' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 170 0xaa 'ª' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 171 0xab '«' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0xe0, /* 11100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xdc, /* 11011100 */
+	0x86, /* 10000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x3e, /* 00111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 172 0xac '¬' */
+	0x00, /* 00000000 */
+	0x60, /* 01100000 */
+	0xe0, /* 11100000 */
+	0x62, /* 01100010 */
+	0x66, /* 01100110 */
+	0x6c, /* 01101100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x66, /* 01100110 */
+	0xce, /* 11001110 */
+	0x9a, /* 10011010 */
+	0x3f, /* 00111111 */
+	0x06, /* 00000110 */
+	0x06, /* 00000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 173 0xad '­' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 174 0xae '®' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x36, /* 00110110 */
+	0x6c, /* 01101100 */
+	0xd8, /* 11011000 */
+	0x6c, /* 01101100 */
+	0x36, /* 00110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 175 0xaf '¯' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xd8, /* 11011000 */
+	0x6c, /* 01101100 */
+	0x36, /* 00110110 */
+	0x6c, /* 01101100 */
+	0xd8, /* 11011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 176 0xb0 '°' */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+	0x11, /* 00010001 */
+	0x44, /* 01000100 */
+
+	/* 177 0xb1 '±' */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+	0x55, /* 01010101 */
+	0xaa, /* 10101010 */
+
+	/* 178 0xb2 '²' */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+	0xdd, /* 11011101 */
+	0x77, /* 01110111 */
+
+	/* 179 0xb3 '³' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 180 0xb4 '´' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 181 0xb5 'µ' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 182 0xb6 '¶' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf6, /* 11110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 183 0xb7 '·' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 184 0xb8 '¸' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 185 0xb9 '¹' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf6, /* 11110110 */
+	0x06, /* 00000110 */
+	0xf6, /* 11110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 186 0xba 'º' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 187 0xbb '»' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x06, /* 00000110 */
+	0xf6, /* 11110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 188 0xbc '¼' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf6, /* 11110110 */
+	0x06, /* 00000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 189 0xbd '½' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 190 0xbe '¾' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 191 0xbf '¿' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xf8, /* 11111000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 192 0xc0 'À' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 193 0xc1 'Á' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 194 0xc2 'Â' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 195 0xc3 'Ã' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 196 0xc4 'Ä' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 197 0xc5 'Å' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 198 0xc6 'Æ' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 199 0xc7 'Ç' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x37, /* 00110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 200 0xc8 'È' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x37, /* 00110111 */
+	0x30, /* 00110000 */
+	0x3f, /* 00111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 201 0xc9 'É' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3f, /* 00111111 */
+	0x30, /* 00110000 */
+	0x37, /* 00110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 202 0xca 'Ê' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf7, /* 11110111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 203 0xcb 'Ë' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xf7, /* 11110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 204 0xcc 'Ì' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x37, /* 00110111 */
+	0x30, /* 00110000 */
+	0x37, /* 00110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 205 0xcd 'Í' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 206 0xce 'Î' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xf7, /* 11110111 */
+	0x00, /* 00000000 */
+	0xf7, /* 11110111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 207 0xcf 'Ï' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 208 0xd0 'Ð' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 209 0xd1 'Ñ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 210 0xd2 'Ò' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 211 0xd3 'Ó' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x3f, /* 00111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 212 0xd4 'Ô' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 213 0xd5 'Õ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 214 0xd6 'Ö' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x3f, /* 00111111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 215 0xd7 '×' */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0xff, /* 11111111 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+
+	/* 216 0xd8 'Ø' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0xff, /* 11111111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 217 0xd9 'Ù' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xf8, /* 11111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 218 0xda 'Ú' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1f, /* 00011111 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 219 0xdb 'Û' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 220 0xdc 'Ü' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+
+	/* 221 0xdd 'Ý' */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+	0xf0, /* 11110000 */
+
+	/* 222 0xde 'Þ' */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+	0x0f, /* 00001111 */
+
+	/* 223 0xdf 'ß' */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0xff, /* 11111111 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 224 0xe0 'à' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xdc, /* 11011100 */
+	0x76, /* 01110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 225 0xe1 'á' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x78, /* 01111000 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xcc, /* 11001100 */
+	0xd8, /* 11011000 */
+	0xcc, /* 11001100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xcc, /* 11001100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 226 0xe2 'â' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 227 0xe3 'ã' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 228 0xe4 'ä' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 229 0xe5 'å' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 230 0xe6 'æ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+
+	/* 231 0xe7 'ç' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 232 0xe8 'è' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 233 0xe9 'é' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xfe, /* 11111110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 234 0xea 'ê' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0xee, /* 11101110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 235 0xeb 'ë' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1e, /* 00011110 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x3e, /* 00111110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x66, /* 01100110 */
+	0x3c, /* 00111100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 236 0xec 'ì' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 237 0xed 'í' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x03, /* 00000011 */
+	0x06, /* 00000110 */
+	0x7e, /* 01111110 */
+	0xdb, /* 11011011 */
+	0xdb, /* 11011011 */
+	0xf3, /* 11110011 */
+	0x7e, /* 01111110 */
+	0x60, /* 01100000 */
+	0xc0, /* 11000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 238 0xee 'î' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x1c, /* 00011100 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x7c, /* 01111100 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x1c, /* 00011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 239 0xef 'ï' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7c, /* 01111100 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0xc6, /* 11000110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 240 0xf0 'ð' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0xfe, /* 11111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 241 0xf1 'ñ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x7e, /* 01111110 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 242 0xf2 'ò' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x06, /* 00000110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 243 0xf3 'ó' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x30, /* 00110000 */
+	0x60, /* 01100000 */
+	0x30, /* 00110000 */
+	0x18, /* 00011000 */
+	0x0c, /* 00001100 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 244 0xf4 'ô' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x0e, /* 00001110 */
+	0x1b, /* 00011011 */
+	0x1b, /* 00011011 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+
+	/* 245 0xf5 'õ' */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0xd8, /* 11011000 */
+	0x70, /* 01110000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 246 0xf6 'ö' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 247 0xf7 '÷' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0x76, /* 01110110 */
+	0xdc, /* 11011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 248 0xf8 'ø' */
+	0x00, /* 00000000 */
+	0x38, /* 00111000 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x38, /* 00111000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 249 0xf9 'ù' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 250 0xfa 'ú' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x18, /* 00011000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 251 0xfb 'û' */
+	0x00, /* 00000000 */
+	0x0f, /* 00001111 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0x0c, /* 00001100 */
+	0xec, /* 11101100 */
+	0x6c, /* 01101100 */
+	0x6c, /* 01101100 */
+	0x3c, /* 00111100 */
+	0x1c, /* 00011100 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 252 0xfc 'ü' */
+	0x00, /* 00000000 */
+	0x6c, /* 01101100 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x36, /* 00110110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 253 0xfd 'ý' */
+	0x00, /* 00000000 */
+	0x3c, /* 00111100 */
+	0x66, /* 01100110 */
+	0x0c, /* 00001100 */
+	0x18, /* 00011000 */
+	0x32, /* 00110010 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 254 0xfe 'þ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x7e, /* 01111110 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+	/* 255 0xff 'ÿ' */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+	0x00, /* 00000000 */
+
+};
Index: boot/tools/ppc32/font-8x16.h
===================================================================
--- boot/tools/ppc32/font-8x16.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
+++ boot/tools/ppc32/font-8x16.h	(revision fb0e6f03f428e14b816f7a37cb110f0b908727d5)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2005 Martin Decky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __FONT_8X16_H__
+#define __FONT_8X16_H__
+
+#define FONT_GLIPHS		256
+#define FONT_SCANLINES	16
+#define FONT_WIDTH		8
+
+extern unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES];
+
+#endif
