diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/QemuMacDrivers | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/QemuMacDrivers')
23 files changed, 3274 insertions, 0 deletions
diff --git a/roms/QemuMacDrivers/COPYING b/roms/QemuMacDrivers/COPYING new file mode 100644 index 000000000..00ccfbb62 --- /dev/null +++ b/roms/QemuMacDrivers/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General +Public License instead of this License. diff --git a/roms/QemuMacDrivers/QemuVGADriver/QemuVGADriver.mcp.xml b/roms/QemuMacDrivers/QemuVGADriver/QemuVGADriver.mcp.xml new file mode 100644 index 000000000..fda99e800 --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/QemuVGADriver.mcp.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?codewarrior exportversion="1.0.1" ideversion="5.0" ?>
<!DOCTYPE PROJECT [
<!ELEMENT PROJECT (TARGETLIST, TARGETORDER, GROUPLIST, DESIGNLIST?)>
<!ELEMENT TARGETLIST (TARGET+)>
<!ELEMENT TARGET (NAME, SETTINGLIST, FILELIST?, LINKORDER?, SEGMENTLIST?, OVERLAYGROUPLIST?, SUBTARGETLIST?, SUBPROJECTLIST?, FRAMEWORKLIST?, PACKAGEACTIONSLIST?)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT USERSOURCETREETYPE (#PCDATA)>
<!ELEMENT PATH (#PCDATA)>
<!ELEMENT FILELIST (FILE*)>
<!ELEMENT FILE (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?, ROOTFILEREF?, FILEKIND?, FILEFLAGS?)>
<!ELEMENT PATHTYPE (#PCDATA)>
<!ELEMENT PATHROOT (#PCDATA)>
<!ELEMENT ACCESSPATH (#PCDATA)>
<!ELEMENT PATHFORMAT (#PCDATA)>
<!ELEMENT ROOTFILEREF (PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
<!ELEMENT FILEKIND (#PCDATA)>
<!ELEMENT FILEFLAGS (#PCDATA)>
<!ELEMENT FILEREF (TARGETNAME?, PATHTYPE, PATHROOT?, ACCESSPATH?, PATH, PATHFORMAT?)>
<!ELEMENT TARGETNAME (#PCDATA)>
<!ELEMENT SETTINGLIST ((SETTING|PANELDATA)+)>
<!ELEMENT SETTING (NAME?, (VALUE|(SETTING+)))>
<!ELEMENT PANELDATA (NAME, VALUE)>
<!ELEMENT VALUE (#PCDATA)>
<!ELEMENT LINKORDER (FILEREF*)>
<!ELEMENT SEGMENTLIST (SEGMENT+)>
<!ELEMENT SEGMENT (NAME, ATTRIBUTES?, FILEREF*)>
<!ELEMENT ATTRIBUTES (#PCDATA)>
<!ELEMENT OVERLAYGROUPLIST (OVERLAYGROUP+)>
<!ELEMENT OVERLAYGROUP (NAME, BASEADDRESS, OVERLAY*)>
<!ELEMENT BASEADDRESS (#PCDATA)>
<!ELEMENT OVERLAY (NAME, FILEREF*)>
<!ELEMENT SUBTARGETLIST (SUBTARGET+)>
<!ELEMENT SUBTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
<!ELEMENT SUBPROJECTLIST (SUBPROJECT+)>
<!ELEMENT SUBPROJECT (FILEREF, SUBPROJECTTARGETLIST)>
<!ELEMENT SUBPROJECTTARGETLIST (SUBPROJECTTARGET*)>
<!ELEMENT SUBPROJECTTARGET (TARGETNAME, ATTRIBUTES?, FILEREF?)>
<!ELEMENT FRAMEWORKLIST (FRAMEWORK+)>
<!ELEMENT FRAMEWORK (FILEREF, DYNAMICLIBRARY?, VERSION?)>
<!ELEMENT PACKAGEACTIONSLIST (PACKAGEACTION+)>
<!ELEMENT PACKAGEACTION (#PCDATA)>
<!ELEMENT LIBRARYFILE (FILEREF)>
<!ELEMENT VERSION (#PCDATA)>
<!ELEMENT TARGETORDER (ORDEREDTARGET|ORDEREDDESIGN)*>
<!ELEMENT ORDEREDTARGET (NAME)>
<!ELEMENT ORDEREDDESIGN (NAME, ORDEREDTARGET+)>
<!ELEMENT GROUPLIST (GROUP|FILEREF)*>
<!ELEMENT GROUP (NAME, (GROUP|FILEREF)*)>
<!ELEMENT DESIGNLIST (DESIGN+)>
<!ELEMENT DESIGN (NAME, DESIGNDATA)>
<!ELEMENT DESIGNDATA (#PCDATA)>
]>
<PROJECT>
<TARGETLIST>
<TARGET>
<NAME>QemuVGADriver_DebugOSI</NAME>
<SETTINGLIST>
<!-- Settings for "Source Trees" panel -->
<SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Access Paths" panel -->
<SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>SourceRelativeIncludes</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>UserSearchPaths</NAME>
<SETTING>
<SETTING><NAME>SearchPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>SearchPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>../shared</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Unix</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
</SETTING>
</SETTING>
<SETTING><NAME>SystemSearchPaths</NAME>
<SETTING>
<SETTING><NAME>SearchPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
</SETTING>
</SETTING>
<!-- Settings for "Debugger Runtime" panel -->
<SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Target Settings" panel -->
<SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
<SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Targetname</NAME><VALUE>QemuVGADriver_DebugOSI</VALUE></SETTING>
<SETTING><NAME>OutputDirectory</NAME>
<SETTING><NAME>Path</NAME><VALUE>../builds</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Unix</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "File Mappings" panel -->
<SETTING><NAME>FileMappings</NAME>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.arr</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.plist</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.o</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.ppob</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.rsrc</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
</SETTING>
<!-- Settings for "Build Extras" panel -->
<SETTING><NAME>CacheModDates</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>BrowserGenerator</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>DebuggerAppPath</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>DebuggerWorkingDir</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CodeCompletionPrefixFileName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>CodeCompletionMacroFileName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Debugger Target" panel -->
<SETTING><NAME>ConsoleEncoding</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>AutoTargetDLLsPopUp</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
<SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>AltExePath</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
<SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "Remote Debug" panel -->
<SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>CoreID</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>JTAGClockSpeed</NAME><VALUE>8000</VALUE></SETTING>
<SETTING><NAME>IsMultiCore</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>OSDownload</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>UseGlobalOSDownload</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>OSDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>OSDownloadPath</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>AltDownload</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>AltDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Auto-target" panel -->
<SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Analyzer Connections" panel -->
<SETTING><NAME>AnalyzerConnectionName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Custom Keywords" panel -->
<SETTING><NAME>CustomColor1</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CustomColor2</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CustomColor3</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CustomColor4</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<!-- Settings for "C/C++ Compiler" panel -->
<SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_templateparser</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_c99</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_bottomupinline</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_gcc_extensions</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_instance_manager</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "C/C++ Preprocessor" panel -->
<SETTING><NAME>C_CPP_Preprocessor_EmitFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_EmitLine</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_EmitFullPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_KeepComments</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_PCHUsesPrefixText</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_EmitPragmas</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_KeepWhiteSpace</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_MultiByteEncoding</NAME><VALUE>encAutoDetectMultibyte</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_PrefixText</NAME><VALUE>#define DEBUG_OSI
</VALUE></SETTING>
<!-- Settings for "C/C++ Warnings" panel -->
<SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_missingreturn</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_no_side_effect</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_resultnotused</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_padding</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_impl_i2f_conv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_impl_f2i_conv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_impl_s2u_conv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_illtokenpasting</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_filenamecaps</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_filenamecapssystem</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_undefmacro</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_ptrintconv</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "MacOS Merge Panel" panel -->
<SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
<SETTING><VALUE>DLGX</VALUE></SETTING>
<SETTING><VALUE>ckid</VALUE></SETTING>
<SETTING><VALUE>Proj</VALUE></SETTING>
<SETTING><VALUE>WSPC</VALUE></SETTING>
</SETTING>
<!-- Settings for "Output Flags" panel -->
<SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>HasCustomBadge</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasRoutingInfo</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "PPC CodeGen" panel -->
<SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_function_align</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_largetoc</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_poolconst</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_linkerpoolsstrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_volatileasm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_altivec_move_block</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_strictIEEEfp</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_genfsel</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_orderedfpcmp</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "PPC CodeGen Mach-O" panel -->
<SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_profiler_enum</NAME><VALUE>Off</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_function_align</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_boolisint</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_linkerpoolsstrings</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_volatileasm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_vecmove</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_fp_ieee_strict</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_genfsel</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_fp_cmps_ordered</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "PPC Disassembler" panel -->
<SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
<!-- Settings for "PPC Global Optimizer" panel -->
<SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level2</VALUE></SETTING>
<SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Size</VALUE></SETTING>
<!-- Settings for "PPC Linker" panel -->
<SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_code_folding</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE>DoDriverIO</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "PPC Mac OS X Linker" panel -->
<SETTING><NAME>MWLinker_MacOSX_linksym</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_symfullpath</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_linkmap</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_use_objectivec_semantics</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_strip_debug_symbols</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_prebind_all_twolevel_modules</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_data_before_text_segment</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_report_msl_overloads</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_objects_follow_linkorder</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_linkmode</NAME><VALUE>Normal</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_exports</NAME><VALUE>ReferencedGlobals</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_sortcode</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_mainname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_initname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_code_folding</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_stabsgen</NAME><VALUE>None</VALUE></SETTING>
<!-- Settings for "PPC Mac OS X Project" panel -->
<SETTING><NAME>MWProject_MacOSX_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_outfile</NAME><VALUE>video.nw</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_filecreator</NAME><VALUE>PSSD</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_filetype</NAME><VALUE>ndrv</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_vmaddress</NAME><VALUE>4096</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_usedefaultvmaddr</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flatrsrcoutputdir</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWProject_MacOSX_installpath</NAME><VALUE>./</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_dont_prebind</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flat_namespace</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_frameworkversion</NAME><VALUE>A</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_currentversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flat_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_AddrMode</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_SingleModule</NAME><VALUE>1</VALUE></SETTING>
<!-- Settings for "PPC PEF" panel -->
<SETTING><NAME>MWPEF_exports</NAME><VALUE>File</VALUE></SETTING>
<SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWPEF_expandbss</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_currentversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_fragmentname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "PPC Project" panel -->
<SETTING><NAME>MWProject_PPC_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>qemu_vga_debugosi.ndrv</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>PSSD</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>ndrv</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "PPCAsm Panel" panel -->
<SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "Property List" panel -->
<SETTING><NAME>PList_OutputType</NAME><VALUE>File</VALUE></SETTING>
<SETTING><NAME>PList_OutputEncoding</NAME><VALUE>UTF-8</VALUE></SETTING>
<SETTING><NAME>PList_PListVersion</NAME><VALUE>1.0</VALUE></SETTING>
<SETTING><NAME>PList_Prefix</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PList_FileFilename</NAME><VALUE>Info.plist</VALUE></SETTING>
<SETTING><NAME>PList_FileDirectory</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Unix</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>PList_ResourceType</NAME><VALUE>plst</VALUE></SETTING>
<SETTING><NAME>PList_ResourceID</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>PList_ResourceName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Rez Compiler" panel -->
<SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
<!-- Settings for "WinRC Compiler" panel -->
<SETTING><NAME>MWWinRC_prefixname</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "x86 CodeGen" panel -->
<SETTING><NAME>MWCodeGen_X86_processor</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_alignment</NAME><VALUE>bytes8</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_exceptions</NAME><VALUE>ZeroOverhead</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_name_mangling</NAME><VALUE>MWWin32</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_use_extinst</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_mmx</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_3dnow</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_use_mmx_3dnow_convention</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_cmov</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_sse</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_sse2</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_intrinsics</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_optimizeasm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_disableopts</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_profile</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_runtime</NAME><VALUE>Custom</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_readonlystrings</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_vectorize</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_relaxieee</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "x86 COFF" panel -->
<SETTING><NAME>MWLinker_X86_subsysmajorid</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_subsysminorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_opsysmajorid</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_opsysminorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_usrmajorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_usrminorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_maxstacksize</NAME><VALUE>1024</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_minstacksize</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_size</NAME><VALUE>1024</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_minsize</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_coff_flags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_dll_flags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_baseaddress</NAME><VALUE>4194304</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_filealign</NAME><VALUE>4096</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_sectionalign</NAME><VALUE>4096</VALUE></SETTING>
<!-- Settings for "x86 Disassembler" panel -->
<SETTING><NAME>PDisasmX86_showHeaders</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSectHeaders</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSymTab</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showCode</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showData</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showDebug</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showExceptions</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showRaw</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showAllRaw</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSource</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showRelocation</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showHex</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showComments</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSymDefs</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_unmangle</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_verbose</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_resolveRelocs</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_resolveLocals</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "x86 Exceptions Panel" panel -->
<SETTING><NAME>MWDebugger_X86_Exceptions</NAME>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
</SETTING>
<!-- Settings for "x86 Global Optimizer" panel -->
<SETTING><NAME>GlobalOptimizer_X86_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
<SETTING><NAME>GlobalOptimizer_X86_optfor</NAME><VALUE>Speed</VALUE></SETTING>
<!-- Settings for "x86 Linker" panel -->
<SETTING><NAME>MWLinker_X86_entrypointusage</NAME><VALUE>Default</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_entrypoint</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_subsystem</NAME><VALUE>Unknown</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_commandfile</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_generatemap</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linksym</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linkCV</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_symfullpath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linkdebug</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_checksum</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_zero_init_bss</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_mergedata</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_usedefaultlibs</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_adddefaultlibs</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_nowarnings</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_verbose</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linkformem</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_codefolding</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_debuginline</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "x86 Project" panel -->
<SETTING><NAME>MWProject_X86_type</NAME><VALUE>Application</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_outfile</NAME><VALUE>noname.exe</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_importlib</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_X86_setimportlibdir</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_dontgenerateimportlib</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_oldformatlib</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_replaceobjextension</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_copyallfiles</NAME><VALUE>false</VALUE></SETTING>
</SETTINGLIST>
<FILELIST>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverLoaderLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>NameRegistryLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>PCILib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>vsprintf.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverDoDriverIO.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverGestaltHandler.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverQDCalls.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuEdid.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuVga.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>LinuxOSI.s</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoDriver.exp</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>MacDriverUtils.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>InterfaceLibForDriverServices</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>MSL_ShLibRuntime_PPC.Lib</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
</FILELIST>
<LINKORDER>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverDoDriverIO.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverGestaltHandler.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverQDCalls.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuVga.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>MacDriverUtils.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>LinuxOSI.s</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>vsprintf.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoDriver.exp</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>PCILib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>NameRegistryLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverLoaderLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>InterfaceLibForDriverServices</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>MSL_ShLibRuntime_PPC.Lib</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
</LINKORDER>
</TARGET>
<TARGET>
<NAME>QemuVGADriver</NAME>
<SETTINGLIST>
<!-- Settings for "Source Trees" panel -->
<SETTING><NAME>UserSourceTrees</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Access Paths" panel -->
<SETTING><NAME>AlwaysSearchUserPaths</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>InterpretDOSAndUnixPaths</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>RequireFrameworkStyleIncludes</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>SourceRelativeIncludes</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>UserSearchPaths</NAME>
<SETTING>
<SETTING><NAME>SearchPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>SearchPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>../shared</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Unix</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
</SETTING>
</SETTING>
<SETTING><NAME>SystemSearchPaths</NAME>
<SETTING>
<SETTING><NAME>SearchPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>CodeWarrior</VALUE></SETTING>
</SETTING>
<SETTING><NAME>Recursive</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>FrameworkPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HostFlags</NAME><VALUE>All</VALUE></SETTING>
</SETTING>
</SETTING>
<!-- Settings for "Debugger Runtime" panel -->
<SETTING><NAME>MWRuntimeSettings_WorkingDirectory</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWRuntimeSettings_CommandLine</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWRuntimeSettings_HostApplication</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWRuntimeSettings_EnvVars</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Target Settings" panel -->
<SETTING><NAME>Linker</NAME><VALUE>MacOS PPC Linker</VALUE></SETTING>
<SETTING><NAME>PreLinker</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PostLinker</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Targetname</NAME><VALUE>QemuVGADriver</VALUE></SETTING>
<SETTING><NAME>OutputDirectory</NAME>
<SETTING><NAME>Path</NAME><VALUE>../builds</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Unix</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>SaveEntriesUsingRelativePaths</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "File Mappings" panel -->
<SETTING><NAME>FileMappings</NAME>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>APPL</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>Appl</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>MMLB</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>MPLF</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Lib Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>MWCD</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>RSRC</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.arr</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.bh</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Balloon Help</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.c</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.c++</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.cc</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.cp</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.cpp</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.exp</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.h</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.pch</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.pch++</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>MW C/C++ PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>C/C++</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.plist</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.r</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>Rez</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE>Rez</VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>TEXT</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.s</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>PPCAsm</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>XCOF</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>docu</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>rsrc</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>shlb</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileType</NAME><VALUE>stub</VALUE></SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>PEF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.doc</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>true</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.o</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE>XCOFF Import PPC</VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.ppob</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
<SETTING>
<SETTING><NAME>FileExtension</NAME><VALUE>.rsrc</VALUE></SETTING>
<SETTING><NAME>Compiler</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>EditLanguage</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>Precompile</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Launchable</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>ResourceFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>IgnoredByMake</NAME><VALUE>false</VALUE></SETTING>
</SETTING>
</SETTING>
<!-- Settings for "Build Extras" panel -->
<SETTING><NAME>CacheModDates</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>DumpBrowserInfo</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>CacheSubprojects</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>UseThirdPartyDebugger</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>BrowserGenerator</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>DebuggerAppPath</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>DebuggerCmdLineArgs</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>DebuggerWorkingDir</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CodeCompletionPrefixFileName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>CodeCompletionMacroFileName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Debugger Target" panel -->
<SETTING><NAME>ConsoleEncoding</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>LogSystemMessages</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>AutoTargetDLLsPopUp</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>StopAtWatchpoints</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PauseWhileRunning</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PauseInterval</NAME><VALUE>5</VALUE></SETTING>
<SETTING><NAME>PauseUIFlags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>AltExePath</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Absolute</VALUE></SETTING>
</SETTING>
<SETTING><NAME>StopAtTempBPOnLaunch</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>CacheSymbolics</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>TempBPFunctionName</NAME><VALUE>main</VALUE></SETTING>
<SETTING><NAME>TempBPType</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "Remote Debug" panel -->
<SETTING><NAME>Enabled</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ConnectionName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>DownloadPath</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>LaunchRemoteApp</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>RemoteAppPath</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>CoreID</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>JTAGClockSpeed</NAME><VALUE>8000</VALUE></SETTING>
<SETTING><NAME>IsMultiCore</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>OSDownload</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>UseGlobalOSDownload</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>OSDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>OSDownloadPath</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>AltDownload</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>AltDownloadConnectionName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Auto-target" panel -->
<SETTING><NAME>OtherExecutables</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Analyzer Connections" panel -->
<SETTING><NAME>AnalyzerConnectionName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Custom Keywords" panel -->
<SETTING><NAME>CustomColor1</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CustomColor2</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CustomColor3</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<SETTING><NAME>CustomColor4</NAME>
<SETTING><NAME>Red</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Green</NAME><VALUE>32767</VALUE></SETTING>
<SETTING><NAME>Blue</NAME><VALUE>0</VALUE></SETTING>
</SETTING>
<!-- Settings for "C/C++ Compiler" panel -->
<SETTING><NAME>MWFrontEnd_C_cplusplus</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_checkprotos</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_arm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_trigraphs</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_onlystdkeywords</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_enumsalwaysint</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_ansistrict</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_wchar_type</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_enableexceptions</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_dontreusestrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_poolstrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_dontinline</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_useRTTI</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_unsignedchars</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_autoinline</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_booltruefalse</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_inlinelevel</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_ecplusplus</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_defer_codegen</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_templateparser</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_c99</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_bottomupinline</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_gcc_extensions</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWFrontEnd_C_instance_manager</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "C/C++ Preprocessor" panel -->
<SETTING><NAME>C_CPP_Preprocessor_EmitFile</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_EmitLine</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_EmitFullPath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_KeepComments</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_PCHUsesPrefixText</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_EmitPragmas</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_KeepWhiteSpace</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_MultiByteEncoding</NAME><VALUE>encAutoDetectMultibyte</VALUE></SETTING>
<SETTING><NAME>C_CPP_Preprocessor_PrefixText</NAME><VALUE>#define DEBUG_OSI</VALUE></SETTING>
<!-- Settings for "C/C++ Warnings" panel -->
<SETTING><NAME>MWWarning_C_warn_illpragma</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_emptydecl</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_possunwant</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_unusedvar</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_unusedarg</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_extracomma</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_pedantic</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warningerrors</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_hidevirtual</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_implicitconv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_notinlined</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_structclass</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_missingreturn</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_no_side_effect</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_resultnotused</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_padding</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_impl_i2f_conv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_impl_f2i_conv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_impl_s2u_conv</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_illtokenpasting</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_filenamecaps</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_filenamecapssystem</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_undefmacro</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWWarning_C_warn_ptrintconv</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "MacOS Merge Panel" panel -->
<SETTING><NAME>MWMerge_MacOS_projectType</NAME><VALUE>Application</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_outputName</NAME><VALUE>Merge Out</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_outputCreator</NAME><VALUE>????</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_outputType</NAME><VALUE>APPL</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_suppressWarning</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_copyFragments</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_copyResources</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_flattenResource</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_flatFileName</NAME><VALUE>a.rsrc</VALUE></SETTING>
<SETTING><NAME>MWMerge_MacOS_flatFileOutputPath</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWMerge_MacOS_skipResources</NAME>
<SETTING><VALUE>DLGX</VALUE></SETTING>
<SETTING><VALUE>ckid</VALUE></SETTING>
<SETTING><VALUE>Proj</VALUE></SETTING>
<SETTING><VALUE>WSPC</VALUE></SETTING>
</SETTING>
<!-- Settings for "Output Flags" panel -->
<SETTING><NAME>FileLocked</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>ResourcesMapIsReadOnly</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PrinterDriverIsMultiFinderCompatible</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Invisible</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasBundle</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>NameLocked</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Stationery</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasCustomIcon</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Shared</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasBeenInited</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>Label</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>Comments</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>HasCustomBadge</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>HasRoutingInfo</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "PPC CodeGen" panel -->
<SETTING><NAME>MWCodeGen_PPC_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_tracebacktables</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_processor</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_function_align</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_tocdata</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_largetoc</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_profiler</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_vectortocdata</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_poolconst</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_peephole</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_linkerpoolsstrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_volatileasm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_schedule</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_altivec</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_altivec_move_block</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_strictIEEEfp</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_fpcontract</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_genfsel</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_PPC_orderedfpcmp</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "PPC CodeGen Mach-O" panel -->
<SETTING><NAME>MWCodeGen_MachO_structalignment</NAME><VALUE>PPC_mw</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_profiler_enum</NAME><VALUE>Off</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_processor</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_function_align</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_common</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_boolisint</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_peephole</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_readonlystrings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_linkerpoolsstrings</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_volatileasm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_schedule</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_altivec</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_vecmove</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_fp_ieee_strict</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_fpcontract</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_genfsel</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_MachO_fp_cmps_ordered</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "PPC Disassembler" panel -->
<SETTING><NAME>MWDisassembler_PPC_showcode</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_extended</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_mix</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_nohex</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_showdata</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_showexceptions</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_showsym</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWDisassembler_PPC_shownames</NAME><VALUE>1</VALUE></SETTING>
<!-- Settings for "PPC Global Optimizer" panel -->
<SETTING><NAME>GlobalOptimizer_PPC_optimizationlevel</NAME><VALUE>Level2</VALUE></SETTING>
<SETTING><NAME>GlobalOptimizer_PPC_optfor</NAME><VALUE>Size</VALUE></SETTING>
<!-- Settings for "PPC Linker" panel -->
<SETTING><NAME>MWLinker_PPC_linksym</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_symfullpath</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_linkmap</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_nolinkwarnings</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_linkmode</NAME><VALUE>Fast</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_code_folding</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_initname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_mainname</NAME><VALUE>DoDriverIO</VALUE></SETTING>
<SETTING><NAME>MWLinker_PPC_termname</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "PPC Mac OS X Linker" panel -->
<SETTING><NAME>MWLinker_MacOSX_linksym</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_symfullpath</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_nolinkwarnings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_linkmap</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_dontdeadstripinitcode</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_permitmultdefs</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_use_objectivec_semantics</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_strip_debug_symbols</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_prebind_all_twolevel_modules</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_data_before_text_segment</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_report_msl_overloads</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_objects_follow_linkorder</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_linkmode</NAME><VALUE>Normal</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_exports</NAME><VALUE>ReferencedGlobals</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_sortcode</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_mainname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_initname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_code_folding</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_MacOSX_stabsgen</NAME><VALUE>None</VALUE></SETTING>
<!-- Settings for "PPC Mac OS X Project" panel -->
<SETTING><NAME>MWProject_MacOSX_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_outfile</NAME><VALUE>video.nw</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_filecreator</NAME><VALUE>PSSD</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_filetype</NAME><VALUE>ndrv</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_vmaddress</NAME><VALUE>4096</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_usedefaultvmaddr</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flatrsrcoutputdir</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWProject_MacOSX_installpath</NAME><VALUE>./</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_dont_prebind</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flat_namespace</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_frameworkversion</NAME><VALUE>A</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_currentversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_flat_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_AddrMode</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_MacOSX_SingleModule</NAME><VALUE>1</VALUE></SETTING>
<!-- Settings for "PPC PEF" panel -->
<SETTING><NAME>MWPEF_exports</NAME><VALUE>File</VALUE></SETTING>
<SETTING><NAME>MWPEF_libfolder</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_sortcode</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWPEF_expandbss</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWPEF_sharedata</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_olddefversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_oldimpversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_currentversion</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWPEF_fragmentname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWPEF_collapsereloads</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "PPC Project" panel -->
<SETTING><NAME>MWProject_PPC_type</NAME><VALUE>SharedLibrary</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_outfile</NAME><VALUE>qemu_vga.ndrv</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_filecreator</NAME><VALUE>PSSD</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_filetype</NAME><VALUE>ndrv</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_size</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_minsize</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_stacksize</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_flags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_symfilename</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcheader</NAME><VALUE>Native</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrctype</NAME><VALUE>????</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcflags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcstore</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_rsrcmerge</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_flatrsrc</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_PPC_flatrsrcoutputdir</NAME>
<SETTING><NAME>Path</NAME><VALUE>:</VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>MWProject_PPC_flatrsrcfilename</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "PPCAsm Panel" panel -->
<SETTING><NAME>MWAssembler_PPC_auxheader</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_symmode</NAME><VALUE>Mac</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_dialect</NAME><VALUE>PPC</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_prefixfile</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_typecheck</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_warnings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWAssembler_PPC_casesensitive</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "Property List" panel -->
<SETTING><NAME>PList_OutputType</NAME><VALUE>File</VALUE></SETTING>
<SETTING><NAME>PList_OutputEncoding</NAME><VALUE>UTF-8</VALUE></SETTING>
<SETTING><NAME>PList_PListVersion</NAME><VALUE>1.0</VALUE></SETTING>
<SETTING><NAME>PList_Prefix</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PList_FileFilename</NAME><VALUE>Info.plist</VALUE></SETTING>
<SETTING><NAME>PList_FileDirectory</NAME>
<SETTING><NAME>Path</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>PathFormat</NAME><VALUE>Unix</VALUE></SETTING>
<SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING>
</SETTING>
<SETTING><NAME>PList_ResourceType</NAME><VALUE>plst</VALUE></SETTING>
<SETTING><NAME>PList_ResourceID</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>PList_ResourceName</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "Rez Compiler" panel -->
<SETTING><NAME>MWRez_Language_maxwidth</NAME><VALUE>80</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_script</NAME><VALUE>Roman</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_alignment</NAME><VALUE>Align1</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_filtermode</NAME><VALUE>FilterSkip</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_suppresswarnings</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_escapecontrolchars</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWRez_Language_prefixname</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWRez_Language_filteredtypes</NAME><VALUE>'CODE' 'DATA' 'PICT'</VALUE></SETTING>
<!-- Settings for "WinRC Compiler" panel -->
<SETTING><NAME>MWWinRC_prefixname</NAME><VALUE></VALUE></SETTING>
<!-- Settings for "x86 CodeGen" panel -->
<SETTING><NAME>MWCodeGen_X86_processor</NAME><VALUE>Generic</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_alignment</NAME><VALUE>bytes8</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_exceptions</NAME><VALUE>ZeroOverhead</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_name_mangling</NAME><VALUE>MWWin32</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_use_extinst</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_mmx</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_3dnow</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_use_mmx_3dnow_convention</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_cmov</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_sse</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_extinst_sse2</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_intrinsics</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_optimizeasm</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_disableopts</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_profile</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_runtime</NAME><VALUE>Custom</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_readonlystrings</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_vectorize</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCodeGen_X86_relaxieee</NAME><VALUE>0</VALUE></SETTING>
<!-- Settings for "x86 COFF" panel -->
<SETTING><NAME>MWLinker_X86_subsysmajorid</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_subsysminorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_opsysmajorid</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_opsysminorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_usrmajorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_usrminorid</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_maxstacksize</NAME><VALUE>1024</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_minstacksize</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_size</NAME><VALUE>1024</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_minsize</NAME><VALUE>4</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_coff_flags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_dll_flags</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_baseaddress</NAME><VALUE>4194304</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_filealign</NAME><VALUE>4096</VALUE></SETTING>
<SETTING><NAME>MWCOFF_X86_sectionalign</NAME><VALUE>4096</VALUE></SETTING>
<!-- Settings for "x86 Disassembler" panel -->
<SETTING><NAME>PDisasmX86_showHeaders</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSectHeaders</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSymTab</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showCode</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showData</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showDebug</NAME><VALUE>false</VALUE></SETTING>O
<SETTING><NAME>PDisasmX86_showExceptions</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showRaw</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showAllRaw</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSource</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showRelocation</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showHex</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showComments</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_showSymDefs</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_unmangle</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_verbose</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_resolveRelocs</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>PDisasmX86_resolveLocals</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "x86 Exceptions Panel" panel -->
<SETTING><NAME>MWDebugger_X86_Exceptions</NAME>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
<SETTING><VALUE>0</VALUE></SETTING>
</SETTING>
<!-- Settings for "x86 Global Optimizer" panel -->
<SETTING><NAME>GlobalOptimizer_X86_optimizationlevel</NAME><VALUE>Level0</VALUE></SETTING>
<SETTING><NAME>GlobalOptimizer_X86_optfor</NAME><VALUE>Speed</VALUE></SETTING>
<!-- Settings for "x86 Linker" panel -->
<SETTING><NAME>MWLinker_X86_entrypointusage</NAME><VALUE>Default</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_entrypoint</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_subsystem</NAME><VALUE>Unknown</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_commandfile</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_generatemap</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linksym</NAME><VALUE>0</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linkCV</NAME><VALUE>1</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_symfullpath</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linkdebug</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_checksum</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_zero_init_bss</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_mergedata</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_usedefaultlibs</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_adddefaultlibs</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_nowarnings</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_verbose</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_linkformem</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_codefolding</NAME><VALUE>None</VALUE></SETTING>
<SETTING><NAME>MWLinker_X86_debuginline</NAME><VALUE>false</VALUE></SETTING>
<!-- Settings for "x86 Project" panel -->
<SETTING><NAME>MWProject_X86_type</NAME><VALUE>Application</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_outfile</NAME><VALUE>noname.exe</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_importlib</NAME><VALUE></VALUE></SETTING>
<SETTING><NAME>MWProject_X86_setimportlibdir</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_dontgenerateimportlib</NAME><VALUE>true</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_oldformatlib</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_replaceobjextension</NAME><VALUE>false</VALUE></SETTING>
<SETTING><NAME>MWProject_X86_copyallfiles</NAME><VALUE>false</VALUE></SETTING>
</SETTINGLIST>
<FILELIST>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverLoaderLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>NameRegistryLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>PCILib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverDoDriverIO.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverGestaltHandler.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverQDCalls.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuEdid.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuVga.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS></FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoDriver.exp</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>MacDriverUtils.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Text</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>InterfaceLibForDriverServices</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
<FILE>
<PATHTYPE>Name</PATHTYPE>
<PATH>MSL_ShLibRuntime_PPC.Lib</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
<FILEKIND>Library</FILEKIND>
<FILEFLAGS>Debug</FILEFLAGS>
</FILE>
</FILELIST>
<LINKORDER>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverLoaderLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>NameRegistryLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>PCILib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverDoDriverIO.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverGestaltHandler.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverQDCalls.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuVga.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuEdid.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoDriver.exp</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>MacDriverUtils.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>InterfaceLibForDriverServices</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>MSL_ShLibRuntime_PPC.Lib</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
</LINKORDER>
</TARGET>
</TARGETLIST>
<TARGETORDER>
<ORDEREDTARGET><NAME>QemuVGADriver</NAME></ORDEREDTARGET>
<ORDEREDTARGET><NAME>QemuVGADriver_DebugOSI</NAME></ORDEREDTARGET>
</TARGETORDER>
<GROUPLIST>
<GROUP><NAME>Util</NAME>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>MacDriverUtils.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
</GROUP>
<GROUP><NAME>Libs</NAME>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverLoaderLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>InterfaceLibForDriverServices</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>NameRegistryLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>PCILib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoDriver.exp</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>VideoServicesLib</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>MSL_ShLibRuntime_PPC.Lib</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
</GROUP>
<GROUP><NAME>Src</NAME>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverGestaltHandler.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverDoDriverIO.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuVga.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<PATHTYPE>Name</PATHTYPE>
<PATH>QemuEdid.c</PATH>
<PATHFORMAT>Unix</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>DriverQDCalls.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
</GROUP>
<GROUP><NAME>LinuxInterface</NAME>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>LinuxOSI.s</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
<FILEREF>
<TARGETNAME>QemuVGADriver_DebugOSI</TARGETNAME>
<PATHTYPE>Name</PATHTYPE>
<PATH>vsprintf.c</PATH>
<PATHFORMAT>MacOS</PATHFORMAT>
</FILEREF>
</GROUP>
</GROUPLIST>
</PROJECT>
a
\ No newline at end of file diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/DriverDoDriverIO.c b/roms/QemuMacDrivers/QemuVGADriver/src/DriverDoDriverIO.c new file mode 100755 index 000000000..d72fd9cdf --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/DriverDoDriverIO.c @@ -0,0 +1,605 @@ +/* Simple PCI video driver for use with Mac-On-Linux emulator + * + * Basically, this driver forward Apple video driver calls to + * the emulator via a fake HW (and later, a "sc" based API). +*/ + +#include "VideoDriverPrivate.h" +#include "VideoDriverPrototypes.h" +#include "DriverQDCalls.h" +#include "QemuVga.h" + +DriverDescription TheDriverDescription = { + /* + * Signature info + */ + kTheDescriptionSignature, /* OSType driverDescSignature */ + kInitialDriverDescriptor, /* DriverDescVersion driverDescVersion */ + QEMU_PCI_VIDEO_NAME, + 0x01, 0x01, + 0, 0, + /* + * DriverOSRuntime driverOSRuntimeInfo + */ + 0 /* RuntimeOptions driverRuntime */ + | (0 * kDriverIsLoadedUponDiscovery) /* Loader runtime options */ + | (1 * kDriverIsOpenedUponLoad) /* Opened when loaded */ + | (1 * kDriverIsUnderExpertControl) /* I/O expert handles loads/opens */ + | (0 * kDriverIsConcurrent) /* concurrent */ + | (0 * kDriverQueuesIOPB), /* Internally queued */ + QEMU_PCI_VIDEO_PNAME, /* Str31 driverName (OpenDriver param) */ + 0, 0, 0, 0, 0, 0, 0, 0, /* UInt32 driverDescReserved[8] */ + /* + * DriverOSService Information. This section contains a vector count followed by + * a vector of structures, each defining a driver service. + */ + 1, /* ServiceCount nServices */ + /* + * DriverServiceInfo service[0] + */ + kServiceCategoryNdrvDriver, /* OSType serviceCategory */ + kNdrvTypeIsVideo, /* OSType serviceType */ + 1, 0, 0, 0 +}; + +/* + * All driver-global information is in a structure defined in NCRDriverPrivate. + * Note that "modern" drivers do not have access to their dce. In native Power PC + * environments, the global world is created by the Code Fragment Manager (hmm, + * perhaps it is created by CFMInitialize). + */ +DriverGlobal gDriverGlobal; + +/* + * DoDriverIO + * + * In the new driver environment, DoDriverIO performs all driver + * functions. It is called with the following parameters: + * IOCommandID A unique reference for this driver request. In + * the emulated environment, this will be the ParamBlkPtr + * passed in from the Device Manager. + * + * IOCommandContents A union structure that contains information for the + * specific request. For the emulated environment, this + * will contain the following: + * Initialize Driver RefNum and the name registry id for this driver. + * Finalize Driver RefNum and the name registry id for this driver. + * Others The ParamBlkPtr + * + * IOCommandCode A switch value that specifies the required function. + * + * IOCommandKind A bit-mask indicating Synchronous, Asynchronous, and Immediate + * + * For Synchronous and Immediate commands, DoDriverIO returns the final status to + * the Device Manager. For Asynchronous commands, DoDriverIO may return kIOBusyStatus. + * If it returns busy status, the driver promises to call IOCommandIsComplete when + * the transaction has completed. + */ +OSStatus +DoDriverIO( AddressSpaceID addressSpaceID, IOCommandID ioCommandID, IOCommandContents ioCommandContents, + IOCommandCode ioCommandCode, IOCommandKind ioCommandKind ) +{ + OSStatus status; + + /* + * Note: Initialize, Open, KillIO, Close, and Finalize are either synchronous + * or immediate. Read, Write, Control, and Status may be immediate, + * synchronous, or asynchronous. + */ + + lprintf("DoDriverIO cmdCode=%d\n", ioCommandCode); + + switch( ioCommandCode ) { + case kInitializeCommand: /* Always immediate */ + status = DriverInitializeCmd(addressSpaceID, ioCommandContents.initialInfo); + CheckStatus(status, "Initialize failed"); + break; + case kFinalizeCommand: /* Always immediate */ + status = DriverFinalizeCmd(ioCommandContents.finalInfo); + break; + case kSupersededCommand: + status = DriverSupersededCmd(ioCommandContents.supersededInfo, FALSE); + break; + case kReplaceCommand: /* replace an old driver */ + status = DriverReplaceCmd(addressSpaceID, ioCommandContents.replaceInfo); + break; + case kOpenCommand: /* Always immediate */ + status = DriverOpenCmd(addressSpaceID, ioCommandContents.pb); + break; + case kCloseCommand: /* Always immediate */ + status = DriverCloseCmd(ioCommandContents.pb); + break; + case kControlCommand: + /* lprintf("kControlCommand\n"); */ + status = DriverControlCmd( addressSpaceID, ioCommandID, ioCommandKind, + (CntrlParam*)ioCommandContents.pb ); + break; + case kStatusCommand: + status = DriverStatusCmd( ioCommandID, ioCommandKind, + (CntrlParam *)ioCommandContents.pb ); + break; + case kReadCommand: + status = DriverReadCmd( addressSpaceID, ioCommandID, ioCommandKind, + ioCommandContents.pb ); + break; + case kWriteCommand: + status = DriverWriteCmd( addressSpaceID, ioCommandID, ioCommandKind, + ioCommandContents.pb); + break; + case kKillIOCommand: /* Always immediate */ + status = DriverKillIOCmd(ioCommandContents.pb); + break; + default: + status = paramErr; + break; + } + lprintf("Completing with status=%d (kind: %x)\n", status, ioCommandKind); + + /* + * Force a valid result for immediate commands -- they must return a valid + * status to the Driver Manager: returning kIOBusyStatus would be a bug.. + * Non-immediate commands return a status from the lower-level routine. If the + * status is kIOBusyStatus, we just return -- an asynchronous I/O completion + * routine will eventually complete the request. If it's some other status, the + * lower-level routine has completed a non-immediate task, so we call + * IOCommandIsComplete and return its (presumably noErr) status. + */ + if( (ioCommandKind & kImmediateIOCommandKind) != 0 ) { + ; /* Immediate commands return the operation status */ + } + else if (status == ioInProgress) { + /* + * An asynchronous operation is in progress. The driver handler promises + * to call IOCommandIsComplete when the operation concludes. + */ + status = noErr; + } else { + /* + * Normal command that completed synchronously. Dequeue the user's + * parameter block. + */ + status = (OSStatus)IOCommandIsComplete(ioCommandID, (OSErr)status); + } + return status; +} + +/* + * DriverInitializeCmd + * + * The New Driver Manager calls this when the driver is first opened. + */ +OSStatus +DriverInitializeCmd( AddressSpaceID addressSpaceID, DriverInitInfoPtr driverInitInfoPtr ) +{ + OSStatus status; + + Trace(DriverInitializeCmd); + + lprintf("** First call:\n"); + lprintf(" DoDriverIO @ %p\n", DoDriverIO); + lprintf(" DriverStatusCmd @ %p\n", DriverStatusCmd); + lprintf(" DriverControlCmd @ %p\n", DriverControlCmd); + + GLOBAL.refNum = driverInitInfoPtr->refNum; + GLOBAL.openCount = 0; + GLOBAL.inInterrupt = false; + GLOBAL.hasTimer = false; + + RegistryEntryIDInit( &GLOBAL.deviceEntry ); + status = RegistryEntryIDCopy( &driverInitInfoPtr->deviceEntry, &GLOBAL.deviceEntry ); + if( status != noErr ) + return status; + + GLOBAL.isOpen = false; + GLOBAL.qdInterruptsEnable = false; + GLOBAL.qdVBLInterrupt = NULL; + + GLOBAL.boardFBAddress = GetDeviceBARAddress(&GLOBAL.deviceEntry, + QEMU_PCI_VIDEO_BASE_REG, + &GLOBAL.boardFBMappedSize, + NULL); + if (GLOBAL.boardFBAddress == NULL) { + status = paramErr; + goto bail; + } + lprintf("boardFBAddress %08lX boardFBMappedSize %08lX\n", + GLOBAL.boardFBAddress, GLOBAL.boardFBMappedSize); + + GLOBAL.boardRegAddress = GetDeviceBARAddress(&GLOBAL.deviceEntry, + QEMU_PCI_VIDEO_MMIO_REG, + &GLOBAL.boardRegMappedSize, + NULL); + if (GLOBAL.boardRegAddress == NULL) { + status = paramErr; + goto bail; + } + lprintf("boardRegAddress %08lX boardRegMappedSize %08lX\n", + GLOBAL.boardRegAddress, GLOBAL.boardRegMappedSize); + + + lprintf("Enabling memory space..\n"); + status = EnablePCIMemorySpace(&GLOBAL.deviceEntry); + if (status != noErr) { + lprintf("EnablePCIMemorySpace returned %d\n", status); + goto bail; + } + + status = QemuVga_Init(); + if (status != noErr) + goto bail; + +bail: + DBG(lprintf("Driver init result: %d\n", status)); + + return status; +} + +/* + * DriverReplaceCmd + * + * We are replacing an existing driver -- or are completing an initialization sequence. + * Retrieve any state information from the Name Registry (we have none), install + * our interrupt handlers, and activate the device. + * + * We don't use the calledFromInitialize parameter, but it's here so that a driver can + * distinguish between initialization (fetch only the NVRAM parameter) and replacement + * (fetch state information that may be left-over from the previous incantation). + */ +OSStatus +DriverReplaceCmd( AddressSpaceID addressSpaceID, DriverReplaceInfoPtr driverReplaceInfoPtr ) +{ + OSStatus status; + + Trace(DriverReplaceCmd); + + GLOBAL.refNum = driverReplaceInfoPtr->refNum; + GLOBAL.deviceEntry = driverReplaceInfoPtr->deviceEntry; + + status = DriverInitializeCmd(addressSpaceID, driverReplaceInfoPtr); + + return status; +} + +/* + * DriverFinalizeCmd + * + * Process a DoDriverIO finalize command. + */ +OSStatus +DriverFinalizeCmd( DriverFinalInfoPtr driverFinalInfoPtr ) +{ + Trace(DriverFinializeCmd); + (void) DriverSupersededCmd((DriverSupersededInfoPtr) driverFinalInfoPtr, TRUE); + return noErr; +} + +/* + * DriverSupersededCmd + * + * We are shutting down, or being replaced by a later driver. Wait for all I/O to + * complete and store volatile state in the Name Registry whree it will be retrieved + * by our replacement. + */ +OSStatus +DriverSupersededCmd( DriverSupersededInfoPtr driverSupersededInfoPtr, Boolean calledFromFinalize ) +{ + Trace(DriverSupersededCmd); + + /* + * This duplicates DriverKillIOCmd, the correct algorithm would wait for + * concurrent I/O to complete. Hmm, what about "infinite wait" I/O, such + * as would be posted by a modem server or socket listener? Note that + * this section needs to be extended to handle all pending requests. + * + * It's safe to call CompleteThisRequest, as that routine uses an atomic + * operation that allows it to be called when no request is pending without + * any possible problems. Since it's a secondary interrupt handler, we + * need to call it through the Driver Services Library. + * + * Warning: GLOBAL.perRequestDataPtr will be NULL if initialization fails + * and the Driver Manager tries to terminate us. When we permit concurrent + * requests, this will loop on all per-request records. + */ + + QemuVga_Exit(); + + RegistryEntryIDDispose( &GLOBAL.deviceEntry ); + + return noErr; +} + +/* + * DriverControlCmd + * + * Process a PBControl command. + */ +OSStatus +DriverControlCmd( AddressSpaceID addressSpaceID, IOCommandID ioCommandID, + IOCommandKind ioCommandKind, CntrlParam *pb ) +{ + OSStatus status; + void *genericPtr; + + /* The 'csParam' field of the 'CntrlParam' stucture is defined as 'short csParam[11]'. This is + * meant for 'operation defined parameters.' For the graphics driver, only the first 4 bytes are + * used. They are used as a pointer to another structure. + * To help code readability, the pointer will be extracted as a generic 'void *' and then cast as + * appropriate. + */ + + genericPtr = (void *) *((UInt32 *) &(pb->csParam[0])); + + Trace(DriverControlCmd); + + switch( pb->csCode ) { + case cscReset: // Old obsolete call..return a 'controlErr' + return controlErr; + break; + + case cscKillIO: // Old obsolete call..do nothing + return noErr; + + case cscSetMode: + status = GraphicsCoreSetMode((VDPageInfo *) genericPtr); + break; + + case cscSetEntries: + status = GraphicsCoreSetEntries((VDSetEntryRecord *) genericPtr); + // if ((status == noErr)&&(GLOBAL.qdDeskServiceCreated)&&(ioCommandKind == kSynchronousIOCommandKind)) + // VSLWaitOnInterruptService(GLOBAL.qdVBLInterrupt, 1000); + break; + + case cscSetGamma: + status = GraphicsCoreSetGamma((VDGammaRecord *) genericPtr); + break; + + case cscGrayPage: + status = GraphicsCoreGrayPage((VDPageInfo *) genericPtr); + break; + + case cscSetGray: + status = GraphicsCoreSetGray((VDGrayRecord *) genericPtr); + break; + + case cscSetInterrupt: + status = GraphicsCoreSetInterrupt((VDFlagRecord *) genericPtr); + break; + + case cscDirectSetEntries: + status = GraphicsCoreDirectSetEntries((VDSetEntryRecord *) genericPtr); + break; + + case cscSetDefaultMode: + return controlErr; + + case cscSwitchMode: + status = GraphicsCoreSwitchMode((VDSwitchInfoRec *) genericPtr); + break; + + case cscSetSync: + status = GraphicsCoreSetSync((VDSyncInfoRec *) genericPtr); + break; + + case cscSavePreferredConfiguration: + status = GraphicsCoreSetPreferredConfiguration((VDSwitchInfoRec *) genericPtr); + break; + + case cscSetHardwareCursor: + status = GraphicsCoreSetHardwareCursor((VDSetHardwareCursorRec *) genericPtr); + break; + + case cscDrawHardwareCursor: + status = GraphicsCoreDrawHardwareCursor((VDDrawHardwareCursorRec *) genericPtr); + break; + case cscSetPowerState: + status = GraphicsCoreSetPowerState((VDPowerStateRec *) genericPtr); + break; + default: + break; + } + if (status) + status = paramErr; + + return status; +} + +/* + * DriverStatusCmd + * + * Process a PBStatus command. We support the driver gestalt call and our private + * debugging commands. + */ +OSStatus +DriverStatusCmd( IOCommandID ioCommandID, IOCommandKind ioCommandKind, CntrlParam *pb ) +{ + OSStatus status; + void *genericPtr; + + /* The 'csParam' field of the 'CntrlParam' stucture is defined as 'short csParam[11]'. This is + * meant for 'operation defined parameters.' For the graphics driver, only the first 4 bytes are + * used. They are used as a pointer to another structure. + * To help code readability, the pointer will be extracted as a generic 'void *' and then cast as + * appropriate. + */ + + genericPtr = (void *) *((UInt32 *) &(pb->csParam[0])); + + Trace(DriverStatusCmd); + lprintf("csCode=%d\n", pb->csCode); + switch( pb->csCode ) { + case cscGetMode: + status = GraphicsCoreGetMode((VDPageInfo *) genericPtr); + break; + + case cscGetEntries: + status = GraphicsCoreGetEntries((VDSetEntryRecord *) genericPtr); + break; + + case cscGetPages: + status = GraphicsCoreGetPages((VDPageInfo *) genericPtr); + break; + + case cscGetBaseAddr: + status = GraphicsCoreGetBaseAddress((VDPageInfo *) genericPtr); + break; + + case cscGetGray: + status = GraphicsCoreGetGray((VDGrayRecord *) genericPtr); + break; + + case cscGetInterrupt: + status = GraphicsCoreGetInterrupt((VDFlagRecord *) genericPtr); + break; + + case cscGetGamma: + status = GraphicsCoreGetGamma((VDGammaRecord *) genericPtr); + break; + + case cscGetDefaultMode: + status = statusErr; + break; + + case cscGetCurMode: + status = GraphicsCoreGetCurrentMode((VDSwitchInfoRec *) genericPtr); + break; + + case cscGetSync: + status = GraphicsCoreGetSync((VDSyncInfoRec *) genericPtr); + break; + + case cscGetConnection: + status = GraphicsCoreGetConnection((VDDisplayConnectInfoRec *) genericPtr); + break; + + case cscGetModeTiming: + status = GraphicsCoreGetModeTiming((VDTimingInfoRec *) genericPtr); + break; + + case cscGetPreferredConfiguration: + status = GraphicsCoreGetPreferredConfiguration((VDSwitchInfoRec *) genericPtr); + break; + + case cscGetNextResolution: + status = GraphicsCoreGetNextResolution((VDResolutionInfoRec *) genericPtr); + break; + + case cscGetVideoParameters: + status = GraphicsCoreGetVideoParams((VDVideoParametersInfoRec *) genericPtr); + break; + + case cscGetGammaInfoList: + status = GraphicsCoreGetGammaInfoList((VDGetGammaListRec *) genericPtr); + break; + + case cscRetrieveGammaTable: + status = GraphicsCoreRetrieveGammaTable((VDRetrieveGammaRec *) genericPtr); + break; + + case cscSupportsHardwareCursor: + status = GraphicsCoreSupportsHardwareCursor((VDSupportsHardwareCursorRec *) genericPtr); + break; + + case cscGetHardwareCursorDrawState: + status = GraphicsCoreGetHardwareCursorDrawState((VDHardwareCursorDrawStateRec *) genericPtr); + break; + + case kDriverGestaltCode: + status = DriverGestaltHandler(pb); + break; + + case cscGetPowerState: + status = GraphicsCoreGetPowerState((VDPowerStateRec *) genericPtr); + break; + case cscGetClutBehavior: + *(VDClutBehaviorPtr)genericPtr = kSetClutAtSetEntries; + status = noErr; + break; + default: + return statusErr; + } + if (status) + status = paramErr; + + return status; +} + +/* + * DriverKillIOCmd stops all I/O for this chip. It's a big hammer, use it wisely. + * This will need revision when we support concurrent I/O as we must stop all + * pending requests. + */ +OSStatus +DriverKillIOCmd( ParmBlkPtr pb ) +{ +#define REQUEST (GLOBAL.perRequestData) + + Trace(DriverKillIOCmd); + return noErr; +#undef REQUEST +} + +/* + * DriverReadCmd + * + * The caller passes the data buffer and buffer length in the IOParam record and + * a pointer to a SCSI NCRSCSIParam in the ioMisc field. + */ +OSStatus +DriverReadCmd( AddressSpaceID addressSpaceID, IOCommandID ioCommandID, + IOCommandKind ioCommandKind, ParmBlkPtr pb ) +{ + Trace(DriverReadCmd); + return paramErr; +} + + +/* + * DriverWriteCmd + * + * The caller passes the data buffer and buffer length in the IOParam record and + * a pointer to a SCSI NCRSCSIParam in the ioMisc field. + */ +OSStatus +DriverWriteCmd( AddressSpaceID addressSpaceID, IOCommandID ioCommandID, + IOCommandKind ioCommandKind, ParmBlkPtr pb ) +{ + Trace(DriverWriteCmd); + return paramErr; +} + +/* + * DriverCloseCmd does nothing.. + */ +OSStatus +DriverCloseCmd( ParmBlkPtr pb ) +{ + Trace(DriverCloseCmd); + + if( !GLOBAL.openCount ) + return notOpenErr; + + GLOBAL.openCount--; + + if (!GLOBAL.openCount) + QemuVga_Close(); + + return noErr; +} + +/* + * DriverOpenCmd does nothing: remember that many applications will open a device, but + * never close it.. + */ +OSStatus +DriverOpenCmd( AddressSpaceID addressSpaceID, ParmBlkPtr pb ) +{ + Trace(DriverOpenCmd); + + GLOBAL.openCount++; + if (GLOBAL.openCount == 1) + QemuVga_Open(); + + return noErr; +} + + diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/DriverGestaltHandler.c b/roms/QemuMacDrivers/QemuVGADriver/src/DriverGestaltHandler.c new file mode 100755 index 000000000..84189e0f0 --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/DriverGestaltHandler.c @@ -0,0 +1,50 @@ +#include "VideoDriverPrivate.h" +#include "VideoDriverPrototypes.h" + +/* + * Called on PBStatus, csCode = 43 + */ +OSStatus +DriverGestaltHandler( CntrlParam *pb ) +{ +#define PB (*((DriverGestaltParam *) pb)) +#define OPTIONS (TheDriverDescription.driverOSRuntimeInfo) + + OSStatus status; + Trace(DriverGestaltHandler); + + PB.driverGestaltResponse = 0; + status = noErr; + + lprintf("DriverGestalt, selector=%c%c%c%c\n", + PB.driverGestaltSelector >> 24, + (PB.driverGestaltSelector >> 16) & 0xff, + (PB.driverGestaltSelector >> 8) & 0xff, + (PB.driverGestaltSelector ) & 0xff); + switch( PB.driverGestaltSelector ) { + case kdgSync: + PB.driverGestaltResponse = FALSE; /* We handle asynchronous I/O */ + break; + case kdgVersion: + PB.driverGestaltResponse = + *((UInt32 *) &TheDriverDescription.driverType.version); + break; + case kdgDeviceType: + PB.driverGestaltResponse = 'QEMU'; + break; + case kdgInterface: + PB.driverGestaltResponse = 'pci '; + break; + case kdgSupportsSwitching: /* Support Power up/down switching? */ + PB.driverGestaltResponse = FALSE; /* Not supported yet */ + break; + case kdgSupportsPowerCtl: /* TRUE if in high-power mode */ + PB.driverGestaltResponse = FALSE; /* Power-switching is not supported */ + break; + default: + status = statusErr; + break; + } + return status; +#undef PB +} diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/DriverQDCalls.c b/roms/QemuMacDrivers/QemuVGADriver/src/DriverQDCalls.c new file mode 100644 index 000000000..fdfc043ec --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/DriverQDCalls.c @@ -0,0 +1,622 @@ +#include "VideoDriverPrivate.h" +#include "VideoDriverPrototypes.h" +#include "DriverQDCalls.h" +#include "QemuVga.h" + +#define MAX_DEPTH_MODE kDepthMode3 + +static UInt8 DepthToDepthMode(UInt8 depth) +{ + switch (depth) { + case 8: + return kDepthMode1; + case 15: + case 16: + return kDepthMode2; + case 24: + case 32: + return kDepthMode3; + default: + return kDepthMode1; + } +} + +static UInt8 DepthModeToDepth(UInt8 mode) +{ + switch (mode) { + case kDepthMode1: + return 8; + case kDepthMode2: + return 15; + case kDepthMode3: + return 32; + default: + return 8; + } +} + +/************************ Color Table Stuff ****************************/ + +static OSStatus +GraphicsCoreDoSetEntries(VDSetEntryRecord *entryRecord, Boolean directDevice, UInt32 start, UInt32 stop, Boolean useValue) +{ + UInt32 i; + + CHECK_OPEN( controlErr ); + if (GLOBAL.depth != 8) + return controlErr; + if (NULL == entryRecord->csTable) + return controlErr; + + /* Note that stop value is included in the range */ + for(i=start;i<=stop;i++) { + UInt32 colorIndex = useValue ? entryRecord->csTable[i].value : i; + QemuVga_SetColorEntry(colorIndex, &entryRecord->csTable[i].rgb); + } + + return noErr; +} + +OSStatus +GraphicsCoreSetEntries(VDSetEntryRecord *entryRecord) +{ + Boolean useValue = (entryRecord->csStart < 0); + UInt32 start = useValue ? 0UL : (UInt32)entryRecord->csStart; + UInt32 stop = start + entryRecord->csCount; + + Trace(GraphicsCoreSetEntries); + + return GraphicsCoreDoSetEntries(entryRecord, false, start, stop, useValue); +} + +OSStatus +GraphicsCoreDirectSetEntries(VDSetEntryRecord *entryRecord) +{ + Boolean useValue = (entryRecord->csStart < 0); + UInt32 start = useValue ? 0 : entryRecord->csStart; + UInt32 stop = start + entryRecord->csCount; + + Trace(GraphicsCoreDirectSetEntries); + + return GraphicsCoreDoSetEntries(entryRecord, true, start, stop, useValue); +} + +OSStatus +GraphicsCoreGetEntries(VDSetEntryRecord *entryRecord) +{ + Boolean useValue = (entryRecord->csStart < 0); + UInt32 start = useValue ? 0UL : (UInt32)entryRecord->csStart; + UInt32 stop = start + entryRecord->csCount; + UInt32 i; + + Trace(GraphicsCoreGetEntries); + + if (GLOBAL.depth != 8) + return controlErr; + for(i=start;i<=stop;i++) { + UInt32 colorIndex = useValue ? entryRecord->csTable[i].value : i; + QemuVga_GetColorEntry(colorIndex, &entryRecord->csTable[i].rgb); + } + + return noErr; +} + +/************************ Gamma ****************************/ + +OSStatus +GraphicsCoreSetGamma(VDGammaRecord *gammaRec) +{ + CHECK_OPEN( controlErr ); + + return noErr; +} + +OSStatus +GraphicsCoreGetGammaInfoList(VDGetGammaListRec *gammaList) +{ + Trace(GraphicsCoreGammaInfoList); + + return statusErr; +} + +OSStatus +GraphicsCoreRetrieveGammaTable(VDRetrieveGammaRec *gammaRec) +{ + Trace(GraphicsCoreRetrieveGammaTable); + + return statusErr; +} + +OSStatus +GraphicsCoreGetGamma(VDGammaRecord *gammaRecord) +{ + CHECK_OPEN( statusErr ); + + Trace(GraphicsCoreGetGamma); + + gammaRecord->csGTable = NULL; + + return noErr; +} + + +/************************ Gray pages ****************************/ + +OSStatus +GraphicsCoreGrayPage(VDPageInfo *pageInfo) +{ + UInt32 pageCount; + + CHECK_OPEN( controlErr ); + + Trace(GraphicsCoreGrayPage); + + QemuVga_GetModePages(GLOBAL.curMode, GLOBAL.depth, NULL, &pageCount); + if (pageInfo->csPage >= pageCount) + return paramErr; + + /* XXX Make it gray ! */ + return noErr; +} + +OSStatus +GraphicsCoreSetGray(VDGrayRecord *grayRecord) +{ + CHECK_OPEN( controlErr ); + + Trace(GraphicsCoreSetGray); + + GLOBAL.qdLuminanceMapping = grayRecord->csMode; + return noErr; +} + + +OSStatus +GraphicsCoreGetPages(VDPageInfo *pageInfo) +{ + UInt32 pageCount, depth; + + CHECK_OPEN( statusErr ); + + Trace(GraphicsCoreGetPages); + + depth = DepthModeToDepth(pageInfo->csMode); + QemuVga_GetModePages(GLOBAL.curMode, depth, NULL, &pageCount); + pageInfo->csPage = pageCount; + + return noErr; +} + + +OSStatus +GraphicsCoreGetGray(VDGrayRecord *grayRecord) +{ + CHECK_OPEN( statusErr ); + + Trace(GraphicsCoreGetGray); + + grayRecord->csMode = (GLOBAL.qdLuminanceMapping); + + return noErr; +} + +/************************ Hardware Cursor ****************************/ + +OSStatus +GraphicsCoreSupportsHardwareCursor(VDSupportsHardwareCursorRec *hwCursRec) +{ + CHECK_OPEN( statusErr ); + + Trace(GraphicsCoreSupportsHardwareCursor); + + hwCursRec->csReserved1 = 0; + hwCursRec->csReserved2 = 0; + + hwCursRec->csSupportsHardwareCursor = false; + + return noErr; +} + +OSStatus +GraphicsCoreSetHardwareCursor(VDSetHardwareCursorRec *setHwCursRec) +{ + Trace(GraphicsCoreSetHardwareCursor); + + return controlErr; +} + +OSStatus +GraphicsCoreDrawHardwareCursor(VDDrawHardwareCursorRec *drawHwCursRec) +{ + Trace(GraphicsCoreDrawHardwareCursor); + + return controlErr; +} + +OSStatus +GraphicsCoreGetHardwareCursorDrawState(VDHardwareCursorDrawStateRec *hwCursDStateRec) +{ + Trace(GraphicsCoreGetHardwareCursorDrawState); + + return statusErr; +} + +/************************ Misc ****************************/ + +OSStatus +GraphicsCoreSetInterrupt(VDFlagRecord *flagRecord) +{ + CHECK_OPEN( controlErr ); + + Trace(GraphicsCoreSetInterrupt); + + if (!flagRecord->csMode) + QemuVga_EnableInterrupts(); + else + QemuVga_DisableInterrupts(); + + return noErr; +} + +OSStatus +GraphicsCoreGetInterrupt(VDFlagRecord *flagRecord) +{ + Trace(GraphicsCoreGetInterrupt); + + CHECK_OPEN( statusErr ); + + flagRecord->csMode = !GLOBAL.qdInterruptsEnable; + return noErr; +} + +OSStatus +GraphicsCoreSetSync(VDSyncInfoRec *syncInfo) +{ + UInt8 sync, mask; + + Trace(GraphicsCoreSetSync); + + CHECK_OPEN( controlErr ); + + sync = syncInfo->csMode; + mask = syncInfo->csFlags; + + /* Unblank shortcut */ + if (sync == 0 && mask == 0) { + sync = 0; + mask = kDPMSSyncMask; + } + /* Blank shortcut */ + if (sync == 0xff && mask == 0xff) { + sync = 0x7; + mask = kDPMSSyncMask; + } + + lprintf("SetSync req: sync=%x mask=%x\n", sync, mask); + + /* Only care about the DPMS mode */ + if ((mask & kDPMSSyncMask) == 0) + return noErr; + + /* If any sync is disabled, blank */ + if (sync & kDPMSSyncMask) + QemuVga_Blank(true); + else + QemuVga_Blank(false); + + return noErr; +} + +OSStatus +GraphicsCoreGetSync(VDSyncInfoRec *syncInfo) +{ + Trace(GraphicsCoreGetSync); + + if (syncInfo->csMode == 0xff) { + /* Return HW caps */ + syncInfo->csMode = (1 << kDisableHorizontalSyncBit) | + (1 << kDisableVerticalSyncBit) | + (1 << kDisableCompositeSyncBit) | + (1 << kNoSeparateSyncControlBit); + } else if (syncInfo->csMode == 0x00){ + syncInfo->csMode = GLOBAL.blanked ? kDPMSSyncMask : 0; + } else + return statusErr; + + syncInfo->csFlags = 0; + + return noErr; +} + +OSStatus +GraphicsCoreSetPowerState(VDPowerStateRec *powerStateRec) +{ + Trace(GraphicsCoreSetPowerState); + + return paramErr; +} + +OSStatus +GraphicsCoreGetPowerState(VDPowerStateRec *powerStateRec) +{ + Trace(GraphicsCoreGetPowerState); + + return paramErr; +} + +OSStatus +GraphicsCoreSetPreferredConfiguration(VDSwitchInfoRec *switchInfo) +{ + Trace(GraphicsCoreSetPreferredConfiguration); + + CHECK_OPEN( controlErr ); + + return noErr; +} + + +OSStatus +GraphicsCoreGetPreferredConfiguration(VDSwitchInfoRec *switchInfo) +{ + Trace(GraphicsCoreGetPreferredConfiguration); + + CHECK_OPEN( statusErr ); + + switchInfo->csMode = DepthToDepthMode(GLOBAL.bootDepth); + switchInfo->csData = GLOBAL.bootMode + 1; /* Modes are 1 based */ + switchInfo->csPage = 0; + switchInfo->csBaseAddr = FB_START; + + return noErr; +} + +// €***************** Misc status calls *********************/ + +OSStatus +GraphicsCoreGetBaseAddress(VDPageInfo *pageInfo) +{ + UInt32 pageCount, pageSize; + + Trace(GraphicsCoreGetBaseAddress); + + CHECK_OPEN( statusErr ); + + QemuVga_GetModePages(GLOBAL.curMode, GLOBAL.depth, &pageSize, &pageCount); + if (pageInfo->csPage >= pageCount) + return paramErr; + + pageInfo->csBaseAddr = FB_START + pageInfo->csPage * pageSize; + + return noErr; +} + +OSStatus +GraphicsCoreGetConnection(VDDisplayConnectInfoRec *connectInfo) +{ + Trace(GraphicsCoreGetConnection); + + CHECK_OPEN( statusErr ); + + connectInfo->csDisplayType = kVGAConnect; + connectInfo->csConnectTaggedType = 0; + connectInfo->csConnectTaggedData = 0; + + connectInfo->csConnectFlags = + (1 << kTaggingInfoNonStandard) | (1 << kUncertainConnection); + + connectInfo->csDisplayComponent = 0; + + return noErr; +} + +OSStatus +GraphicsCoreGetMode(VDPageInfo *pageInfo) +{ + Trace(GraphicsCoreGetMode); + + CHECK_OPEN( statusErr ); + + pageInfo->csMode = DepthToDepthMode(GLOBAL.depth); + pageInfo->csPage = GLOBAL.curPage; + pageInfo->csBaseAddr = GLOBAL.curBaseAddress; + + return noErr; +} + +OSStatus +GraphicsCoreGetCurrentMode(VDSwitchInfoRec *switchInfo) +{ + Trace(GraphicsCoreGetCurrentMode); + + CHECK_OPEN( statusErr ); + + //lprintf("GetCurrentMode\n"); + switchInfo->csMode = DepthToDepthMode(GLOBAL.depth); + switchInfo->csData = GLOBAL.curMode + 1; + switchInfo->csPage = GLOBAL.curPage; + switchInfo->csBaseAddr = GLOBAL.curBaseAddress; + + return noErr; +} + +/********************** Video mode *****************************/ + +OSStatus +GraphicsCoreGetModeTiming(VDTimingInfoRec *timingInfo) +{ + Trace(GraphicsCoreGetModeTiming); + + CHECK_OPEN( statusErr ); + + if (timingInfo->csTimingMode < 1 || timingInfo->csTimingMode > GLOBAL.numModes ) + return paramErr; + + timingInfo->csTimingFlags = + (1 << kModeValid) | (1 << kModeDefault) | (1 <<kModeSafe); + + timingInfo->csTimingFormat = kDeclROMtables; + timingInfo->csTimingData = timingVESA_640x480_60hz; + + return noErr; +} + + +OSStatus +GraphicsCoreSetMode(VDPageInfo *pageInfo) +{ + UInt32 newDepth, newPage, pageCount; + + Trace(GraphicsCoreSetMode); + + CHECK_OPEN(controlErr); + + newDepth = DepthModeToDepth(pageInfo->csMode); + newPage = pageInfo->csPage; + QemuVga_GetModePages(GLOBAL.curMode, newDepth, NULL, &pageCount); + + lprintf("Requested depth=%d page=%d\n", newDepth, newPage); + if (pageInfo->csPage >= pageCount) + return paramErr; + + if (newDepth != GLOBAL.depth || newPage != GLOBAL.curPage) + QemuVga_SetMode(GLOBAL.curMode, newDepth, newPage); + + pageInfo->csBaseAddr = GLOBAL.curBaseAddress; + lprintf("Returning BA: %lx\n", pageInfo->csBaseAddr); + + return noErr; +} + + +OSStatus +GraphicsCoreSwitchMode(VDSwitchInfoRec *switchInfo) +{ + UInt32 newMode, newDepth, newPage, pageCount; + + Trace(GraphicsCoreSwitchMode); + + CHECK_OPEN(controlErr); + + newMode = switchInfo->csData - 1; + newDepth = DepthModeToDepth(switchInfo->csMode); + newPage = switchInfo->csPage; + QemuVga_GetModePages(GLOBAL.curMode, newDepth, NULL, &pageCount); + + if (newPage >= pageCount) + return paramErr; + + if (newMode != GLOBAL.curMode || newDepth != GLOBAL.depth || + newPage != GLOBAL.curPage) { + if (QemuVga_SetMode(newMode, newDepth, newPage)) + return controlErr; + } + switchInfo->csBaseAddr = GLOBAL.curBaseAddress; + + return noErr; +} + +OSStatus +GraphicsCoreGetNextResolution(VDResolutionInfoRec *resInfo) +{ + UInt32 width, height; + int id = resInfo->csPreviousDisplayModeID; + + Trace(GraphicsCoreGetNextResolution); + + CHECK_OPEN(statusErr); + + if (id == kDisplayModeIDFindFirstResolution) + id = 0; + else if (id == kDisplayModeIDCurrent) + id = GLOBAL.curMode; + id++; + + if (id == GLOBAL.numModes + 1) { + resInfo->csDisplayModeID = kDisplayModeIDNoMoreResolutions; + return noErr; + } + if (id < 1 || id > GLOBAL.numModes) + return paramErr; + + if (QemuVga_GetModeInfo(id - 1, &width, &height)) + return paramErr; + + resInfo->csDisplayModeID = id; + resInfo->csHorizontalPixels = width; + resInfo->csVerticalLines = height; + resInfo->csRefreshRate = 60; + resInfo->csMaxDepthMode = MAX_DEPTH_MODE; /* XXX Calculate if it fits ! */ + + return noErr; +} + +// Looks quite a bit hard-coded, isn't it ? +OSStatus +GraphicsCoreGetVideoParams(VDVideoParametersInfoRec *videoParams) +{ + UInt32 width, height, depth, rowBytes, pageCount; + OSStatus err = noErr; + + Trace(GraphicsCoreGetVideoParams); + + CHECK_OPEN(statusErr); + + if (videoParams->csDisplayModeID < 1 || videoParams->csDisplayModeID > GLOBAL.numModes) + return paramErr; + if (videoParams->csDepthMode > MAX_DEPTH_MODE) + return paramErr; + if (QemuVga_GetModeInfo(videoParams->csDisplayModeID - 1, &width, &height)) + return paramErr; + + depth = DepthModeToDepth(videoParams->csDepthMode); + QemuVga_GetModePages(videoParams->csDisplayModeID - 1, depth, NULL, &pageCount); + videoParams->csPageCount = pageCount; + lprintf("Video Params says %d pages\n", pageCount); + + rowBytes = width * ((depth + 7) / 8); + (videoParams->csVPBlockPtr)->vpBaseOffset = 0; // For us, it's always 0 + (videoParams->csVPBlockPtr)->vpBounds.top = 0; // Always 0 + (videoParams->csVPBlockPtr)->vpBounds.left = 0; // Always 0 + (videoParams->csVPBlockPtr)->vpVersion = 0; // Always 0 + (videoParams->csVPBlockPtr)->vpPackType = 0; // Always 0 + (videoParams->csVPBlockPtr)->vpPackSize = 0; // Always 0 + (videoParams->csVPBlockPtr)->vpHRes = 0x00480000; // Hard coded to 72 dpi + (videoParams->csVPBlockPtr)->vpVRes = 0x00480000; // Hard coded to 72 dpi + (videoParams->csVPBlockPtr)->vpPlaneBytes = 0; // Always 0 + (videoParams->csVPBlockPtr)->vpBounds.bottom = height; + (videoParams->csVPBlockPtr)->vpBounds.right = width; + (videoParams->csVPBlockPtr)->vpRowBytes = rowBytes; + + switch (depth) { + case 8: + videoParams->csDeviceType = clutType; + (videoParams->csVPBlockPtr)->vpPixelType = 0; + (videoParams->csVPBlockPtr)->vpPixelSize = 8; + (videoParams->csVPBlockPtr)->vpCmpCount = 1; + (videoParams->csVPBlockPtr)->vpCmpSize = 8; + (videoParams->csVPBlockPtr)->vpPlaneBytes = 0; + break; + case 15: + case 16: + videoParams->csDeviceType = directType; + (videoParams->csVPBlockPtr)->vpPixelType = 16; + (videoParams->csVPBlockPtr)->vpPixelSize = 16; + (videoParams->csVPBlockPtr)->vpCmpCount = 3; + (videoParams->csVPBlockPtr)->vpCmpSize = 5; + (videoParams->csVPBlockPtr)->vpPlaneBytes = 0; + break; + case 32: + videoParams->csDeviceType = directType; + (videoParams->csVPBlockPtr)->vpPixelType = 16; + (videoParams->csVPBlockPtr)->vpPixelSize = 32; + (videoParams->csVPBlockPtr)->vpCmpCount = 3; + (videoParams->csVPBlockPtr)->vpCmpSize = 8; + (videoParams->csVPBlockPtr)->vpPlaneBytes = 0; + break; + default: + err = paramErr; + break; + } + + return err; +} diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/DriverQDCalls.h b/roms/QemuMacDrivers/QemuVGADriver/src/DriverQDCalls.h new file mode 100644 index 000000000..cca4d28e6 --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/DriverQDCalls.h @@ -0,0 +1,42 @@ +#ifndef _DRIVER_QD_CALLS_H__ +#define _DRIVER_QD_CALLS_H__ + +// ###ÊCONTROL ROUTINES ### + +OSStatus GraphicsCoreSetMode(VDPageInfo *pageInfo); +OSStatus GraphicsCoreSetEntries(VDSetEntryRecord *entryRecord); +OSStatus GraphicsCoreSetGamma(VDGammaRecord *gammaRec); +OSStatus GraphicsCoreGrayPage(VDPageInfo *pageInfo); +OSStatus GraphicsCoreSetGray(VDGrayRecord *grayRecord); +OSStatus GraphicsCoreSetInterrupt(VDFlagRecord *flagRecord); +OSStatus GraphicsCoreDirectSetEntries(VDSetEntryRecord *entryRecord); +OSStatus GraphicsCoreSwitchMode(VDSwitchInfoRec *switchInfo); +OSStatus GraphicsCoreSetSync(VDSyncInfoRec *syncInfo); +OSStatus GraphicsCoreSetPreferredConfiguration(VDSwitchInfoRec *switchInfo); +OSStatus GraphicsCoreSetHardwareCursor(VDSetHardwareCursorRec *setHwCursRec); +OSStatus GraphicsCoreDrawHardwareCursor(VDDrawHardwareCursorRec *drawHwCursRec); +OSStatus GraphicsCoreSetPowerState(VDPowerStateRec * powerStateRec); + +// ### STATUS ROUTINES ### + +OSStatus GraphicsCoreGetMode(VDPageInfo *pageInfo); +OSStatus GraphicsCoreGetEntries(VDSetEntryRecord *entryRecord); +OSStatus GraphicsCoreGetPages(VDPageInfo *pageInfo); +OSStatus GraphicsCoreGetBaseAddress(VDPageInfo *pageInfo); +OSStatus GraphicsCoreGetGray(VDGrayRecord *grayRecord); +OSStatus GraphicsCoreGetInterrupt(VDFlagRecord *flagRecord); +OSStatus GraphicsCoreGetGamma(VDGammaRecord *gammaRecord); +OSStatus GraphicsCoreGetCurrentMode(VDSwitchInfoRec *switchInfo); +OSStatus GraphicsCoreGetSync(VDSyncInfoRec *syncInfo); +OSStatus GraphicsCoreGetConnection(VDDisplayConnectInfoRec *connectInfo); +OSStatus GraphicsCoreGetModeTiming(VDTimingInfoRec *timingInfo); +OSStatus GraphicsCoreGetPreferredConfiguration(VDSwitchInfoRec *switchInfo); +OSStatus GraphicsCoreGetNextResolution(VDResolutionInfoRec *resInfo); +OSStatus GraphicsCoreGetVideoParams(VDVideoParametersInfoRec *videoParams); +OSStatus GraphicsCoreGetGammaInfoList(VDGetGammaListRec *gammaList); +OSStatus GraphicsCoreRetrieveGammaTable(VDRetrieveGammaRec *gammaRec); +OSStatus GraphicsCoreSupportsHardwareCursor(VDSupportsHardwareCursorRec *hwCursRec); +OSStatus GraphicsCoreGetHardwareCursorDrawState(VDHardwareCursorDrawStateRec *hwCursDStateRec); +OSStatus GraphicsCoreGetPowerState(VDPowerStateRec * powerStateRec); + +#endif /* DRIVER_QD_CALLS */ diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/QemuEdid.c b/roms/QemuMacDrivers/QemuVGADriver/src/QemuEdid.c new file mode 100644 index 000000000..57de244a3 --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/QemuEdid.c @@ -0,0 +1 @@ +#include <Video.h>
#include "VideoDriverPrivate.h"
#include "logger.h"
#include "QemuVga.h"
/* List of video modes */
struct vMode *vModes;
/* Default modes if no EDID (must be 0 terminated) */
static struct _vMode defaultVModes[] = {
{ 640, 480 },
{ 800, 600 },
{ 1024, 768 },
{ 1280, 1024 },
{ 1600, 1200 },
{ 1920, 1080 },
{ 1920, 1200 },
};
/* EDID standard timings */
static struct _vMode edidStdVModes[] = {
{ 800, 600 }, /* 800x600 @ 60Hz */
{ 800, 600 }, /* 800x600 @ 56Hz */
{ 640, 480 }, /* 640x480 @ 75Hz */
{ 640, 480 }, /* 640x480 @ 72Hz */
{ 640, 480 }, /* 640x480 @ 67Hz */
{ 640, 480 }, /* 640x480 @ 60Hz */
{ 720, 400 }, /* 720x400 @ 88Hz */
{ 720, 400 }, /* 720x400 @ 70Hz */
{ 1280, 1024 }, /* 1280x1024 @ 75Hz */
{ 1024, 768 }, /* 1024x768 @ 75Hz */
{ 1024, 768 }, /* 1024x768 @ 72Hz */
{ 1024, 768 }, /* 1024x768 @ 60Hz */
{ 1024, 768 }, /* 1024x768 @ 87Hz */
{ 832, 624 }, /* 832x624 @ 75Hz */
{ 800, 600 }, /* 800x600 @ 75Hz */
{ 800, 600 }, /* 800x600 @ 72Hz */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 1152, 870 }, /* 1152x870 @ 75Hz */
};
/* EDID extended standard timings */
static struct _vMode edidExtStdVModes[] = {
{ 1152, 864 }, /* 1152x864 @ 85Hz */
{ 1024, 768 }, /* 1024x768 @ 75Hz */
{ 800, 600 }, /* 800x600 @ 85Hz */
{ 848, 480 }, /* 848x480 @ 60Hz */
{ 640, 480 }, /* 640x480 @ 85Hz */
{ 720, 400 }, /* 720x400 @ 85Hz */
{ 640, 400 }, /* 640x400 @ 85Hz */
{ 640, 350 }, /* 640x350 @ 85Hz */
{ 1280, 1024 }, /* 1280x1024 @ 85Hz */
{ 1280, 1024 }, /* 1280x1024 @ 60Hz */
{ 1280, 960 }, /* 1280x960 @ 85Hz */
{ 1280, 960 }, /* 1280x960 @ 60Hz */
{ 1280, 768 }, /* 1280x768 @ 85Hz */
{ 1280, 768 }, /* 1280x768 @ 75Hz */
{ 1280, 768 }, /* 1280x768 @ 60Hz */
{ 1280, 768 }, /* 1280x768 @ 60Hz (CVT-RB) */
{ 1440, 1050 }, /* 1440x1050 @ 75Hz */
{ 1440, 1050 }, /* 1440x1050 @ 60Hz */
{ 1440, 1050 }, /* 1440x1050 @ 60Hz (CVT-RB) */
{ 1440, 900 }, /* 1440x900 @ 85Hz */
{ 1440, 900 }, /* 1440x900 @ 75Hz */
{ 1440, 900 }, /* 1440x900 @ 60Hz (CVT-RB) */
{ 1360, 768 }, /* 1360x768 @ 60Hz */
{ 1360, 768 }, /* 1360x768 @ 60Hz (CVT-RB) */
{ 1600, 1200 }, /* 1600x1200 @ 70Hz */
{ 1600, 1200 }, /* 1600x1200 @ 65Hz */
{ 1600, 1200 }, /* 1600x1200 @ 60Hz */
{ 1680, 1050 }, /* 1680x1050 @ 85Hz */
{ 1680, 1050 }, /* 1680x1050 @ 75Hz */
{ 1680, 1050 }, /* 1680x1050 @ 60Hz */
{ 1680, 1050 }, /* 1680x1050 @ 60Hz (CVT-RB) */
{ 1440, 1050 }, /* 1440x1050 @ 85Hz */
{ 1920, 1200 }, /* 1920x1200 @ 60Hz */
{ 1920, 1200 }, /* 1920x1200 @ 60Hz (CVT-RB) */
{ 1856, 1392 }, /* 1856x1392 @ 75Hz */
{ 1856, 1392 }, /* 1856x1392 @ 60Hz */
{ 1792, 1344 }, /* 1792x1344 @ 75Hz */
{ 1792, 1344 }, /* 1792x1344 @ 60Hz */
{ 1600, 1200 }, /* 1600x1200 @ 85Hz */
{ 1600, 1200 }, /* 1600x1200 @ 75Hz */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 0, 0 }, /* Reserved */
{ 1920, 1440 }, /* 1920x1440 @ 75Hz */
{ 1920, 1440 }, /* 1920x1440 @ 60Hz */
{ 1920, 1200 }, /* 1920x1200 @ 75Hz */
{ 1920, 1200 }, /* 1920x1200 @ 60Hz */
};
/* EDID timing extension modes */
static struct _vMode edidTimingExtensionVModes[] = {
{ 640, 480 }, /* DMT0659 */
{ 720, 480 }, /* 480p */
{ 720, 480 }, /* 480pH */
{ 1280, 720 }, /* 720p */
{ 1920, 540 }, /* 1080i */
{ 1440, 240 }, /* 480i */
{ 1440, 240 }, /* 480iH */
{ 1440, 240 }, /* 240p */
{ 1440, 240 }, /* 240pH */
{ 2880, 240 }, /* 480i4x */
{ 2880, 240 }, /* 480i4xH */
{ 2880, 240 }, /* 240p4x */
{ 2880, 240 }, /* 240p4xH */
{ 1440, 480 }, /* 480p2x */
{ 1440, 480 }, /* 480p2xH */
{ 1920, 1080 }, /* 1080p */
{ 720, 576 }, /* 576p */
{ 720, 576 }, /* 576pH */
{ 1280, 720 }, /* 720p50 */
{ 1920, 540 }, /* 1080i25 */
{ 1440, 288 }, /* 576i */
{ 1440, 288 }, /* 576iH */
{ 1440, 288 }, /* 288p */
{ 1440, 288 }, /* 288pH */
{ 2880, 288 }, /* 576i4x */
{ 2880, 288 }, /* 576i4xH */
{ 2880, 288 }, /* 288p4x */
{ 2880, 288 }, /* 288p4xH */
{ 1440, 576 }, /* 576p2x */
{ 1440, 576 }, /* 576p2xH */
{ 1920, 1080 }, /* 1080p50 */
{ 1920, 1080 }, /* 1080p24 */
{ 1920, 1080 }, /* 1080p25 */
{ 1920, 1080 }, /* 1080p30 */
{ 2880, 240 }, /* 480p4x */
{ 2880, 240 }, /* 480p4xH */
{ 2880, 576 }, /* 576p4x */
{ 2880, 576 }, /* 576p4xH */
{ 1920, 540 }, /* 1080i25 */
{ 1920, 540 }, /* 1080i50 */
{ 1280, 720 }, /* 720p100 */
{ 720, 576 }, /* 576p100 */
{ 720, 576 }, /* 576p100H */
{ 1440, 576 }, /* 576i50 */
{ 1440, 576 }, /* 576i50H */
{ 1920, 540 }, /* 1080i60 */
{ 1280, 720 }, /* 720p120 */
{ 720, 576 }, /* 480p119 */
{ 720, 576 }, /* 480p119H */
{ 1440, 576 }, /* 480i59 */
{ 1440, 576 }, /* 480i59H */
{ 720, 576 }, /* 576p200 */
{ 720, 576 }, /* 576p200H */
{ 1440, 288 }, /* 576i100 */
{ 1440, 288 }, /* 576i100H */
{ 720, 480 }, /* 480p239 */
{ 720, 480 }, /* 480p239H */
{ 1440, 240 }, /* 480i119 */
{ 1440, 240 }, /* 480i119H */
{ 1280, 720 }, /* 720p24 */
{ 1280, 720 }, /* 720p25 */
{ 1280, 720 }, /* 720p30 */
{ 1920, 1080 }, /* 1080p120 */
{ 1920, 1080 }, /* 1080p100 */
{ 1280, 720 }, /* 720p24 */
{ 1280, 720 }, /* 720p25 */
{ 1280, 720 }, /* 720p30 */
{ 1280, 720 }, /* 720p50 */
{ 1650, 750 }, /* 720p */
{ 1280, 720 }, /* 720p100 */
{ 1280, 720 }, /* 720p120 */
{ 1920, 1080 }, /* 1080p24 */
{ 1920, 1280 }, /* 1080p25 */
{ 1920, 1280 }, /* 1080p30 */
{ 1920, 1280 }, /* 1080p50 */
{ 1920, 1280 }, /* 1080p */
{ 1920, 1280 }, /* 1080p100 */
{ 1920, 1280 }, /* 1080p120 */
{ 1680, 720 }, /* 720p2x24 */
{ 1680, 720 }, /* 720p2x25 */
{ 1680, 720 }, /* 720p2x30 */
{ 1680, 720 }, /* 720p2x50 */
{ 1680, 720 }, /* 720p2x */
{ 1680, 720 }, /* 720p2x100 */
{ 1680, 720 }, /* 720p2x120 */
{ 2560, 1080 }, /* 1080p2x24 */
{ 2560, 1080 }, /* 1080p2x25 */
{ 2560, 1080 }, /* 1080p2x30 */
{ 2560, 1080 }, /* 1080p2x50 */
{ 2560, 1080 }, /* 1080p2x */
{ 2560, 1080 }, /* 1080p2x100 */
{ 2560, 1080 }, /* 1080p2x120 */
{ 3840, 2160 }, /* 2160p24 */
{ 3840, 2160 }, /* 2160p25 */
{ 3840, 2160 }, /* 2160p30 */
{ 3840, 2160 }, /* 2160p50 */
{ 3840, 2160 }, /* 2160p */
{ 4096, 2160 }, /* 2160p24 */
{ 4096, 2160 }, /* 2160p25 */
{ 4096, 2160 }, /* 2160p30 */
{ 4096, 2160 }, /* 2160p50 */
{ 4096, 2160 }, /* 2160p */
{ 3840, 2160 }, /* 2160p24 */
{ 3840, 2160 }, /* 2160p25 */
{ 3840, 2160 }, /* 2160p30 */
{ 3840, 2160 }, /* 2160p50 */
{ 3840, 2160 }, /* 2160p */
{ 1280, 720 }, /* 720p48 */
{ 1280, 720 }, /* 720p48 */
{ 1680, 720 }, /* 720p2x48 */
{ 1920, 1280 }, /* 1080p48 */
{ 1920, 1280 }, /* 1080p48 */
{ 2560, 1080 }, /* 1080p2x48 */
{ 3840, 2160 }, /* 2160p48 */
{ 4096, 2160 }, /* 2160p48 */
{ 3840, 2160 }, /* 2160p48 */
{ 3840, 2160 }, /* 2160p100 */
{ 3840, 2160 }, /* 2160p120 */
{ 3840, 2160 }, /* 2160p100 */
{ 3840, 2160 }, /* 2160p120 */
{ 5120, 2160 }, /* 2160p2x24 */
{ 5120, 2160 }, /* 2160p2x25 */
{ 5120, 2160 }, /* 2160p2x30 */
{ 5120, 2160 }, /* 2160p2x48 */
{ 5120, 2160 }, /* 2160p2x50 */
{ 5120, 2160 }, /* 2160p2x */
{ 5120, 2160 }, /* 2160p2x100 */
{ 0, 0 }, /* Reserved */
};
struct _vMode *getVMode(UInt16 idx)
{
struct vMode *v = vModes;
UInt16 i = 0;
while (v != NULL) {
if (i == idx) {
return v->mode;
}
v = v->next;
i++;
}
return NULL;
}
static void dumpVModeList(void)
{
struct vMode *v = vModes;
while (v != NULL) {
lprintf(" %d, %d\n", v->mode->width, v->mode->height);
v = v->next;
}
}
static UInt16 getVModeListSize(void)
{
struct vMode *v = vModes;
UInt16 i = 0;
while (v != NULL) {
v = v->next;
i++;
}
return i;
}
static void addVModeToList(struct _vMode *vMode)
{
/* Add mode to list */
struct vMode **v = &vModes;
struct vMode *n;
while (*v != NULL) {
/* Don't add mode if resulting framebuffer is too
large for PCI MMIO space */
if (vMode->width * vMode->height * 4 > GLOBAL.boardFBMappedSize) {
return;
}
/* Don't add duplicate mode if it already exists */
if ((*v)->mode->width == vMode->width &&
(*v)->mode->height == vMode->height) {
return;
}
/* Add mode in order */
if (((*v)->mode->width == vMode->width &&
(*v)->mode->height > vMode->height) ||
((*v)->mode->width > vMode->width)) {
n = PoolAllocateResident(sizeof(struct vMode), true);
n->next = *v;
n->mode = vMode;
*v = n;
return;
}
v = &(*v)->next;
}
n = PoolAllocateResident(sizeof(struct vMode), true);
n->next = NULL;
n->mode = vMode;
*v = n;
}
static UInt8 EdidReadB(UInt16 port)
{
UInt8 *ptr, val;
ptr = (UInt8 *)((UInt32)GLOBAL.boardRegAddress + port);
val = *ptr;
SynchronizeIO();
return val;
}
static UInt16 GetEdidSize()
{
return 0x80 * ((UInt16)EdidReadB(0x7e) + 1);
}
static void ParseEdid(UInt8 *edid)
{
int i, j, d, idx;
/* Standard modes */
lprintf("Standard modes: \n");
for (i = 35; i <= 37; i++) {
for (j = 0; j <= 7; j++) {
if (edid[i] & (1 << j)) {
idx = ((i - 35) << 3) + j;
lprintf(" %d, %d\n", edidStdVModes[idx].width,
edidStdVModes[idx].height);
addVModeToList(&edidStdVModes[idx]);
}
}
}
/* Extended standard modes */
lprintf("Extended standard modes: \n");
d = i = 54;
while (d < 126) {
/* Search for descriptor */
if (edid[d] == 0x0 && edid[d + 1] == 0x0 && edid[d + 2] == 0x0 &&
edid[d + 3] == 0xf7 && edid[d + 4] == 0x0) {
for (i = d + 6; i <= d + 11; i++) {
for (j = 0; j <= 7; j++) {
if (edid[i] & (1 << j)) {
idx = ((i - d - 6) << 3) + j;
lprintf(" %d, %d\n", edidExtStdVModes[idx].width,
edidExtStdVModes[idx].height);
addVModeToList(&edidExtStdVModes[idx]);
}
}
}
break;
}
d += 18;
}
/* Extension block modes */
lprintf("Extension block modes: \n");
if (edid[126] > 0) {
/* Search for descriptor */
i = 128;
if (edid[i] == 0x2 && edid[i + 1] == 0x3) {
/* Data present: check for video block */
d = edid[i + 2];
if (d > 0x4 && (edid[i + 4] & 0xf0) == (2 << 5)) {
for (j = 0; j < (edid[i + 4] & 0x1f); j++) {
idx = edid[(i + 5 + j)];
lprintf(" %d, %d\n", edidTimingExtensionVModes[idx].width,
edidTimingExtensionVModes[idx].height);
addVModeToList(&edidTimingExtensionVModes[idx]);
}
}
}
}
}
static void ParseDefaultVModes() {
UInt8 defaultVModeCount;
int i;
defaultVModeCount = sizeof(defaultVModes) / sizeof(struct _vMode);
lprintf("Default modes:\n");
for (i = 0; i < defaultVModeCount; i++) {
lprintf(" %d, %d\n", defaultVModes[i].width, defaultVModes[i].height);
addVModeToList(&defaultVModes[i]);
}
}
UInt16 QemuVga_ReadEdidModes(void)
{
UInt16 edidSize = GetEdidSize();
UInt8 *edid;
int i;
if (EdidReadB(0x0) != 0x0 || EdidReadB(0x1) != 0xff) {
lprintf("No valid EDID detected, using default modes\n");
ParseDefaultVModes();
return getVModeListSize();
}
lprintf("EDID size: %d bytes, reading modes from EDID...\n", edidSize);
edid = (UInt8 *)PoolAllocateResident(edidSize, true);
if (!edid)
return;
for (i = 0; i < edidSize; i++) {
edid[i] = EdidReadB(i);
}
ParseEdid(edid);
PoolDeallocate(edid);
lprintf("Final mode list:\n");
dumpVModeList();
return getVModeListSize();
}
\ No newline at end of file diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/QemuVga.c b/roms/QemuMacDrivers/QemuVGADriver/src/QemuVga.c new file mode 100644 index 000000000..7b6dd2303 --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/QemuVga.c @@ -0,0 +1,386 @@ +#include "VideoDriverPrivate.h" +#include "VideoDriverPrototypes.h" +#include "DriverQDCalls.h" +#include "QemuVga.h" +#include <Timer.h> + +/* +static struct _vMode defaultVModes[] = { + { 640, 480 }, + { 800, 600 }, + { 1024, 768 }, + { 1280, 1024 }, + { 1600, 1200 }, + { 1920, 1080 }, + { 1920, 1200 }, + { 0, 0 } +}; +*/ +static void VgaWriteB(UInt16 port, UInt8 val) +{ + UInt8 *ptr; + + ptr = (UInt8 *)((UInt32)GLOBAL.boardRegAddress + port + 0x400 - 0x3c0); + *ptr = val; + SynchronizeIO(); +} + +static UInt8 VgaReadB(UInt16 port) +{ + UInt8 *ptr, val; + + ptr = (UInt8 *)((UInt32)GLOBAL.boardRegAddress + port + 0x400 - 0x3c0); + val = *ptr; + SynchronizeIO(); + return val; +} + +static void DispiWriteW(UInt16 reg, UInt16 val) +{ + UInt16 *ptr; + + ptr = (UInt16 *)((UInt32)GLOBAL.boardRegAddress + (reg << 1) + 0x500); + *ptr = EndianSwap16Bit(val); + SynchronizeIO(); +} + +static UInt16 DispiReadW(UInt16 reg) +{ + UInt16 *ptr, val; + + ptr = (UInt16 *)((UInt32)GLOBAL.boardRegAddress + (reg << 1) + 0x500); + val = EndianSwap16Bit(*ptr); + SynchronizeIO(); + return val; +} + +static void ExtWriteL(UInt16 reg, UInt32 val) +{ + UInt32 *ptr; + + ptr = (UInt32 *)((UInt32)GLOBAL.boardRegAddress + (reg << 2) + 0x600); + *ptr = EndianSwap32Bit(val); + SynchronizeIO(); +} + +static UInt32 ExtReadL(UInt32 reg) +{ + UInt32 *ptr, val; + + ptr = (UInt32 *)((UInt32)GLOBAL.boardRegAddress + (reg << 2) + 0x600); + val = EndianSwap32Bit(*ptr); + SynchronizeIO(); + return val; +} + +static OSStatus VBLTimerProc(void *p1, void *p2); + +#ifndef USE_DSL_TIMER +static TMTask gLegacyTimer; + +static pascal void legacyTimerCB(TMTaskPtr *inTask) +{ + VBLTimerProc(NULL, NULL); +} + +static const RoutineDescriptor gLegacyTimerDesc = BUILD_ROUTINE_DESCRIPTOR(uppTimerProcInfo, legacyTimerCB); +static const TimerUPP gLegacyTimerProc = (TimerUPP) &gLegacyTimerDesc; +static int gTimerInstalled; + +static OSStatus ScheduleVBLTimer(void) +{ + if (!gTimerInstalled) { + BlockZero(&gLegacyTimer, sizeof(gLegacyTimer)); + gLegacyTimer.tmAddr = gLegacyTimerProc; + gLegacyTimer.qLink = (QElemPtr)'eada'; + InsXTime((QElemPtr)&gLegacyTimer); + gTimerInstalled = true; + } + PrimeTime((QElemPtr)&gLegacyTimer, TIMER_DURATION); + return noErr; +} + +#else + +static OSStatus ScheduleVBLTimer(void) +{ + AbsoluteTime target = AddDurationToAbsolute(TIMER_DURATION, UpTime()); + return SetInterruptTimer(&target, VBLTimerProc, NULL, &GLOBAL.VBLTimerID); +} + +#endif + +static OSStatus VBLTimerProc(void *p1, void *p2) +{ + static UInt32 VBcnt; + + GLOBAL.inInterrupt = 1; + + /* This can be called before the service is ready */ + if (GLOBAL.qdVBLInterrupt && GLOBAL.qdInterruptsEnable) + VSLDoInterruptService(GLOBAL.qdVBLInterrupt); + + /* Reschedule */ + ScheduleVBLTimer(); + + GLOBAL.inInterrupt = 0; +} + +#ifdef USE_PCI_IRQ +static InterruptMemberNumber PCIInterruptHandler(InterruptSetMember ISTmember, + void *refCon, UInt32 theIntCount) +{ + UInt32 reg; + + reg = ExtReadL(2); + if (!(reg & 1)) + return kIsrIsNotComplete; + if (GLOBAL.qdVBLInterrupt && GLOBAL.qdInterruptsEnable) + VSLDoInterruptService(GLOBAL.qdVBLInterrupt); + ExtWriteL(2, 3); + return kIsrIsComplete; +} +#endif + + +OSStatus QemuVga_Init(void) +{ + UInt16 id, i; + UInt32 mem, width, height, depth; + Boolean modeFound = false; + struct vMode *v; + + lprintf("First MMIO read...\n"); + id = DispiReadW(VBE_DISPI_INDEX_ID); + mem = DispiReadW(VBE_DISPI_INDEX_VIDEO_MEMORY_64K); + mem <<= 16; + lprintf("DISPI_ID=%04x VMEM=%d Mb\n", id, mem >> 20); + if ((id & 0xfff0) != VBE_DISPI_ID0) { + lprintf("Unsupported ID !\n"); + return controlErr; + } + if (mem > GLOBAL.boardFBMappedSize) + mem = GLOBAL.boardFBMappedSize; + GLOBAL.vramSize = mem; + + // XXX Add endian control regs + + width = DispiReadW(VBE_DISPI_INDEX_XRES); + height = DispiReadW(VBE_DISPI_INDEX_YRES); + depth = DispiReadW(VBE_DISPI_INDEX_BPP); + lprintf("Current setting: %dx%dx%d\n", width, height, depth); + + GLOBAL.depth = GLOBAL.bootDepth = depth; + GLOBAL.numModes = QemuVga_ReadEdidModes(); + lprintf("Number of modes: %d\n", GLOBAL.numModes); + + for (i = 0, v = vModes; v != NULL; v = v->next, i++) { + if (width == v->mode->width && height == v->mode->height) { + modeFound = true; + break; + } + } + + if (!modeFound) { + lprintf("Not found in list ! using default.\n"); + i = 0; + } else { + lprintf("Using mode: %d\n", i); + } + GLOBAL.bootMode = i; + + QemuVga_SetMode(GLOBAL.bootMode, depth, 0); + +#ifdef USE_PCI_IRQ + if (SetupPCIInterrupt(&GLOBAL.deviceEntry, &GLOBAL.irqInfo, + PCIInterruptHandler, NULL) == noErr) + GLOBAL.hasPCIInterrupt = true; + else +#else + GLOBAL.hasPCIInterrupt = false; +#endif + return noErr; +} + +OSStatus QemuVga_Open(void) +{ + lprintf("QemuVga v1.00\n"); + + GLOBAL.isOpen = true; + + if (GLOBAL.hasPCIInterrupt) { + QemuVga_EnableInterrupts(); + lprintf("VBL registered using PCI interrupts\n"); + } else { + /* Schedule the timer now if timers are supported. They aren't on OS X + * in which case we must not create the VSL service, otherwise OS X will expect + * a VBL and fail to update the cursor when not getting one. + */ + lprintf("Testing using timer to simulate VBL..\n"); + GLOBAL.hasTimer = (ScheduleVBLTimer() == noErr); + GLOBAL.qdInterruptsEnable = GLOBAL.hasTimer; + + if (GLOBAL.hasTimer) + lprintf("Using timer to simulate VBL.\n"); + else + lprintf("No timer service (OS X ?), VBL not registered.\n"); + + } + + /* Create VBL if we have a PCI interrupt or timer works */ + if (GLOBAL.hasPCIInterrupt || GLOBAL.hasTimer) + VSLNewInterruptService(&GLOBAL.deviceEntry, kVBLInterruptServiceType, &GLOBAL.qdVBLInterrupt); + + return noErr; +} + +OSStatus QemuVga_Close(void) +{ + lprintf("Closing Driver...\n"); + + GLOBAL.isOpen = false; + + QemuVga_DisableInterrupts(); + if (GLOBAL.qdVBLInterrupt) + VSLDisposeInterruptService( GLOBAL.qdVBLInterrupt ); + GLOBAL.qdVBLInterrupt = NULL; + + return noErr; +} + +OSStatus QemuVga_Exit(void) +{ + QemuVga_Close(); + + return noErr; +} + +void QemuVga_EnableInterrupts(void) +{ + GLOBAL.qdInterruptsEnable = true; + if (GLOBAL.hasTimer) + ScheduleVBLTimer(); + else if (GLOBAL.hasPCIInterrupt) { + GLOBAL.irqInfo.enableFunction(GLOBAL.irqInfo.interruptSetMember, GLOBAL.irqInfo.refCon); + ExtWriteL(2, 3); + } +} + +void QemuVga_DisableInterrupts(void) +{ + AbsoluteTime remaining; + + GLOBAL.qdInterruptsEnable = false; + if (GLOBAL.hasTimer) + CancelTimer(GLOBAL.VBLTimerID, &remaining); + else if (GLOBAL.hasPCIInterrupt) { + ExtWriteL(2, 1); + GLOBAL.irqInfo.disableFunction(GLOBAL.irqInfo.interruptSetMember, GLOBAL.irqInfo.refCon); + } +} + +OSStatus QemuVga_SetColorEntry(UInt32 index, RGBColor *color) +{ + //lprintf("SetColorEntry %d, %x %x %x\n", index, color->red, color->green, color->blue); + VgaWriteB(0x3c8, index); + VgaWriteB(0x3c9, color->red >> 8); + VgaWriteB(0x3c9, color->green >> 8); + VgaWriteB(0x3c9, color->blue >> 8); + return noErr; +} + +OSStatus QemuVga_GetColorEntry(UInt32 index, RGBColor *color) +{ + UInt32 r,g,b; + + VgaWriteB(0x3c7, index); + r = VgaReadB(0x3c9); + g = VgaReadB(0x3c9); + b = VgaReadB(0x3c9); + color->red = (r << 8) | r; + color->green = (g << 8) | g; + color->blue = (b << 8) | b; + + return noErr; +} + +OSStatus QemuVga_GetModeInfo(UInt32 index, UInt32 *width, UInt32 *height) +{ + if (index >= GLOBAL.numModes) + return paramErr; + if (width) + *width = getVMode(index)->width; + if (height) + *height = getVMode(index)->height; + return noErr; +} + +OSStatus QemuVga_GetModePages(UInt32 index, UInt32 depth, + UInt32 *pageSize, UInt32 *pageCount) +{ + UInt32 width, height, pBytes; + + if (index >= GLOBAL.numModes) + return paramErr; + width = getVMode(index)->width; + height = getVMode(index)->height; + pBytes = width * ((depth + 7) / 8) * height; + if (pageSize) + *pageSize = pBytes; + if (pageCount) { + if (pBytes <= (GLOBAL.boardFBMappedSize / 2)) + *pageCount = 2; + else + *pageCount = 1; + } + return noErr; +} + +OSStatus QemuVga_SetMode(UInt32 mode, UInt32 depth, UInt32 page) +{ + UInt32 width, height; + UInt32 pageSize, numPages; + + if (mode >= GLOBAL.numModes) + return paramErr; + + width = getVMode(mode)->width; + height = getVMode(mode)->height; + QemuVga_GetModePages(mode, depth, &pageSize, &numPages); + lprintf("Set Mode: %dx%dx%d has %d pages\n", width, height, depth, numPages); + if (page >= numPages) + return paramErr; + + DispiWriteW(VBE_DISPI_INDEX_ENABLE, 0); + DispiWriteW(VBE_DISPI_INDEX_BPP, depth); + DispiWriteW(VBE_DISPI_INDEX_XRES, width); + DispiWriteW(VBE_DISPI_INDEX_YRES, height); + DispiWriteW(VBE_DISPI_INDEX_BANK, 0); + DispiWriteW(VBE_DISPI_INDEX_VIRT_WIDTH, width); + DispiWriteW(VBE_DISPI_INDEX_VIRT_HEIGHT, height * numPages); + DispiWriteW(VBE_DISPI_INDEX_X_OFFSET, 0); + DispiWriteW(VBE_DISPI_INDEX_Y_OFFSET, height * page); + DispiWriteW(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED | VBE_DISPI_8BIT_DAC); + GLOBAL.curMode = mode; + GLOBAL.depth = depth; + GLOBAL.curPage = page; + GLOBAL.curBaseAddress = FB_START + page * pageSize; + + return noErr; +} + +OSStatus QemuVga_Blank(Boolean blank) +{ + /* We use the AR Index VGA register which is a flip flop + * so we need to ensure we write twice. We use a non-existing + * index so that the second write is dropped. + */ + if (blank) { + VgaWriteB(0x3c0, 0x1f); + VgaWriteB(0x3c0, 0x1f); + } else { + VgaWriteB(0x3c0, 0x3f); + VgaWriteB(0x3c0, 0x3f); + } + GLOBAL.blanked = blank; +} diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/QemuVga.h b/roms/QemuMacDrivers/QemuVGADriver/src/QemuVga.h new file mode 100644 index 000000000..f070bb72a --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/QemuVga.h @@ -0,0 +1,89 @@ +#ifndef __QEMU_VGA_H__ +#define __QEMU_VGA_H__ + +/* This must be enabled for the MacOS X version of the timer otherwise + * we don't know if the call failed and don't back off to non-VBL ops + */ +#define USE_DSL_TIMER + +/* Pseudo VBL timer duration in ms */ +#define TIMER_DURATION 30 + +/* Enable use of the PCI IRQ as VBL using non-upstream QEMU VGA + * extensions + */ +#undef USE_PCI_IRQ + +/* --- Qemu/Bochs special registers --- */ + +#define VBE_DISPI_IOPORT_INDEX 0x01CE +#define VBE_DISPI_IOPORT_DATA 0x01CF + +#define VBE_DISPI_INDEX_ID 0x0 +#define VBE_DISPI_INDEX_XRES 0x1 +#define VBE_DISPI_INDEX_YRES 0x2 +#define VBE_DISPI_INDEX_BPP 0x3 +#define VBE_DISPI_INDEX_ENABLE 0x4 +#define VBE_DISPI_INDEX_BANK 0x5 +#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 +#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 +#define VBE_DISPI_INDEX_X_OFFSET 0x8 +#define VBE_DISPI_INDEX_Y_OFFSET 0x9 +#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa + +#define VBE_DISPI_ID0 0xB0C0 +#define VBE_DISPI_ID1 0xB0C1 +#define VBE_DISPI_ID2 0xB0C2 +#define VBE_DISPI_ID3 0xB0C3 +#define VBE_DISPI_ID4 0xB0C4 +#define VBE_DISPI_ID5 0xB0C5 + +#define VBE_DISPI_DISABLED 0x00 +#define VBE_DISPI_ENABLED 0x01 +#define VBE_DISPI_GETCAPS 0x02 +#define VBE_DISPI_8BIT_DAC 0x20 +#define VBE_DISPI_LFB_ENABLED 0x40 +#define VBE_DISPI_NOCLEARMEM 0x80 + +/* --- VModes */ + +struct _vMode { + UInt32 width; + UInt32 height; +}; + +struct vMode { + struct vMode *next; + struct _vMode *mode; +}; + +extern struct vMode *vModes; +extern struct _vMode defaultVModes[]; +extern struct _vMode *getVMode(UInt16 idx); + +/* --- Internal APIs */ + +extern OSStatus QemuVga_Init(); +extern OSStatus QemuVga_Exit(); + +extern OSStatus QemuVga_Open(); +extern OSStatus QemuVga_Close(); + +extern void QemuVga_EnableInterrupts(void); +extern void QemuVga_DisableInterrupts(void); + +extern UInt16 QemuVga_ReadEdidModes(void); + +extern OSStatus QemuVga_SetDepth(UInt32 bpp); + +extern OSStatus QemuVga_SetColorEntry(UInt32 index, RGBColor *color); +extern OSStatus QemuVga_GetColorEntry(UInt32 index, RGBColor *color); + +extern OSStatus QemuVga_GetModePages(UInt32 index, UInt32 depth, + UInt32 *pageSize, UInt32 *pageCount); +extern OSStatus QemuVga_GetModeInfo(UInt32 index, UInt32 *width, UInt32 *height); +extern OSStatus QemuVga_SetMode(UInt32 modeIndex, UInt32 depth, UInt32 page); + +extern OSStatus QemuVga_Blank(Boolean blank); + +#endif diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriver.exp b/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriver.exp new file mode 100644 index 000000000..0a102ee95 --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriver.exp @@ -0,0 +1,2 @@ +TheDriverDescription +DoDriverIO diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriverPrivate.h b/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriverPrivate.h new file mode 100644 index 000000000..47a95a641 --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriverPrivate.h @@ -0,0 +1,85 @@ +#ifndef __VideoDriverPrivate_H__ +#define __VideoDriverPrivate_H__ + +#pragma internal off + +#include <VideoServices.h> +#include <Video.h> +#include <Displays.h> +#include <DriverGestalt.h> +#include <DriverServices.h> +#include <PCI.h> + +#include "MacDriverUtils.h" + +#ifndef FALSE +#define TRUE 1 +#define FALSE 0 +#endif + +#define QEMU_PCI_VIDEO_VENDOR_ID 0x1234 +#define QEMU_PCI_VIDEO_DEVICE_ID 0x1111 +#define QEMU_PCI_VIDEO_NAME "\pQEMU,VGA" +#define QEMU_PCI_VIDEO_PNAME "\p.Display_Video_QemuVGA" + +#define QEMU_PCI_VIDEO_BASE_REG 0x10 +#define QEMU_PCI_VIDEO_MMIO_REG 0x18 + +#define kDriverGlobalsPropertyName "GLOBALS" +#define kDriverFailTextPropertyName "FAILURE" +#define kDriverFailCodePropertyName "FAIL-CODE" + + +/* + * Our global storage is defined by this structure. This is not a requirement of the + * driver environment, but it collects globals into a coherent structure for debugging. + */ +struct DriverGlobal { + DriverRefNum refNum; /* Driver refNum for PB... */ + RegEntryID deviceEntry; /* Name Registry Entry ID */ + LogicalAddress boardFBAddress; + ByteCount boardFBMappedSize; + LogicalAddress boardRegAddress; + ByteCount boardRegMappedSize; + + volatile Boolean inInterrupt; + + /* Common globals */ + UInt32 openCount; + + /* Frame buffer configuration */ + Boolean qdInterruptsEnable; /* Enable VBLs for qd */ + Boolean qdLuminanceMapping; + + Boolean hasPCIInterrupt; + IRQInfo irqInfo; + + Boolean hasTimer; + InterruptServiceIDType qdVBLInterrupt; + TimerID VBLTimerID; + + Boolean isOpen; + + UInt32 vramSize; + UInt32 depth; + UInt32 bootDepth; + UInt32 bootMode; + UInt32 curMode; + UInt32 numModes; + UInt32 curPage; + LogicalAddress curBaseAddress; + Boolean blanked; +}; +typedef struct DriverGlobal DriverGlobal, *DriverGlobalPtr; + +/* + * Globals and functions + */ +extern DriverGlobal gDriverGlobal; /* All interesting globals */ +#define GLOBAL (gDriverGlobal) /* GLOBAL.field for references */ +extern DriverDescription TheDriverDescription; /* Exported to the universe */ + +#define FB_START ((char*)GLOBAL.boardFBAddress) +#define CHECK_OPEN( error ) if( !GLOBAL.isOpen ) return (error) + +#endif diff --git a/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriverPrototypes.h b/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriverPrototypes.h new file mode 100755 index 000000000..682671a0c --- /dev/null +++ b/roms/QemuMacDrivers/QemuVGADriver/src/VideoDriverPrototypes.h @@ -0,0 +1,100 @@ +#ifndef __VideoDriverPrototypes_H__ +#define __VideoDriverPrototypes_H__ + +#include <PCI.h> +#include "logger.h" + +/* + * The Driver Manager calls DoDriverIO to perform I/O. + */ + +OSStatus +DoDriverIO( AddressSpaceID addressSpaceID, + IOCommandID ioCommandID, + IOCommandContents ioCommandContents, + IOCommandCode ioCommandCode, + IOCommandKind ioCommandKind); + +#include "MacDriverUtils.h" + +/* + * Prototypes for the specific driver handlers. These do real work. + */ +OSStatus +DriverInitializeCmd( AddressSpaceID addressSpaceID, + DriverInitInfoPtr driverInitInfoPtr); + +OSStatus +DriverFinalizeCmd( DriverFinalInfoPtr driverFinalInfoPtr); + +OSStatus +DriverSupersededCmd( DriverSupersededInfoPtr driverSupersededInfoPtr, + Boolean calledFromFinalize); + +OSStatus +DriverReplaceCmd( AddressSpaceID addressSpaceID, + DriverReplaceInfoPtr driverReplaceInfoPtr); + +OSStatus +DriverOpenCmd( AddressSpaceID addressSpaceID, + ParmBlkPtr pb); + +OSStatus +DriverCloseCmd( ParmBlkPtr pb); + +OSStatus +DriverControlCmd( AddressSpaceID addressSpaceID, + IOCommandID ioCommandID, + IOCommandKind ioCommandKind, + CntrlParam *pb); + +OSStatus +DriverStatusCmd( IOCommandID ioCommandID, + IOCommandKind ioCommandKind, + CntrlParam *pb); + +OSStatus +DriverKillIOCmd( ParmBlkPtr pb); + +OSStatus +DriverReadCmd( + AddressSpaceID addressSpaceID, + IOCommandID ioCommandID, + IOCommandKind ioCommandKind, + ParmBlkPtr pb); + +OSStatus +DriverWriteCmd( AddressSpaceID addressSpaceID, + IOCommandID ioCommandID, + IOCommandKind ioCommandKind, + ParmBlkPtr pb); + +/* .___________________________________________________________________________________. + | Driver Gestalt handler -- called from the PBStatus handler. | + .___________________________________________________________________________________. + */ +OSStatus +DriverGestaltHandler( CntrlParam* pb); + + +/* .___________________________________________________________________________________. + | Utitlity function to clear a block of memory. | + .___________________________________________________________________________________. + */ +#ifndef CLEAR +#define CLEAR(what) BlockZero((char*)&what, sizeof what) +#endif + +/* + * This uses the ANSI-C string concatenate and "stringize" operations. + */ +#define Trace(what) lprintf("Trace: %s\n", #what) + +#if 0 +static void +CheckStatus( OSStatus value, + char* message) +{} +#endif + +#endif
\ No newline at end of file diff --git a/roms/QemuMacDrivers/builds/qemu_vga.ndrv b/roms/QemuMacDrivers/builds/qemu_vga.ndrv Binary files differnew file mode 100644 index 000000000..de81cfd1c --- /dev/null +++ b/roms/QemuMacDrivers/builds/qemu_vga.ndrv diff --git a/roms/QemuMacDrivers/builds/qemu_vga_debugosi.ndrv b/roms/QemuMacDrivers/builds/qemu_vga_debugosi.ndrv Binary files differnew file mode 100644 index 000000000..d98c2643b --- /dev/null +++ b/roms/QemuMacDrivers/builds/qemu_vga_debugosi.ndrv diff --git a/roms/QemuMacDrivers/cleanup.sh b/roms/QemuMacDrivers/cleanup.sh new file mode 100755 index 000000000..490025241 --- /dev/null +++ b/roms/QemuMacDrivers/cleanup.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# +# Cleanup cruft left by MacOS + +find . -name "@eaDir" -print0 | xargs -0 rm -rf +find . -type d -print0 | xargs -0 chmod o-w +find . -type f -print0 | xargs -0 chmod a-x +chmod +x cleanup.sh diff --git a/roms/QemuMacDrivers/shared/LinuxOSI.h b/roms/QemuMacDrivers/shared/LinuxOSI.h new file mode 100644 index 000000000..628ab7145 --- /dev/null +++ b/roms/QemuMacDrivers/shared/LinuxOSI.h @@ -0,0 +1,92 @@ +/* + * <LinuxOSI.h> + * + * Copyright (C) 1999, 2002, 2003 Samuel Rydh (samuel@ibrium.se) + * + * 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 + * + */ + +#ifndef _LINUX_OSI_H +#define _LINUX_OSI_H + +#include <Types.h> + +#define MOL_GESTALT_SELECTOR 'MOL-' +//#define MOL_GESTALT_VALUE '-MOL' /* old value, osi_interrupts used */ +#define MOL_GESTALT_VALUE '1MOL' + +extern int OSI_IRQTest( int cmd, int param ); + +/* Misc */ +extern int MOLIsRunning( void ); +extern void OSI_Debugger( int debugnum ); + +extern UInt32 OSI_GetTime( void ); +extern void OSI_PutC( char ch ); +extern void OSI_CMountDrvVol( void ); + +/* Mouse Driver */ +struct osi_mouse; +extern int OSI_GetMouse( struct osi_mouse *pb ); +extern int OSI_MouseCntrl( int cmd ); +extern int OSI_MouseCntrl1( int cmd, int param ); +extern int OSI_MouseAckIRQ( void ); + +/* Video Driver */ +extern int OSI_SetVMode_( int modeID, int depthMode ); +extern int OSI_GetVModeInfo_( int modeID, int depthMode, void *ret ); +extern int OSI_SetVPowerState( int powerState ); + +extern int OSI_GetColor( int index ); +extern int OSI_SetColor( int index, int col ); +extern int OSI_VideoAckIRQ( int *events ); +extern int OSI_VideoCntrl( int cmd ); +extern int OSI_VideoCntrl1( int cmd, int param ); + +/* Ethernet Driver */ +extern int OSI_EnetOpen( UInt32 osi_id ); +extern void OSI_EnetClose( UInt32 id ); +extern UInt32 OSI_EnetGetEthAddress( UInt32 id, UInt32 eth_address_phys_ptr ); +extern UInt32 OSI_EnetGetStatus( UInt32 id ); +extern UInt32 OSI_EnetControl( UInt32 id, UInt32 command ); +extern UInt32 OSI_EnetControl1( UInt32 id, UInt32 command, UInt32 param ); +extern int OSI_EnetGetPacket( UInt32 id, UInt32 packet ); +extern int OSI_EnetSendPacket( UInt32 id, UInt32 packet, UInt32 size ); +extern UInt32 OSI_EnetAddMulticast( UInt32 id, UInt32 eth_address_phys_ptr ); +extern UInt32 OSI_EnetDelMulticast( UInt32 id, UInt32 eth_address_phys_ptr ); + +/* Sound Driver */ +extern int OSI_SoundWrite( UInt32 phys_buf, int count, int resume ); +extern long OSI_SoundSetVolume( long hwVol, long speakerVol, int hwMute ); +extern int OSI_SoundIrqAck( void ); +extern int OSI_SoundCntl2( int cmd, int parm, int param2 ); +extern int OSI_SoundCntl1( int cmd, int parm ); +extern int OSI_SoundCntl( int cmd ); + +/* Interrupt management */ +extern UInt32 OSI_RegisterIRQ( UInt32 reg_word, UInt32 appl_int ); +extern void OSI_UnregisterIRQ( UInt32 irq_cookie ); +extern int OSI_PollIRQ( UInt32 irq_cookie ); +extern int OSI_AckIRQ( UInt32 irq_cookie ); +extern int OSI_EnableIRQ( UInt32 irq_cookie, int enable ); + +/* ABlk driver */ +struct ablk_disk_info; +extern int OSI_ABlkRingSetup( int channel, UInt32 mphys, int nel ); +extern int OSI_ABlkDiskInfo( int channel, int index, struct ablk_disk_info *info ); +extern int OSI_ABlkIRQAck( int channel, int *req_cnt, int *active, int *events ); +extern int OSI_ABlkCntrl( int channel, int cmd ); +extern int OSI_ABlkCntrl1( int channel, int cmd, int arg ); +extern int OSI_ABlkKick( int channel ); +extern int OSI_ABlkSyncRead( int channel, int unit, int blk, UInt32 physbuf, int size ); +extern int OSI_ABlkSyncWrite( int channel, int unit, int blk, UInt32 physbuf, int size ); + +/* SCSI */ +extern int OSI_SCSISubmit( int req_mphys ); +extern int OSI_SCSIAck( void ); +extern int OSI_SCSIControl( int cmd, int param ); + +#endif diff --git a/roms/QemuMacDrivers/shared/LinuxOSI.s b/roms/QemuMacDrivers/shared/LinuxOSI.s new file mode 100644 index 000000000..487683416 --- /dev/null +++ b/roms/QemuMacDrivers/shared/LinuxOSI.s @@ -0,0 +1,370 @@ +;####################################################### +;# +;# Linux Interace Stub +;# +;####################################################### + + INCLUDE 'MakeFunction.s' + INCLUDE 'LinuxOSIDefs.s' + + +;####################################################### +; int OSI_IRQTest( int cmd, int param ) +;####################################################### + + MakeFunction OSI_IRQTest + mr r6,r3 + mr r7,r4 + osi_call OSI_IRQTEST + blr + + +;####################################################### +; void OSI_PutC( char ch ) +;####################################################### + + MakeFunction OSI_PutC + mr r6,r3 + OSI_CALL( OSI_LOG_PUTC ) + blr + +;####################################################### +; void OSI_Debugger( int debugnum ) +;####################################################### + + MakeFunction OSI_Debugger + mr r6,r3 + osi_call OSI_DEBUGGER + blr + +;####################################################### +; ulong OSI_GetTime( void ) +;####################################################### + + MakeFunction OSI_GetTime + osi_call OSI_GET_DATE + blr + +;####################################################### +; void OSI_CMountDrvVol( void ) +;####################################################### + + MakeFunction OSI_CMountDrvVol + osi_call OSI_CMOUNT_DRV_VOL + blr + + +;####################################################### +; int OSI_ABlkDiskInfo( int channel, int unit, ablk_disk_info_t *ret ) +; int OSI_ABlkRingSetup( int channel, ulong mphys, int num_el ) +; int OSI_ABlkCntrl( int channel, int cmd ) +; int OSI_ABlkCntrl( int channel, int cmd, int param ) +; int OSI_ABlkKick( int channel ) +; int OSI_ABlkIRQAck( int channel, int *req_count, int *active, int *event ) +; int OSI_ABlkSyncRead( int channel, int unit, int blk, ulong mphys, int size ) +; int OSI_ABlkSyncWrite( int channel, int unit, int blk, ulong mphys, int size ) +;####################################################### + + MakeFunction OSI_ABlkDiskInfo + mr r6,r3 + mr r7,r4 + mr r10,r5 ; save pointer in r10 + osi_call OSI_ABLK_DISK_INFO + stw r4,0(r10) ; 16 byte return info + stw r5,4(r10) + stw r6,8(r10) + stw r7,12(r10) + blr + + MakeFunction OSI_ABlkRingSetup + mr r6,r3 + mr r7,r4 + mr r8,r5 + osi_call OSI_ABLK_RING_SETUP + blr + + MakeFunction OSI_ABlkCntrl + mr r6,r3 + mr r7,r4 + osi_call OSI_ABLK_CNTRL + blr + + MakeFunction OSI_ABlkCntrl1 + mr r6,r3 + mr r7,r4 + mr r8,r5 + osi_call OSI_ABLK_CNTRL + blr + + MakeFunction OSI_ABlkKick + + mr r6,r3 + osi_call OSI_ABLK_KICK + blr + + MakeFunction OSI_ABlkIRQAck + mr r8,r4 ; save r4 in r8 + mr r9,r5 ; save r5 in r9 + mr r10,r6 ; save r6 in r10 + mr r6,r3 + osi_call OSI_ABLK_IRQ_ACK + stw r4,0(r8) ; return req_count + stw r5,0(r9) ; return active + stw r6,0(r10) ; return event + blr + + MakeFunction OSI_ABlkSyncRead + mr r10,r7 + mr r9,r6 + mr r8,r5 + mr r7,r4 + mr r6,r3 + osi_call OSI_ABLK_SYNC_READ + blr + + MakeFunction OSI_ABlkSyncWrite + mr r10,r7 + mr r9,r6 + mr r8,r5 + mr r7,r4 + mr r6,r3 + osi_call OSI_ABLK_SYNC_WRITE + blr + + +;####################################################### +; int OSI_MouseAckIRQ( void ) +; int OSI_GetMouse( osi_mouse_t *pb ) +; int OSI_MouseCntrl( int cmd ) +; int OSI_MouseCntrl1( int cmd, int param ) +;####################################################### + + MakeFunction OSI_MouseAckIRQ + osi_call OSI_MOUSE_ACK_IRQ + blr + + MakeFunction OSI_GetMouse + mr r10,r3 + osi_call OSI_GET_MOUSE + stw r4,0(r10) + stw r5,4(r10) + stw r6,8(r10) + stw r7,12(r10) + stw r8,16(r10) + blr + + MakeFunction OSI_MouseCntrl + mr r6,r3 + osi_call OSI_MOUSE_CNTRL + blr + + MakeFunction OSI_MouseCntrl1 + mr r6,r3 + mr r7,r4 + osi_call OSI_MOUSE_CNTRL + blr + + +;####################################################### +; int OSI_SetVMode_( int modeID, int depthMode ) +; int OSI_GetVModeInfo_( int modeID, int depthMode, osi_get_vmode_info_t *ret ) +; int OSI_SetVPowerState( int powerState ) +; int OSI_GetColor( int index ) +; int OSI_SetColor( int index, int color ) +; int OSI_VideoAckIRQ( int *events ) +; int OSI_VideoCntrl( int cmd ) +; int OSI_VideoCntrl1( int cmd, int param ) +;####################################################### + + MakeFunction OSI_SetVMode_ + mr r6,r3 + mr r7,r4 + osi_call OSI_SET_VMODE + blr + + MakeFunction OSI_GetVModeInfo_ + mr r6,r3 + mr r7,r4 + mr r10,r5 + osi_call OSI_GET_VMODE_INFO + stw r4,0(r10) + stw r5,4(r10) + stw r6,8(r10) + stw r7,12(r10) + stw r8,16(r10) + stw r9,20(r10) + blr + + MakeFunction OSI_SetVPowerState + mr r6,r3 + osi_call OSI_SET_VIDEO_POWER + blr + + MakeFunction OSI_GetColor + mr r6,r3 + osi_call OSI_GET_COLOR + blr + + MakeFunction OSI_SetColor + mr r6,r3 + mr r7,r4 + osi_call OSI_SET_COLOR + blr + + MakeFunction OSI_VideoAckIRQ + mr r10,r3 ; save pointer in r10 + osi_call OSI_VIDEO_ACK_IRQ + stw r4,0(r10) ; events return in r4 + blr + + MakeFunction OSI_VideoCntrl + mr r6,r3 + osi_call OSI_VIDEO_CNTRL + blr + + MakeFunction OSI_VideoCntrl1 + mr r6,r3 + mr r7,r4 + osi_call OSI_VIDEO_CNTRL + blr + + +;####################################################### +; void OSI_EnetClose( UInt32 id ) +; UInt32 OSI_EnetOpen( UInt32 interruptNumber ) +; UInt32 OSI_EnetGetEthAddress( UInt32 id, UInt32 eth_address_phys_ptr ) +; UInt32 OSI_EnetGetStatus( UInt32 id ) +; UInt32 OSI_EnetControl1( UInt32 id, UInt32 command, int param ) +; UInt32 OSI_EnetControl( UInt32 id, UInt32 command ) +; int OSI_EnetGetPacket( UInt32 id, UInt32 packet ) +; int OSI_EnetSendPacket( UInt32 id, UInt32 packet, UInt32 size ) +; UInt32 OSI_EnetAddMulticast( UInt32 id, UInt32 eth_address_phys_ptr ) +; UInt32 OSI_EnetDelMulticast( UInt32 id, UInt32 eth_address_phys_ptr ) +;####################################################### + + MakeFunction OSI_EnetOpen + mr r6,r3 + osi_call OSI_ENET_OPEN + blr + + MakeFunction OSI_EnetClose + mr r6,r3 + osi_call OSI_ENET_CLOSE + blr + + MakeFunction OSI_EnetGetEthAddress + mr r6,r3 + mr r7,r4 + osi_call OSI_ENET_GET_ADDR + blr + + MakeFunction OSI_EnetGetStatus + mr r6,r3 + osi_call OSI_ENET_GET_STATUS + blr + + MakeFunction OSI_EnetControl + mr r6,r3 + mr r7,r4 + osi_call OSI_ENET_CONTROL + blr + + MakeFunction OSI_EnetControl1 + mr r6,r3 + mr r7,r4 + mr r8,r5 + osi_call OSI_ENET_CONTROL + blr + + MakeFunction OSI_EnetGetPacket + mr r6,r3 + mr r7,r4 + osi_call OSI_ENET_GET_PACKET + blr + + MakeFunction OSI_EnetSendPacket + mr r6,r3 + mr r7,r4 + mr r8,r5 + osi_call OSI_ENET_SEND_PACKET + blr + + MakeFunction OSI_EnetAddMulticast + mr r6,r3 + mr r7,r4 + osi_call OSI_ENET_ADD_MULTI + blr + + MakeFunction OSI_EnetDelMulticast + mr r6,r3 + mr r7,r4 + osi_call OSI_ENET_DEL_MULTI + blr + + +;####################################################### +; int OSI_SoundWrite( UInt32 phys_buf, int size, int restart ) +; int OSI_SoundCntl2( int cmd, int param, int param2 ) +; int OSI_SoundCntl1( int cmd, int param ) +; int OSI_SoundCntl( int cmd ) +; int OSI_SoundSetVolume( int hwVol, int speakerVol, int hwMute ) +; int OSI_SoundIrqAck( void ) +;####################################################### + + MakeFunction OSI_SoundWrite + mr r6,r3 + mr r7,r4 + mr r8,r5 + OSI_CALL( OSI_SOUND_WRITE ) + blr + + MakeFunction OSI_SoundCntl2 + mr r8,r5 + mr r7,r4 + mr r6,r3 + OSI_CALL( OSI_SOUND_CNTL ) + blr + + MakeFunction OSI_SoundCntl1 + mr r7,r4 + mr r6,r3 + OSI_CALL( OSI_SOUND_CNTL ) + blr + + MakeFunction OSI_SoundCntl + mr r6,r3 + OSI_CALL( OSI_SOUND_CNTL ) + blr + + MakeFunction OSI_SoundSetVolume + mr r6,r3 + mr r7,r4 + mr r8,r5 + OSI_CALL( OSI_SOUND_SET_VOLUME ) + blr + + MakeFunction OSI_SoundIrqAck + OSI_CALL( OSI_SOUND_IRQ_ACK ) + blr + + +;####################################################### +; int OSI_SCSIControl( int sel, int param ) +; int OSI_SCSISubmit( int req_mphys ) +; int OSI_SCSIAck( void ) +;####################################################### + + MakeFunction OSI_SCSIControl + mr r7,r4 + mr r6,r3 + OSI_CALL( OSI_SCSI_CNTRL ) + blr + + MakeFunction OSI_SCSISubmit + mr r6,r3 + OSI_CALL( OSI_SCSI_SUBMIT ) + blr + + MakeFunction OSI_SCSIAck + OSI_CALL( OSI_SCSI_ACK ) + blr diff --git a/roms/QemuMacDrivers/shared/LinuxOSIDefs.s b/roms/QemuMacDrivers/shared/LinuxOSIDefs.s new file mode 100644 index 000000000..d39d1954a --- /dev/null +++ b/roms/QemuMacDrivers/shared/LinuxOSIDefs.s @@ -0,0 +1,76 @@ +; +; Linux interface magic +; + +OSI_SC_MAGIC_R3: set 0x113724FA +OSI_SC_MAGIC_R4: set 0x77810F9B + + MACRO + osi_call &selector + li r3,0x24FA + addis r3,r3,0x1137 + li r4,0x0F9B + addis r4,r4,0x7781 + li r5,&selector + sc + ENDM + +; +; Selectors +; + +OSI_DEBUGGER set 1 +OSI_CMOUNT_DRV_VOL set 4 + +OSI_MOUSE_CNTRL set 8 +OSI_GET_DATE set 9 + +OSI_ENET_OPEN set 10 +OSI_ENET_CLOSE set 11 +OSI_ENET_GET_ADDR set 12 +OSI_ENET_GET_STATUS set 13 +OSI_ENET_CONTROL set 14 +OSI_ENET_ADD_MULTI set 16 +OSI_ENET_DEL_MULTI set 17 +OSI_ENET_GET_PACKET set 18 +OSI_ENET_SEND_PACKET set 19 + +OSI_SCSI_CNTRL set 23 +OSI_SCSI_SUBMIT set 24 +OSI_SCSI_ACK set 25 + +OSI_GET_MOUSE set 26 ; void -- r4-r7 mouse data, r3 status +OSI_MOUSE_ACK_IRQ set 27 + +OSI_SET_VMODE set 28 ; vmode, depthmode -- err +OSI_GET_VMODE_INFO set 29 ; int modeID -- r3-status, r4-r7 osi_get_next_vmode_t +OSI_GET_MOUSE_DPI set 30 ; -- mouse dpi + +OSI_SET_VIDEO_POWER set 31 ; set VESA DPMS (Energy Star) state on console-video + +OSI_SOUND_WRITE set 33 +OSI_SOUND_SET_VOLUME set 35 +OSI_SOUND_CNTL set 36 + +OSI_VIDEO_ACK_IRQ set 38 +OSI_VIDEO_CNTRL set 39 + +OSI_SOUND_IRQ_ACK set 40 +OSI_SOUND_START_STOP set 41 + +OSI_REGISTER_IRQ set 42 ; first_word_of_reg_property -- irq_cookie + +OSI_LOG_PUTC set 47 + +OSI_SET_COLOR set 59 +OSI_GET_COLOR set 64 + +OSI_IRQTEST set 65 + +OSI_ABLK_RING_SETUP set 79 +OSI_ABLK_CNTRL set 80 +OSI_ABLK_DISK_INFO set 81 +OSI_ABLK_KICK set 82 +OSI_ABLK_IRQ_ACK set 83 +OSI_ABLK_SYNC_READ set 84 +OSI_ABLK_SYNC_WRITE set 85 diff --git a/roms/QemuMacDrivers/shared/MacDriverUtils.c b/roms/QemuMacDrivers/shared/MacDriverUtils.c new file mode 100644 index 000000000..3537dad0d --- /dev/null +++ b/roms/QemuMacDrivers/shared/MacDriverUtils.c @@ -0,0 +1 @@ +/*
* Various utilities for writing a MacOS "ndrv" driver, such as device-tree
* helpers. These replace the various Apple sample codes whose licences
* are dubious and probably not suitable for GPL code
*/
//#include "VideoDriverPrivate.h"
//#include "VideoDriverPrototypes.h"
#include "logger.h"
#include "MacDriverUtils.h"
/* Simplified DT properties accessors */
void *DTGetProp(RegEntryIDPtr dtNode,
RegPropertyNamePtr name,
RegPropertyValueSize *outSize)
{
OSStatus err;
RegPropertyValue *v;
if (!outSize)
return NULL;
/* Grab size so we can allocate some memory */
err = RegistryPropertyGetSize(dtNode, name, outSize);
if (err)
return NULL;
/* Allocate */
v = PoolAllocateResident(*outSize, FALSE);
if (!v)
return NULL;
err = RegistryPropertyGet(dtNode, name, v, outSize);
if (err)
return NULL;
return v;
}
void DTFreeProp(void *v)
{
if (v)
PoolDeallocate(v);
}
/* Find a BAR logical address and size */
LogicalAddress GetDeviceBARAddress(RegEntryIDPtr dtNode,
PCIRegisterNumber barOffset,
ByteCount *size,
Boolean *isIO)
{
RegPropertyValueSize aasize, lasize;
LogicalAddress *las = NULL;
PCIAssignedAddress *aas = NULL;
LogicalAddress result = 0;
UInt32 i;
/* First grab assigned-addresses to find the BAR */
aas = DTGetProp(dtNode, kPCIAssignedAddressProperty, &aasize);
if (!aas)
return NULL;
aasize /= sizeof(*aas);
/* Then grab AAPL,addresses to get the corresponding logical addresses */
las = DTGetProp(dtNode, kAAPLDeviceLogicalAddress, &lasize);
if (!las)
goto bail;
lasize /= sizeof(LogicalAddress);
/* Lookup BAR */
for (i = 0; i < aasize; i++) {
struct PCIAssignedAddress *aa = aas + i;
/* Skip config space */
if (GetPCIAddressSpaceType(aa) == kPCIConfigSpace)
continue;
/* Check BAR offset */
if (GetPCIRegisterNumber(aa) != barOffset)
continue;
/* Found it, check that it was assigned */
if (aa->size.hi == 0 && aa->size.lo == 0) {
lprintf("BAR %02x not assigned !\n");
goto bail;
}
/* Check we have a logical for it */
if (i >= lasize) {
lprintf("BAR %02x missing AAPL,address property !\n");
goto bail;
}
/* We don't do 64-bit, sorry... */
if (aa->size.hi) {
lprintf("BAR %02x too big !\n");
goto bail;
}
/* Gotcha ! */
if (size)
*size = aa->size.lo;
if (isIO)
*isIO = GetPCIAddressSpaceType(aa) == kPCIIOSpace;
result = las[i];
break;
}
bail:
DTFreeProp(aas);
DTFreeProp(las);
return result;
}
/* PCI "Command" config register address */
#define kPCIConfigCommandAddress 0x04
#define cwCommandEnableMemorySpace 0x0002
/* Enable access to PCI memory space */
OSStatus EnablePCIMemorySpace(RegEntryIDPtr dtNode)
{
OSStatus status;
UInt16 cmd;
lprintf("Reading cmd word...\n");
status = ExpMgrConfigReadWord(dtNode, (LogicalAddress)kPCIConfigCommandAddress, &cmd);
if( status )
return status;
lprintf("cmad word is: %04x, writing update...\n", cmd);
cmd |= cwCommandEnableMemorySpace;
return ExpMgrConfigWriteWord(dtNode, (LogicalAddress)kPCIConfigCommandAddress, cmd);
}
OSStatus SetupPCIInterrupt(RegEntryID *dtNode, IRQInfo *info,
InterruptHandler handler, void *refCon)
{
ISTProperty *ist;
RegPropertyValueSize istSize;
OSStatus err;
ist = DTGetProp(dtNode, kISTPropertyName, &istSize);
if (!ist) {
lprintf("SetupPCIInterrupt: No %s property\n", kISTPropertyName);
return paramErr;
}
info->interruptSetMember = (*ist)[kISTChipInterruptSource];
DTFreeProp(ist);
err = GetInterruptFunctions(info->interruptSetMember.setID,
info->interruptSetMember.member,
&info->refCon,
&info->handlerFunction,
&info->enableFunction,
&info->disableFunction);
if (err) {
lprintf("SetupPCIInterrupt: Error %d getting interrupt functions\n");
return err;
}
err = InstallInterruptFunctions(info->interruptSetMember.setID,
info->interruptSetMember.member,
refCon, handler, NULL, NULL);
if (err) {
lprintf("SetupPCIInterrupt: Error %d setting interrupt functions\n");
return err;
}
return noErr;
}
\ No newline at end of file diff --git a/roms/QemuMacDrivers/shared/MacDriverUtils.h b/roms/QemuMacDrivers/shared/MacDriverUtils.h new file mode 100644 index 000000000..d93429a94 --- /dev/null +++ b/roms/QemuMacDrivers/shared/MacDriverUtils.h @@ -0,0 +1 @@ +#ifndef __MAC_DRIVER_UTILS_H__
#define __MAC_DRIVER_UTILS_H__
#include <NameRegistry.h>
#include <DriverServices.h>
#include <PCI.h>
void *DTGetProp(RegEntryIDPtr dtNode,
RegPropertyNamePtr name,
RegPropertyValueSize *outSize);
void DTFreeProp(void *);
LogicalAddress GetDeviceBARAddress(RegEntryIDPtr dtNode,
PCIRegisterNumber barOffset,
ByteCount *size,
Boolean *isIO);
OSStatus EnablePCIMemorySpace(RegEntryIDPtr dtNode);
typedef struct IRQInfo {
InterruptSetMember interruptSetMember;
void* refCon;
InterruptHandler handlerFunction;
InterruptEnabler enableFunction;
InterruptDisabler disableFunction;
} IRQInfo;
OSStatus SetupPCIInterrupt(RegEntryID *dtNode, IRQInfo *info,
InterruptHandler handler, void *refCon);
#endif /* __MAC_DRIVER_UTILS_H__ */
\ No newline at end of file diff --git a/roms/QemuMacDrivers/shared/MakeFunction.s b/roms/QemuMacDrivers/shared/MakeFunction.s new file mode 100644 index 000000000..7d3820ff9 --- /dev/null +++ b/roms/QemuMacDrivers/shared/MakeFunction.s @@ -0,0 +1,29 @@ +; MakeFunction sets up everything you need to make an assembly function +; callable from C and debuggable with a symbolic debugger. It does the following: +; - export the function's transition vector +; - export the function name +; - create a toc entry for the function's transition vector +; - create the transition vector, which must contain +; - the function entry point (the name of the function) +; - the TOC anchor (the predefined variable TOC[tc0]) +; - tell PPCAsm to create a function entry point symbol for symbolic debuggers +; - create a csect for the function (one csect per function lets the +; linker do dead code stripping, resulting in smaller executables) + + MACRO + MakeFunction &fnName + EXPORT &fnName[DS] + EXPORT .&fnName[PR] + + TC &fnName[TC], &fnName[DS] + + CSECT &fnName[DS] + DC.L .&fnName[PR] + DC.L TOC[tc0] + + CSECT .&fnName[PR] + FUNCTION .&fnName[PR] + + ENDM + +
\ No newline at end of file diff --git a/roms/QemuMacDrivers/shared/logger.h b/roms/QemuMacDrivers/shared/logger.h new file mode 100644 index 000000000..6a65287c2 --- /dev/null +++ b/roms/QemuMacDrivers/shared/logger.h @@ -0,0 +1,32 @@ +/* + * Creation Date: <1999/03/20 07:38:38 samuel> + * Time-stamp: <2002/07/20 19:29:22 samuel> + * + * <logger.h> + * + * Interface to some logging functions + * + * Copyright (C) 1999, 2002 Samuel Rydh (samuel@ibrium.se) + * + * 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 + * + */ + +#ifndef __LOGGER_H_ +#define __LOGGER_H_ + +#include <Types.h> + +#define DBG(x) do {x;} while(0) + +#ifdef DEBUG_OSI +extern void lprintf( char *fmt,... ); +extern OSStatus CheckStatus( OSStatus value, char *message); +#else +static inline void lprintf( char *fmt,... ) { } +static inline OSStatus CheckStatus( OSStatus value, char *message) { return value; } +#endif + +#endif diff --git a/roms/QemuMacDrivers/shared/vsprintf.c b/roms/QemuMacDrivers/shared/vsprintf.c new file mode 100755 index 000000000..b8eae5c21 --- /dev/null +++ b/roms/QemuMacDrivers/shared/vsprintf.c @@ -0,0 +1,343 @@ +/* + * String functions for logger. + */ + +/* + * linux/lib/vsprintf.c + * + * Copyright (C) 1991, 1992, Linus Torvalds + */ + +/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ +/* + * Wirzenius wrote this portably, Torvalds fucked it up :-) + */ + +#include <stdarg.h> +#include "logger.h" + +/* we use this so that we can do without the ctype library */ +#define is_digit(c) ((c) >= '0' && (c) <= '9') + +static int skip_atoi(const char **s) +{ + int i=0; + + while (is_digit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ + +#define do_div(n,base) ({ \ +int __res; \ +__res = ((unsigned long) n) % (unsigned) base; \ +n = ((unsigned long) n) / (unsigned) base; \ +__res; }) + +static int mstrlen( const char *str ); + +static char * number(char * str, long num, int base, int size, int precision + ,int type) +{ + char c,sign,tmp[66]; + const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; + int i; + + if (type & LARGE) + digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + if (type & LEFT) + type &= ~ZEROPAD; + if (base < 2 || base > 36) + return 0; + c = (type & ZEROPAD) ? '0' : ' '; + sign = 0; + if (type & SIGN) { + if (num < 0) { + sign = '-'; + num = -num; + size--; + } else if (type & PLUS) { + sign = '+'; + size--; + } else if (type & SPACE) { + sign = ' '; + size--; + } + } + if (type & SPECIAL) { + if (base == 16) + size -= 2; + else if (base == 8) + size--; + } + i = 0; + if (num == 0) + tmp[i++]='0'; + else while (num != 0) { +#if 0 + tmp[i++] = digits[do_div(num,base)]; +#endif + int __res; + __res = ((unsigned long) num) % (unsigned) base; + num = ((unsigned long) num) / (unsigned) base; + tmp[i++] = digits[__res]; + } + if (i > precision) + precision = i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) + while(size-->0) + *str++ = ' '; + if (sign) + *str++ = sign; + if (type & SPECIAL) { + if (base==8) + *str++ = '0'; + else if (base==16) { + *str++ = '0'; + *str++ = digits[33]; + } + } + if (!(type & LEFT)) + while (size-- > 0) + *str++ = c; + while (i < precision--) + *str++ = '0'; + while (i-- > 0) + *str++ = tmp[i]; + while (size-- > 0) + *str++ = ' '; + return str; +} + +/* Forward decl. to keep compiler happy. */ +int sprintf(char * buf, const char *fmt, ...); +int vsprintf(char *buf, const char *fmt, va_list args); + + +int vsprintf(char *buf, const char *fmt, va_list args) +{ + int len; + unsigned long num; + int i, base; + char * str; + const char *s; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', or 'L' for integer fields */ + + for (str=buf ; *fmt ; ++fmt) { + if (*fmt != '%') { + *str++ = *fmt; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (is_digit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (is_digit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { + qualifier = *fmt; + ++fmt; + } + + /* default base */ + base = 10; + + switch (*fmt) { + case 'c': + if (!(flags & LEFT)) + while (--field_width > 0) + *str++ = ' '; + *str++ = (unsigned char) va_arg(args, int); + while (--field_width > 0) + *str++ = ' '; + continue; + + case 's': + s = va_arg(args, char *); + if (!s) + s = "<NULL>"; + +#if 0 + len = strnlen(s, precision); +#else + len = mstrlen(s); + if( precision > len ) + len = precision; +#endif + + if (!(flags & LEFT)) + while (len < field_width--) + *str++ = ' '; + for (i = 0; i < len; ++i) + *str++ = *s++; + while (len < field_width--) + *str++ = ' '; + continue; + + case 'p': + if (field_width == -1) { + field_width = 2*sizeof(void *); + flags |= ZEROPAD; + } + str = number(str, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + continue; + + + case 'n': + if (qualifier == 'l') { + long * ip = va_arg(args, long *); + *ip = (str - buf); + } else { + int * ip = va_arg(args, int *); + *ip = (str - buf); + } + continue; + + /* integer number formats - set up the flags and "break" */ + case 'o': + base = 8; + break; + + case 'X': + flags |= LARGE; + case 'x': + base = 16; + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + break; + + default: + if (*fmt != '%') + *str++ = '%'; + if (*fmt) + *str++ = *fmt; + else + --fmt; + continue; + } + if (qualifier == 'l') + num = va_arg(args, unsigned long); + else if (qualifier == 'h') { + num = (unsigned short) va_arg(args, int); + if (flags & SIGN) + num = (short) num; + } else if (flags & SIGN) + num = va_arg(args, int); + else + num = va_arg(args, unsigned int); + str = number(str, num, base, field_width, precision, flags); + } + *str = '\0'; + return str-buf; +} + +int sprintf(char * buf, const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=vsprintf(buf,fmt,args); + va_end(args); + return i; +} + +static int mstrlen( const char *str ) +{ + int i=0; + if( str == NULL ) + return 0; + while( *str++ ) + i++; + return i; +} + +/* + * MOL OSI logging + */ + +#include "LinuxOSI.h" + +void lprintf( char *fmt,... ) +{ + va_list args; + char *p, buf[256]; + + va_start(args, fmt); + vsprintf(buf, fmt, args); + va_end(args); + + OSI_PutC( '*' ); + OSI_PutC( '*' ); + OSI_PutC( '*' ); + OSI_PutC( ' ' ); + for( p=buf; *p; p++ ) + OSI_PutC( *p ); +} + +OSStatus +CheckStatus( OSStatus status, char *message ) +{ + if( status != noErr ) + lprintf("%s\n",message); + return status; +} |