pax_global_header00006660000000000000000000000064142506756770014535gustar00rootroot0000000000000052 comment=b099bab5cec530d022aeba963ba692f110d8ea59 atari800-5.0.0/000077500000000000000000000000001425067567700130675ustar00rootroot00000000000000atari800-5.0.0/COPYING000066400000000000000000000431331425067567700141260ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, 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 Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 St, 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. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. atari800-5.0.0/DOC/000077500000000000000000000000001425067567700134745ustar00rootroot00000000000000atari800-5.0.0/DOC/.gitattributes000066400000000000000000000000351425067567700163650ustar00rootroot00000000000000INSTALL.falcon text eol=crlf atari800-5.0.0/DOC/BUGS000066400000000000000000000111071425067567700141570ustar00rootroot00000000000000Bugs and Known Problems ----------------------- * Cosmic Balance (game) hangs before the intro screen. This is probably due to inaccurate emulation of POKEY interrupts (see below). The program uses a hardware SIO loader as part of a presumed protection scheme. There is a bug in the code which activates the POKEY timers at an absurdly high frequency. This causes repeated interrupts which hangs the program. Probably there is some interaction with SIO which prevents this on a real Atari. A workaround is to invoke the monitor and type "c 10 40" and "cont". * new Pokey engine doesn't switch to mono output in STEREO_SOUND config * new Pokey engine doesn't support VOL_ONLY_SOUND on the second Pokey * a few keyboard-related bugs: e.g. pressing SHIFT+1 and then releasing SHIFT should still give '!' characters * The cycle-exact ANTIC/GTIA/CPU timing is not 100%. This causes display bugs in following programs: - Surf's up (game) (the horizon) - Satan's Hollow (game) (horizon) (confirmed sta WSYNC at WSYNC_C bug) - Dimension X (game) (alignment problem) - Te.mod (demo) (small glitched pixel in the final credits on the bottom left) - Our 5oft Unity Part (demo) (cycle-alignment, probably WSYNC) - Isolation (demo) (vector animations) - 80 Random Moving Rectangles (demo) (top left of rectangles, screen data is modified while drawing a scanline) - Sirius games: Scores and Text in Worm War I, Final Orbit, Spider City, Turmoil, Fantastic Voyage. These games store screen data in page 0 and modify it each scan line. They reuse the same data for each scan line with an LMS on every line. This makes the code look like 2600 code. Emulating this requires trapping writes to page 0 and doing partial ANTIC loads. - Spider City has another bug in the map which is caused by player graphics and HPOS being changed before the player is finished being drawn. This is only possible for wide players. - Extract (demo) (face) * Non-bugs: - Ergo Bibamus (demo) (one pixel of the flower above the perspective scroll) - Mail Order Monsters (game) (some colour changes do not align with text, occurs on a real Atari) - The Break (demo) (bugs on the left side of photo) - Star Raiders (disk image) (game) (doesn't work on XL/XE, select OS/B) - Many other disk images of cartridges that work on XL/XE require OS B because a once-popular cart dumping program for the Atari 800 generates an OS B-specific loader. IIRC it loads the image and jumps into the OS B RESET vector location, which is changed on the XL. - Strip Poker (game) (Atari Basic must be enabled) - Joust (Atari 5200 game) (the game sets all colors to black on PAL systems, you need to switch the emulator to NTSC mode) * The following programs are improved by using the new cycle-exact code: - 8 Players Demo (demo) - Bewesoft's Demo (demo) - Bitter Reality (demo) - Demonic Laughter (music collection) - Extract (graphics collection) - GED (graphics editor) - Joyride (demo) - Mail Order Monsters (game) - Master of the Lamps (game) - Orneta '95 invitro (demo) - Our 5oft Unity Part (demo) - Studio Dream (demo) - Sweet Illusion (demo) - Te.mod (demo) - The Break (demo) - Miner 2049'er (game) (rotating 5's) - Dimension X (game) (title screen upper and lower bars) - Graphics impossible (demo) (Antic magazine) - Power Graph (graphics editor) - Darkness Warrior (picture) * POKEY interrupts are scanline-, not cycle-exact. This causes display or sound bugs in following programs: - Joyride (demo) (white lines on title picture) - Mirax Force (game) (speech) - Saturday Demo (demo) (music) - The Last Guardian (game) (speech) - Digital Trash (demo) (music) * VOL_ONLY_SOUND causes sound bugs in following programs: - Ghostbusters (game) - Overmind (demo) * intensive 130xe-banks switching slows down emulation much. This causes performance problems in following programs: - Impossible but Real (demo) - Sheol (demo) - Total Daze (demo) - Ultra (demo) * The following VAPI images are known to not work: (This list may not be complete, as full VAPI documentation has never been released by the author) - Alternate Reality: The City - Ankh - Attack at EP CYG 4 - Ballblazer Activision (UK) - Jenny of the Prairie - Mercenary - Escape from Targ _ Novagen Software - Mr. Do! - Music Studio (The) - Promoteur - Rescue on Fractalus! _ Activision (UK) - Spy vs Spy - Targets - A Number Game * SDL port uses call back system for filling sound buffer. This causes wrong sound effects (noise) in some games. atari800-5.0.0/DOC/BUILD.PS2000066400000000000000000000006711425067567700146650ustar00rootroot00000000000000To compile use ps2dev from ps2dev.org Additional libraries neeeded: gsKit Additional Modules usbd.irx, kbd.irx, audsrv.irx Convert irx modules to *.s via bin2s, Copy *.s files to src directory. ./configure \ --target=ps2 \ --build=i686-pc-linux-gnu \ --host=mipsel \ --disable-stereosound \ --disable-monitorbreak make To install read DOC/INSTALL.ps2 Thanks Piotr of atari800! Thanks ps2dev! Esp NeoVanglist, author of gsKit. -Troy Ayersatari800-5.0.0/DOC/BUILD.RPI000066400000000000000000000212611425067567700147110ustar00rootroot00000000000000RASPBERRY PI SYSTEM REQUIREMENTS ================================ See README.RPI for system requirements. PRELIMINARY =========== Open a terminal on the directory containing your atari800 files. CREATE THE CONFIGURE FILE ------------------------- Ensure that you have autoconf installed: sudo apt-get install autoconf Create the configure file: ./autogen.sh See INSTALL for further details. INSTALL SDL DEVELOPMENT FILES ------------------------------ Ensure the SDL development files are installed: sudo apt-get install libsdl1.2-dev NATIVE COMPILE ON THE RASPBERRY PI ZERO, 2 or 3 =============================================== Configure and make: ./configure --target=rpi make Make generates the executable file src/atari800. NATIVE COMPILE ON THE RASPBERRY PI 4 or 400 =========================================== Configure and make: ./configure --enable-opengl-by-default make The Pi 4 and 400 have different hardware to earlier models. They run the stock version of atari800, not a special Raspberry Pi variant. However, they are not fast enough to run the stock version without OpenGL hardware video acceleration, so the --enable-opengl-by-default option is required. This sets VIDEO_ACCEL=1 in the configuration file that is created on the first run after installation, enabling acceleration by default. Some Linux distributions have broken OpenGL drivers. Acceleration is generally disabled by default to allow atari800 to run at reduced efficiency on these systems, rather than crashing, but this is not an an issue with Pi OS because its drivers are good. The --enable-opengl-by-default option makes it possible to produce Pi 4/400 packages that install and run correctly, without the user having to turn acceleration on manually via the menu system. The configuration command above is an abbreviated form of: ./configure --with-opengl --enable-opengl-by-default where the first option (--with-opengl) specifies that we wish to build OpenGL support, and the second that we wish to enable it. The first may be omitted because it is the default behaviour for OpenGL-aware systems. CROSS COMPILE FOR THE RASPBERRY PI ZERO, 2 or 3 =============================================== Cross compilation was used to speed up the development of atari800 on early Pis. Given the improved performance of the Pi 2 and later machines, there is no incentive to cross compile any more. Native compilation is simpler and quicker in practice. The following description illustrates the use of options and tools that still exist, and has been retained for historical interest. It was written in 2018, and is no longer updated. To cross compile you need the linaro-gnueabihf toolchain. This can be obtained from GitHub or from official software sources on some versions of Linux. Procedures for both are given below. Wherever you obtain the toolchain there is no guarantee that it will be fully compatible with the latest version of Raspbian. You may have to copy some missing files from the Pi into the toolchain. The procedure is described below. COMPILE WITH THE LINARO TOOLCHAIN FROM GITHUB ============================================= INSTALL ------- The following command installs the toolchain in ~/RaspberryPi/Tools, but you can alter the pathname to put it anywhere you like: git clone https://github.com/raspberrypi/tools ~/RaspberryPi/Tools TOOLCHAIN BIN, INCLUDE AND LIB DIRECTORIES ------------------------------------------ Take note the location of the bin, include and lib directories for later reference. If you are using a 32 bit system they are in the following directory: ~/RaspberryPi/Tools/arm-bcm2708/gcc-linaro-arm-gnueabihf-raspbian/ arm-linux-gnueabihf If you are using a 64 bit system they are in: ~/RaspberryPi/Tools/arm-bcm2708/gcc-linaro-arm-gnueabihf-raspbian-x64/ arm-linux-gnueabihf COPY THE SDL LIBRARY, INCLUDE AND CONFIG FILES INTO THE TOOLCHAIN ----------------------------------------------------------------- See COPY SDL FILES below for details. CONFIGURE AND COMPILE --------------------- Place the following commands in a bash script called compile_rpi or something similar, and place it in your atari800 directory . You can then execute the script with ./compile_rpi. Note you will have to substitute your own version of PATH (that is your normal PATH with the toolchain’s bin directory tagged on the end), also your own version of RPI_SDK. The exported symbols apply only to the process executing the script and will not disrupt the normal setup of your machine. export PATH=/home/cliff/bin:/home/cliff/.local/bin:/usr/local/sbin: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /home/cliff/RaspberryPi/Tools/arm-bcm2708/ gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin export RPI_SDK=/home/cliff/RaspberryPi/Tools/ arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/ arm-linux-gnueabihf ./configure --target=rpi --host=arm-linux -with-sdl-prefix=$RPI_SDK make Make generates the executable file src/atari800. Your system might not have all the required files in place at this stage, in which case configure or make will fail and report any files that are missing. Copy the missing files from the Raspberry Pi into the toolchain (see MISSING FILES below for guidance). Rerun the script until it completes without error. RUN --- Copy the generated atari800 file to the Raspberry Pi, adjust its properties to give execution permission to anyone and run it. COMPILE WITH THE LINARO TOOLCHAIN FROM LINUX SOURCE ==================================================== These instructions relate to Ubuntu based Linux Mint v18.3. The Linaro toolchain is available as a cluster of applications from the official software source. INSTALL ------- sudo apt-get install libc6-dev-armhf-armel-cross sudo apt-get install libc6-armhf-armel-cross sudo apt-get install build-essential sudo apt-get install g++-arm-linux-gnueabihf sudo apt-get install gdb-multiarch TOOLCHAIN BIN, INCLUDE AND LIB DIRECTORIES ------------------------------------------ Take note of the location of the bin, include and lib directories for later reference. They are in: /usr/arm-linux-gnueabihf In the next steps you need to copy files into this directory. You will need root access to do this. COPY THE SDL LIBRARY, INCLUDE AND CONFIG FILES INTO THE TOOLCHAIN ----------------------------------------------------------------- See COPY SDL FILES below for details. CONFIGURE AND COMPILE --------------------- Place the following commands in a bash script in your atari800 directory called compile_rpi or something similar. You can then execute the script with ./compile_rpi. The exported symbol RPI_SDK applies only to the process executing the script and will not be retained on your machine. export RPI_SDK=/usr/arm-linux-gnueabihf ./configure --target=rpi --host=arm-linux –with-sdl-prefix=$RPI_SDK make Make generates the executable file src/atari800. Your system might not have all the required files in place at this stage, in which case configure or make will fail and report any files that are missing. Copy the missing files from the Raspberry Pi into the toolchain (see MISSING FILES below for guidance). Rerun the script until it completes without error. RUN --- Copy the generated atari800 file to the Raspberry Pi, adjust its properties to give execution permission to anyone and run it. COPY SDL FILES ============== Copy the following from the rpi into the toolchain’s lib directory: file /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0.11.4 (or later version). Create a symbolic link called libSDL.so to the copied file in the lib directory. Copy the the following from the rpi into the toolchain’s include directory: directory /usr/include/SDL Copy the following from the rpi into the toolchain’s bin directory: file /usr/bin/sdl-config Ensure permissions are relaxed on sdl-config to allow it to be executed. MISSING FILES ================== The list of missing files will vary with different versions of Raspbian and the toolchain. These notes relate to Raspbian Stretch 7th Sep 2017 and the Linaro Toolchains obtained from GitHub and the Linux Mint 18.3 repository in July 2018. Copy the following from the rpi into the toolchain’s lib directory: file /opt/vc/lib/libbcm_host.so file /opt/vc/lib/libbrcmEGL.so file /opt/vc/lib/libbrcmGLESv2.so Copy the following from the rpi into the toolchain’s include directory: file /opt/vc/include/bcm_host.h directory /opt/vc/include/EGL directory /opt/vc/include/GLES2 directory /opt/vc/include/interface directory /opt/vc/include/KHR directory /opt/vc/include/vcinclude atari800-5.0.0/DOC/BUILD.android000066400000000000000000000120301425067567700156710ustar00rootroot00000000000000Build instructions for the Android port --------------------------------------- If you are looking for instructions on how to use the Android port, what the preferences mean etc. you should check out instead: http://pocketatari.atari.org/android See also DOC/README.android. I. Prerequisites ---------------- To compile the Android port, you are going to need: 1. A working autotools/make environment (e.g. Cygwin or MinGW on Windows). Before trying to build the Android port, it is a good idea to first try building the desktop version, for instance the SDL port. It is a good way to verify that the necessary tools are installed and working correctly. See DOC/INSTALL to build Atari800 on Unix environments, or DOC/BUILD.windows to build under Cygwin and MinGW. 2. The Java JDK. The latest Java 8 release at the time of this writing, ie. 8u271, is known to work correctly: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html Java versions newer than 8 will not work. Note for Linux users: the OpenJDK 8 package, as available in e.g. Ubuntu under the name "openjdk-8-jdk", is a good choice. 3. Apache Ant: https://ant.apache.org/bindownload.cgi 4. The Android SDK. Atari800 requires tools that have since been removed from the newest version of the Android SDK (specifically, "android update project" is no longer available). Until Atari800 gets updated, you will have to use an older version, which unfortunately is no longer downloadable from the Android Developers' website. The necessary parts of the SDK, though, can be obtained through direct download links. Here's how to get them: a) Get Android SDK Tools not newer that v. 25.2.5, through a direct download link. As of May 2018 the functioning links are in the form of: http://dl-ssl.google.com/android/repository/tools_r25.2.5-.zip where shall be replaced with one of: * windows - for Windows 32/64-bit * macosx - for MacOS X * linux - for Linux 64-bit b) Create a directory for the SDK, e.g. /path/to/android-sdk. Unzip the downloaded SDK there - it should create a subdirectory named tools/. c) Set the JAVA_HOME environment variable to point to the root directory of your JDK installation, e.g.: # export JAVA_HOME='C:\Java\jdk1.8.0_172' d) Navigate to the SDK's tools/bin/ directory, e.g.: # cd /path/to/android-sdk/tools/bin e) Run sdkmanager to install SDK Platform Tools, SDK Build Tools and platform version 20: # ./sdkmanager "platform-tools" "build-tools;27.0.3" "platforms;android-20" Note: On Windows the tool is called sdkmanager.bat isntead of sdkmanager. 5. The Android NDK Again, Atari800 has not been adapted to the latest changes in the NDK, so you need to use a version not later than r15c. Get it from: https://developer.android.com/ndk/downloads/older_releases and unzip the archive to a directory, e.g. /path/to/android-ndk-r15c. 6. Assorted libraries The old Android NDK might require some old libraries that are no longer installed by default on modern Linux distributions. For example, it requires: libncurses5 II. Setting up the environment ------------------------------ 1. Set the ANDROID_NDK_ROOT environment variable to point to the root directory of the NDK that you unzipped earlier, e.g.: # export ANDROID_NDK_ROOT='/path/to/android-ndk-r15c' Note for Windows: Since the Windows NDK is built without Cygwin awareness, the path in ANDROID_NDK_ROOT should be set using windows notation, e.g.: # export ANDROID_NDK_ROOT='C:\path\to\android-ndk-r15c' Also, make sure the NDK is accessible by normal Windows methods (i.e. no symlinks in Cygwin). 2. Set the JAVA_HOME environment variable to point to the root directory of your JDK installation, e.g.: # export JAVA_HOME='C:\Java\jdk1.8.0_172' 3. Make sure that ant is accessible in PATH. If not, add it: # export PATH="/path/to/apache-ant-1.10.9/bin:$PATH" 4. Add the NDK root, gcc and android tools paths to PATH, e.g.: # export PATH="/path/to/android-ndk-r15c:/path/to/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt//bin:/path/to/android-sdk/tools:/path/to/android-sdk/platform-tools:$PATH" (Replace above with the directory that matches your build environment, e.g. linux-x86_64, windows-x86_64, ...) III. Compiling -------------- 1. Unpack the source tarball of Atari800. 2. Go to the atari800 directory and update the Android project files: # android update project --path src/android --name colleen --target "android-20" Note: On Windows the tool is called android.bat isntead of android. 2. If the configure scrips is missing, create it: # ./autogen.sh 3. Configure the build. Generally you should enable exactly the features listed below: # ./configure --target=android --disable-monitorbreak --enable-pagedattrib --enable-seriosound --disable-crashmenu --disable-monitorasm --disable-monitorhints --without-readline --enable-clipsound --disable-riodevice Enabling or disabling other reatures is not guaranteed to build correctly. 4. Build the APK package: # make After a while, the APK package should appear in: src/android/bin/colleen-debug.apk Cheers, Kostas atari800-5.0.0/DOC/BUILD.linux_package000066400000000000000000000163251425067567700170760ustar00rootroot00000000000000HOW TO BUILD A LINUX DEB PACKAGE FOR GENERAL RELEASE ==================================================== INSTALL PACKAGE DEVELOPMENT TOOLS ================================= Ensure that you have the necessary tools installed: sudo apt-get install build-essential sudo apt-get install fakeroot sudo apt-get install devscripts OBTAIN SOURCE CODE ================== Download the latest release of the source code from the Github Releases Area (https://github.com/atari800/atari800/releases). Look for a file with a name like 'atari800-4.2.0-src.tgz'. Unzip the source code. The contents will go into a directory called 'atari800-4.2.0' or similar, which will be referred to in these notes as the 'atari800' directory. Do not obtain the source code by cloning the current atari800 repository because this may have been modified since the last release, and may contain partially developed and untested code. COMPILE WITHOUT ERROR ===================== Unzip the code and native compile it on the target machine. Follow the instructions in the appropriate atari800/DOC file: INSTALL - see Building the Emulator on most platforms BUILD.RPI - specific instructions for the Raspberry Pi Confirm that the compilation completes without error. UPDATE CONFIGURATION FILE FOR PACKAGING ======================================= Temporarily rename or move the existing configuration file (.atari800.cfg in the home directory), then run atari800 to generate a new default file, and copy it to /debian/atari800.cfg (note there is no '.' preceeding 'atari800.cfg'). This copy will placed in the package for reference. Reinstate the original copy of .atari800.cfg UPDATE DEBIAN CHANGELOG ======================= Update file 'atari800/debian/changelog'. You can simply edit this manually, but the system is fussy about the exact format, location of spaces etc., so it is handy to use the debchange command as follows. Open a terminal on the atari800 directory. debchange Select an editor from the presented menu. Debchange guesses a new version number and other details and enters some new lines into the log for you. The top of the file should look something like this: atari800 (4.2.0-1ubuntu1) UNRELEASED; urgency=medium * -- Cliff Sat, 04 Jul 2020 10:06:18 +0100 Edit these lines as appropriate. For example: atari800 (4.2.0-1) unstable; urgency=low * New upstream version 4.2.0 -- Antonin Kral Sat, 04 Jul 2020 10:06:18 +0100 The version number '4.2.0-1' will be used as part of the name of the package you are going to build. Label the release 'unstable'. This does not mean it is actually unstable, just that no tests have been performed at this stage to prove otherwise. You may add additional comments if you wish, on lines beginning with two spaces and a '*'. Set urgency to 'low', or 'medium' for major updates. You should replace your default user information with the name and email address of the current package maintainer, as identified in debian/README.debian. ADJUST BUILD OPTIONS IN THE DEBIAN RULES FILE ============================================= CONFIGURATION OPTIONS --------------------- The debian rules file 'atari800/debian/rules' contains the following command (split over two lines): ./configure \ --with-video=sdl --with-sound=sdl You don't need to change this if your are building the stock SDL version. Otherwise edit the second line to specify configuration options for the target machine. For example, the command required for the older Raspberry Pis (Zero, 2 and 3) is: ./configure \ --target=rpi DOCUMENTATION FILE OPTIONS -------------------------- If you wish to package any special documentation relating to the target machine, add commands under this existing comment: # Install docs in proper directory and gzip them or if the files are small and don't need gzipping, put them under this comment: # These are too small to gzip For example, you might add the following command to copy README.RPI into Raspberry Pi packages: cp DOC/README.RPI debian/tmp/usr/share/doc/$(P)/README.RPI BUILD THE PACKAGE ================= dpkg-buildpackage -B -uc Even though you started with a version of the source code that compiles without error, it is possible that warnings and errors may be reported at this stage. Warnings can usually be ignored, but you will have to investigate and correct any errors. The above command creates three files and places them in the parent of the atari800 directory. They will have names like these: atari800_4.2.0-1_amd64.buildinfo - Checksums and a list of dependencies in the .deb file. atari800_4.2.0-1_amd64.changes - Changelog update and checksums for the .deb and .buildinfo files. atari800_4.2.0-1_amd64.deb - The .deb package file for release. 'amd64' indicates the architecture of the machine that the build was done on. INSTALL ======= on the .deb file to install it. or and select the appropriate menu item, or etc.. or use the command: sudo dpkg -i atari800_4.1.0-1_amd64.deb TEST ==== Check that the atari800 command runs the emulator successfully: atari800 The command should also work with options, for example: atari800 -v atari800 -help man atari800 UNINSTALL ========= You can unistall the package if desired with: sudo dpkg --remove atari800 This removes the command and documentation, but leaves the configuration file .atari.cfg in place. RENAME THE PACKAGE ================== The default names of packages are sometimes not very informative, but you may change them to anything you like. For example, the name of the 4.2.0 Raspberry Pi 4 package was changed from atari800_4.2.0-2_armhf.deb to atari800_4.2.0_rpi4_buster.deb ISSUE A PULL REQUEST TO UPDATE THE DEBIAN CHANGELOG =================================================== Enter the new lines you created in atari800/debian/changelog into the master of this file on Git, to keep the record intact. DISTRIBUTION VIA THE GITHUB RELEASES AREA ========================================= Send the three files created (.buildinfo, .changes and .deb) to the owner of the Git repository (https://github.com/atari800/atari800). The owner will post the .deb file to the releases area (https://github.com/atari800/atari800/releases) for download by users. This is a shortcut method. It is quicker than distribution via the Debian Project. When a new release is announced on the Atari800 mailing list, anyone in the community can follow the procedure described in this document and make it available to users without delay. DISTRIBUTION VIA THE DEBIAN PROJECT =================================== Formal distribution via the Debian Project can only be performed by the package maintainer, a listed Debian member. The procedure is rigourous in order to ensure the quality of the software. Depending on how much free time the maintainer has it may take many months to complete. Packages distributed in this manner become available in official repositories. Users may download and install them using the apt-get command or a software manager. atari800-5.0.0/DOC/BUILD.linux_rpi_package000066400000000000000000000162361425067567700177510ustar00rootroot00000000000000HOW TO BUILD A TWO-BINARY RASPBERRY PI PACKAGE FOR GENERAL RELEASE ================================================================== Atari800 packages may be built for the Raspberry Pi as described in DOC/BUILD.linux_package. However, it is not possible to build a single package that will run on all the different models of Pi this way. This document describes how to build a two-binary package that supports the full range of Pis. It installs two commands: atari800rpi - runs a special RPi version for the low power Zero, 2 and 3 atari800stk - runs the stock Linux version for the Pi 4 and 400 All the scripts and data files required for the build are in atari800/raspbian. NOT A DEBIAN BUILD ================== The Debian standard requires all software to be hardware independent, but the atari800rpi binary uses libraries brcmGLESv2 and brcmEGL which are specific to Broadcom chips. So although Debian tools are used for the build, the resulting package does not comply with the standard, and cannot therefore be distributed via the Debian Project. It can however be distributed via the Raspbian Team and the GitHub releases area. INSTALL PACKAGE DEVELOPMENT TOOLS ================================= Ensure that you have the necessary tools installed: sudo apt-get install build-essential sudo apt-get install fakeroot sudo apt-get install devscripts OBTAIN SOURCE CODE ================== Download the latest release of the source code from the Github Releases Area (https://github.com/atari800/atari800/releases). Look for a file with a name like 'atari800-4.2.0-src.tgz'. Unzip the source code. The contents will go into a directory called 'atari800-4.2.0' or similar, which will be referred to in these notes as the 'atari800' directory. Do not obtain the source code by cloning the current atari800 repository because this may have been modified since the last release, and may contain partially developed and untested code. COMPILE WITHOUT ERROR ===================== Unzip the code and compile two versions as described in DOC/BUILD.RPI, one for the Pi Zero, 2 and 3; and another for the Pi 4 and 400. You can use any model of Pi for both compilations. Confirm that the compilations complete without error. UPDATE THE CHANGELOG ==================== Update file 'atari800/raspbian/changelog'. You can simply edit this manually, but the system is fussy about the exact format, location of spaces etc., so it is handy to use the debchange command as follows. Open a terminal on the atari800 directory. debchange -c raspbian/changelog Select an editor from the presented menu. Debchange guesses a new version number and other details and enters some new lines into the log for you. The top of the file should look something like this: atari800 (4.2.0-1) UNRELEASED; urgency=medium * -- Cliff Sat, 04 Jul 2020 10:06:18 +0100 Edit these lines as appropriate. For example: atari800 (4.2.0-1) unstable; urgency=low * New upstream version 4.2.0 -- Cliff Hatch Sat, 04 Jul 2020 10:06:18 +0100 The version number '4.2.0-1' will be used to construct the name of the package. Label the release 'unstable'. This does not mean it is actually unstable, just that no tests have been performed at this stage to prove otherwise. You may add additional comments if you wish, on lines beginning with two spaces and a '*'. Set urgency to 'low', or 'medium' for major updates. Enter your name and contact details. In Debian releases the name of an accredited Debian member (the package manager) belongs here, but this is not a Debian release, so these details are informal, but nevertheless useful because they provide a build record and a contact for enquiries. BUILD THE PACKAGE ================= The system expects to find build information in a directory called "debian", not "raspbian", so some temporary renaming is necessary: mv debian debian_save mv raspbian debian then build: dpkg-buildpackage -B -uc Even though you started with a version of the source code that compiles without error, it is possible that warnings and errors may be reported at this stage. Warnings can usually be ignored, but you will have to investigate and correct any errors. If the build reports any missing libraries, libreadline7 for example, you will need to install them and build again: sudo apt-get install libreadline7 Finally, restore the original directory names: mv debian raspbian mv debian_save debian The dpkg-buildpackage command creates three files and places them in the parent of the atari800 directory. They will have names like these: atari800_4.2.0-1_armhf.buildinfo - Checksums and a list of dependencies in the .deb file. atari800_4.2.0-1_armhf.changes - Changelog update and checksums for the .deb and .buildinfo files. atari800_4.2.0-1_armhf.deb - The .deb package file. RENAME THE GENERATED FILES ========================== 'armhf' in the generated file names indicates the architecture of the machine that the build was done on. It is set automatically, but it is not correct in this case, because the build is Raspberry Pi specific and will not run on all armhf machines. Rename the files, substituting 'rpi' for 'armhf': atari800_4.2.0-1_rpi.buildinfo atari800_4.2.0-1_rpi.changes atari800_4.2.0-1_rpi.deb INSTALL ======= on the .deb file to install it. or and select the appropriate menu item, or etc.. or use the command: sudo dpkg -i atari800_4.2.0-1_rpi.deb TEST ==== Check that the atari800 command works. It should produce a message telling you about the atari800rpi and atari800stk commands. Check that the atari800rpi or atari800stk command (whichever is appropriate for the machine you are using) runs the emulator successfully: These commands should also work with options, for example: atari800rpi -v atari800rpi -help man atari800rpi UNINSTALL ========= You can unistall the package if desired with: sudo dpkg --remove atari800 This removes the command and documentation, but leaves configuration file .atari.cfg in place. ISSUE A PULL REQUEST TO UPDATE THE CHANGELOG ============================================ Enter the new lines you created in atari800/raspbian/changelog into the master of this file on Git, to keep the record intact. DISTRIBUTION VIA THE GITHUB RELEASES AREA ========================================= Send the three files created (.buildinfo, .changes and .deb) to the owner of the Git repository (https://github.com/atari800/atari800). The owner will post the .deb file to the releases area (https://github.com/atari800/atari800/releases) for download by users. DISTRIBUTION VIA THE RASPBIAN TEAM ================================== Send the three files (.buildinfo, .changes and .deb) to the Raspbian team (https://www.raspbian.org/RaspbianTeam) for distribution via the Raspberry Pi repositories. Packages distributed in this manner become available in official repositories. Users may download and install them using the apt-get command or a software manager. atari800-5.0.0/DOC/BUILD.windows000066400000000000000000000155131425067567700157540ustar00rootroot00000000000000Building Atari800 for MS Windows ================================ There are several ways to build an Atari800 executable on Windows: - using a Unix-like environment such as Cygwin, MinGW or MSYS2, - using Microsoft 32-bit C/C++ Compiler. Table of contents: I) Building using Cygwin, MinGW, MinGW-w64, MSYS2 etc. I.1) Building the DirectX version I.2) Building the SDL version I.3) Notes on building using Cygwin I.4) Notes on building using MinGW I.5) Notes on building using MSYS2 II) Building using Microsoft 32-bit C/C++ Compiler I) Building using Cygwin, MinGW, MinGW-w64, MSYS2 etc. ------------------------------------------------------ All of these toolchains provide a Unix-like environment on Windows, so building Atari800 with them is based on the same configure/make sequence as on other platforms. The procedure is described in detail in DOC/INSTALL, section "Building the Emulator on most platforms" - read it before continuing below. There are several configure options applicable to the Windows platform: 1. Type "./configure --target=windx" to build a version that uses DirectX for display, sound and input. 2. Type "./configure --with-video= --with-sound=" to build other versions. The available options are: * --with-video: * sdl - uses SDL, * ncurses - uses the ncurses library, * no - pure console interface. * --with-sound: * win - uses WinMM, * sdl - uses SDL, * no - no sound. You can add other configure options if desired. The recommended version is --with-video=sdl --with-audio=sdl, as it has the largest set of features. I.1) Building the DirectX version --------------------------------- You will need the DirectX SDK release not newer than the one from August 2007, as it is the last one to contain the now-deprecated DirectInput libraries. I.2) Building the SDL version ----------------------------- The procedure for building the SDL version is described in DOC/INSTALL, section "Building the Emulator for SDL". I.3) Notes on building using Cygwin ----------------------------------- 1. Get Cygwin at http://cygwin.com/ 2. The executable requires the following DLLs: /bin/mgwz.dll and (for SDL) sdl.dll - copy them to the same directory as atari800.exe. I.4) Notes on building using MinGW ---------------------------------- 1. To build the SDL version with OpenGL support, get the OpenGL headers at http://www.libsdl.org/extras/win32/common/opengl-devel.tar.gz . See also http://www.libsdl.org/extras/win32/mingw32/README.txt 2. If the configure script does not find the SDL library, you might need to add "--with-sdl-prefix=/mingw" to the configure options. I.5) Notes on building using MSYS2 ---------------------------------- 1. Install MSYS2 itself: - Based on: https://www.msys2.org/ https://github.com/msys2/msys2/wiki/MSYS2-installation a) Get the MSYS2 installer package from https://www.msys2.org/ . Choose the one that matches your Windows architecture (i686 or x86_64). The instructions below is tailored towards MSYS2 release dated 20180531, which was the latest at the time of this writing. b) Run the installer to install the environment. - Note: MSYS2 provides 3 Start menu shortcuts to the MSYS shell: "MSYS2 MSYS" - use this and only this shell to install or remove packages. "MSYS2 MinGW 32-bit" - use this shell to build 32-bit programs. "MSYS2 MinGW 64-bit" - use this shell to build 64-bit programs. c) If not selected at the end of installer, run "MSYS2 MSYS" shell (from Start menu). d) Update the environment using pacman -Syuu. Run it multiple times until no more packages are left to update. Note: if after an update there appears a message to "exit pacman without returning to the MSYS shell", then close the MSYS shell window, and use Task Manager to kill the "pacman.exe" process that is left hanging. Then re-run "MSYS2 MSYS" to continue updating. 2. Install packages required by Atari800: - Note: to install a package, enter pacman -S ... a) Start the "MSYS2 MSYS" shell. b) If you want to regenerate the configure script, install the following packages: - autoconf - perl c) To build Atari800, install: - make To build the 32-bit binary, install: - mingw-w64-i686-gcc - mingw-w64-i686-SDL - mingw-w64-i686-readline - mingw-w64-i686-libpng To build the 64-bit binary, install: - mingw-w64-x86_64-gcc - mingw-w64-x86_64-SDL - mingw-w64-x86_64-readline - mingw-w64-x86_64-libpng 3. Build Atari800: a) Start the "MSYS2 MinGW 32-bit" shell to build the 32-bit binary, or the "MSYS2 MinGW 64-bit" shell to build the 64-bit binary. b) Follow the common build procedure as described in DOC/INSTALL, section "Building the Emulator for SDL". c) The executable requires the following DLLs - copy them from mingw32/bin or mingw64/bin (depending on which binary you have built) to the same directory as atari800.exe: - libpng16-16.dll - libreadline7.dll - libtermcap-0.dll - SDL.dll - zlib1.dll For the 32-bit binary also copy: - libgcc_s_dw2-1.dll - libwinpthread-1.dll II) Building using Microsoft 32-bit C/C++ Compiler -------------------------------------------------- Atari800 for Windows can be built using command-line tools from Microsoft Visual C++ 2005. Avoid older compilers such as VC++ 6 because they are buggy (even with service packs) and unsupported. In addition to the compiler suite you need Windows Platform SDK (included in Visual C++ 2008 or newer) and DirectX SDK (not newer than the August 2007 version, as it is the last one to contain the now-deprecated DirectInput libraries.) Set "Path", "INCLUDE" and "LIB" environment variables to point to the correct locations in VC++, PSDK and DXSDK. 1. Install the ZLIB library: a. Download the source code from http://www.zlib.org b. Remove -MD from CFLAGS in win32\Makefile.msc c. Compile with "nmake /f win32\Makefile.msc zlib.lib". d. Copy zlib.h and zconf.h to the Include directory of VC++. e. Copy zlib.lib to the Lib directory of VC++. 2. Install the LIBPNG library: a. Download the source code from http://www.libpng.org b. Remove -MD from CFLAGS in scripts\makefile.vcwin32 c. Compile with "nmake /f scripts\makefile.vcwin32". d. Copy png.h and pngconf.h to the Include directory of VC++. e. Copy libpng.lib to the Lib directory of VC++. OR 1&2. #undef HAVE_LIBPNG and HAVE_LIBZ in Atari800's src\win32\msc\config.h. The compiled emulator won't handle zlib-compressed disk images and state files and won't produce PNG screenshots. 3. Navigate to the src directory of Atari800 sources. 4. Type "nmake /f win32\msc\Makefile". 5. If you are getting linking errors saying something about MSVCRT then you probably ignored step 1b or 2b. 6. Copy atari800.exe to destination directory. atari800-5.0.0/DOC/CHANGES.OLD000066400000000000000000002527661425067567700151260ustar00rootroot00000000000000/***********************************************************************\ |* This file is obsolete now. Update ChangeLog and NEWS files instead. *| \***********************************************************************/ ---- o the configure process can be silent now - use --enable-FEATURE or --disable-FEATURE (e.g. --disable-SOUND). Sent by Dale Scheetz (the original author is Alan Shutko). o completely refactored UI by Vasyl. Now allows different (port specific) GUIs. o Basic XE (OSS Supercart) should work now o nonblocking open of sound device on linux o ANTIC.C is no longer LONG_ALIGNMENT dependent. Macros READ_U32/WRITE_U32 take care of the memory access. o a fix in antic.c (lines 408-411) for artefacting on systems requiring aligned memory access. Changes in 1.0.7 ---------------- o atari_x11.c: Added clipping and made the -large and -huge work with XShm. The XShm code was rewritten, so that only the screen-portion which has been changed is copied to the X-server (on older PCs with PCI-graphic this brings a noticable performance gain). New options are: -clip_x -clip_width -clip_y -clip_height atari.h: commented out USE_COLOUR_TRANSLATION_TABLE because it produced funny results with options -large and -huge. Rudolf Opalla o introduced autoconf stuff o win32: standard wave output routines added to sound driver (-wavonly switch to disable direct sound) o sound_update removed from port specific routines (moved to atari.c) and some other sound fixes o unix, windows and dos makefiles rewritten and reorganized o all open() calls on regular files replaced by fopen(). o win32 conditionals removed; new win32 port o atari_sleep_ms() replaced by new function atari_sync() with better synchronization code (lasttime is increased by constant interval and previously could differ depending on gettime call delay) o bug causing vesa modes not to be detected correctly fixed. o cpu_m68k.s is 100% compatible with the cpu.c now o Don Mahurin added sound support to curses version. Also Voxware_ routines were renamed. o it seems that zero in first byte of block 41/C1 should be interpreted as 00, not 0x100 [eg. 1st disk of Big Demo couldn't be read because of this]. Jakub Bogusz o double density DCM disks weren't handled properly ("Output desynchronized...") [eg. 1st disk of Sweet Illusions demo couldn't be read because of this] o some preliminary code for UI menu switch for readonly/readwrite disk in UI.C. This needs to be discussed first, then finished. Changes in 1.0.6 - 2000/10/09 ---------------- o cpu_m68k.s updated - the rest is Piotr's work: o BUGS updated o antic: fixed PMG collisions bug in horizontally scrolled lines (bug was found by Krzysztof) o antic: PMG flickering depends on VDELAY setting o makefile.dos: in 1.0.4 BASIC and PDCURSES weren't compilable, because of pokeysnd call, while pokeysnd wasn't linked - fixed o antic,gtia: few warnings killed o devices: -H1..-H4 options work correctly now o E_Device, K_Device and AtariEscape moved from atari.c to devices.c o E_Device and K_Device ESC codes work only in BASIC version now o sio: debug code removed o devices, rt-config: H: devices can be set to read-only mode: use -hdreadonly option or HD_READ_ONLY config file item (0 disables, 1 enables read-only mode). For safety, by default it is on o BASIC version: EOF in stdin quits emulator. BASIC version can be used now with redirected input (from a script file, for example). Changes in 1.0.5 - 2000/10/02 ---------------- o possibility to set color saturation Now you can set black level, white level, color intensity and even color shift if you prefer artificial palettes. Added config option allows to select whether include existing palettes into binary. By default artificial palette is generated (by surprise it doesn't look very bad) New options are: -black -white -colors -colshift -realpal -oldpal -foxpal Krzysztof o sound.c got -help o bug causing vesa modes not to be detected correctly fixed. o sound_dos.c compiler warnings fixed o ui.c - reading of root dirs corrected o pokey.c - better reading of saved pokey state o statesav.c - strict version check and version increased to 3 o binload.c - C flag and boot flag are set now (some programs need it) o joystick autofire emulation (dos and svgalib only). F11 key switches between three modes: normal, autofire when fire pressed and autofire all the time. It can be quite useful for some games >:) o gtia.c fix - pm_scanline was too short when HSCROL was used. 'mountain king' game suffered from this bug. o atari_x11.c - small fix for keyrepeat (fvwm2, switching back to the screen 2 FocusIn requests are generated). o DOS SoundBlaster driver updated. The new SB code is very clean, and should fix the problem that one person had with no sound being generated. If Atari800 enables near pointers (via __djgpp_enable_nearptr()), you may want to define DJGPP_USE_NEARPTR; it will make the SB driver a bit faster, as it can avoid an extra buffer copy to the low DOS area. o vga_asm.s patched to quell a compiler warning. o sio.c - new routine to rotate disks and slight parameter change in SIO_Mount that allows a disk to be opened read only even if it is a read/write image. o sndsave.[ch] (new module) - writes out .WAV files of arbitrary bitrate. o linux joystick patch - both keyboard emulation and real joystick can be used for multiplayer games now. Changes in 1.0.4 - 2000/06/30 ---------------- o Amiga version updated o CRASH menu fixed --Piotr's changes: o UI: added artifacting mode selection o DOS/VGA sources moved to 'dos' subdirectory, Makefile.dos and atari_vga.c updated o DOS/VGA: F8 disabled in UI o DOS/VGA: mouse initialized after return from monitor, right button enables light pen cursor o gtia: TRIG latches (enabled by bit 2 of GRACTL) implemented o antic: light pen emulation improved o antic: GTIA modes implemented for ANTIC modes 9, 0xb and 0xc o atari_screen moved from antic.[ch] to atari.[ch] o old BIN loader removed o obsolete NAS support removed; Atari_AUDC/AUDF/AUDCTL routines removed - now pokey.c directly calls pokeysnd.c Changes in 1.0.3 - 2000/06/13 ---------------- o SVGALIB and Falcon ports save interlaced and non-interlaced screenshots by pressing Shift+F10/F10 (this is just to sync it with DOS version) -- Piotr: o new BIN loader rewritten - hopefully it can load any valid executable. Please test if there's a file, which it can't run. o special support for Montezuma's Revenge removed - it's not needed for playing this game o UI: - fixed 'Cold Start' item - name was too long - fixed background width - was too wide - charset extracted from 5200's ROM - menu is visible in 5200 mode - whenever prompted for filename, you can cancel with ESC - added 'Enter monitor' item - added PCX screenshots with user-specified filename (F10 and Shift+F10 still generate it automatically) -- Raster: o hot keys in UI aligned right o when CPU encounters invalid instruction (CIM or unassigned ESC) the new Crash menu appears. Now you can select Reset, Reboot, go to Menu or Monitor. You can also try to continue running the program or exit the emulator. o CPU.C: CIM instruction emulation doesn't do PC-- so that the 'continue' function of Crash menu can work Changes in 1.0.2 - 2000/05/29 ---------------- o Matt fixed his DOS SB driver -- Piotr's changes: o gray.act palette o DOS/VGA: assembly part of x_open moved to vga_asm.s as x_open_asm - this should make new djgpp happy :) o cpu: opcodes $8b and $ab restored - they work different on Atari than on C64 o monitor: READ and WRITE don't quit emulator on error o monitor: S can search for any number of bytes o monitor: HELP corrected - [] used for optional parameters only Changes in 1.0.1 - 2000/05/25 ---------------- o ANTIC>IA: another PMG speed optimization o cpu_m68k.s: updated to reflect recent Piotr's changes o CPU: 6 undocumented instructions fixed Changes in 1.0.0 - 2000/05/22 ---------------- o Atari Falcon - makes use of draw_display which greatly improves playability (on my Falcon040/40MHz most games run at 100% of original speed with -refresh=5) - Sound_Pause/Continue implemented (no more sound in menu). - UI hotkeys implemented (try out Alt+A, for example) o UI: hotkeys are listed so everybody can learn them easily o new sound card driver for DOS version from Matt Conte This allows us to increase replay freq and also implement STEREO sound in DOS Try out command line parameters "-dsprate 44100" and maybe also "-bufsize 880" (bufsize is 440 bytes by default which I think is too small for higher replay rates) o fixed some wrong fopen calls - please always use "rt"/"wt" for reading/writting text files and similarly "rb"/"wb" for reading/writting binary files. -- And Piotr's changes follow: o configure program checks endianess and defines ATARI800_BIG_ENDIAN if necessary - POKEYSND_BIG_ENDIAN and ANTIC_BIG_ENDIAN removed o configure program defines ATARI800_64_BIT if sizeof(long) != 4 - __alpha__ kludge removed o added -fomit-frame-pointer to makefile.dos - with this ebp register can hold local variables o assembler routines from DOS/VGA port grouped in vga_asm.s - this fixes problems with -fomit-frame-pointer and hopefully with new DJGPP - please check o diskled fixed - drawn on screen also when sio patch active - support for modes with less than 240 visible lines - Atari_Set_LED called only when state changes - this speeds up sio and prevents keyboard hang-ups in DOS/VGA with keyboard led o DOS/VGA: now middle of Atari screen visible in 320x200 - previously lines 24..223 ANTIC/GTIA fixes: o PMG flickering corrected again - DL opcode is passed to missiles, lsb of address is passed to player 3 o need_load fixed - correct graphics and timing when DMA switched on and off o colour_translation_table fixed - now colours in X11/SHM are hopefully correct in all modes except artifacting - colour_translation_table isn't used unless USE_COLOUR_TRANSLATION_TABLE is defined (see atari.h) - if used, colour_translation_table should be UWORD with msb = lsb o playfield/PMG priorities handling completely rewritten - now all playfield/PMG/prior combinations are handled correctly - PMG is slightly faster Changes in 0.9.9j ----------------- o Amiga port is compilable (Pen, Sound Start/Stop) o Unix port is compilable (Pen, Sound Start/Stop) o Atari Falcon port is not compilable yet! I left the patches at home :-( o Makefile.unix: call sub-makes with "$(MAKE)" instead of "make". Helps on machines where GNU make is not named "make" o atari.h: set ULONG and SLONG to be unsigned int on Alpha machines, as longs there are 8 bytes (64bit). See also TODO file. o pokeysnd.c: fixed unaligned accesses. Tested on Alpha (= little endian) o UI: the order of options changed. o UI: driven by hotkeys diirectly from emulation Currently DOS and Linux SVGALIB versions only: * Hot keys (with left ALT): ALT+D Disk management ALT+C Cartridge management ALT+R Run BIN file ALT+Y Select system ALT+O Sound Mono/Stereo ALT+S Save state ALT+L Load state ALT+A About (by pressing ESC you go back to emulation) Other platforms: set alt_function (defined in ui.c) to MENU_xxx (see atari.h) and call the UI. Example for Disk Management: alt_function = MENU_DISK; keycode = AKEY_UI; And the usual huge list of changes from Piotr follows ----------------------------------------------------- o DD XFD images fixed - now both 128- and 256-byte boot sectors supported o cpu.c can be now compiled for using switch() - cpu_nogoto.c is no longer necessary (Petr: use -DNO_GOTO when compiling) o many 6502's unofficial opcodes fixed o 'DMACLT' typo in symtable fixed ANTIC/GTIA fixes: o collisions in hi-res fixed - now Chicken and Super Bunny work o horizontal scroll in modes 8 and 9 fixed o PM5 in GTIA 11 fixed o mode 2 / GTIA 11 fixed o mode 2 / GTIA 10 implemented o PMG flickering made more accurate o some optimizations in ANTIC - mostly for hi-res modes (drawn with words) and for blank lines (drawn with memset, if possible) o simplified Save/Load State in ANTIC and GTIA (Petr: ==> state files are no longer compatible with previous versions (actually the compatibility's been broken a few versions ago already)) o artifacting works now on long aligning and big endian machines (Petr: seems like big endian machines have to define -DANTIC_BIG_ENDIAN for proper compiling). o DMA for DL fixed o color table fix: - now table is defined as global and compiled to separate object, so it exists once in executable (previously was static - included by both platform-specific stuff and ataripcx) - '-palette filename' command line option allows loading external palette file. Palette should be in '.act' file format, which is supported by Photoshop. Format is very simple - 256 times (R,G,B), single byte per component. I've implemented this option because I think color table should be fixed. At the moment luminaces 14 and 15 are identical and other luminaces aren't also linear. I include a palette created by me - fox.act. It has linear luminaces, however it is ugly compared to current Atari800 palette - default.act. It would be great if someone could create realistic palette, best by grabbing graphics from real machine with a video card. o fixes for BASIC version o mode f / GTIA 11 colours fixed o delayed GTIA 11 - colours are propagated to next line. Now graphics using dark GTIA 11 lines for colouring gray images is really colourful, like on real Atari o emulation of a GTIA bug. While turning off GTIA mode while displaying hi-res mode, GTIA doesn't back to hi-res, but starts generating 4-colour graphics. This fixes title screen in 'Studio Dream' demo. Changes in 0.9.9i ----------------- o fixed my stupid bug in Stereo sound emulation (thanks Marek) o SHIFT_KEY exported from atari_x11.c now (thanks Mark Watson for the hint) o UI: Select System does cancel the selection by Esc correctly now (thanks Raster for the hint) o SIO: result wasn't set in default: (thanks Sebastian) o Amiga changes by ------------- atari_amiga.c old Joystick code was buggy, it does work now. supports the global draw_display variable now. about Requester works now. general cleanup and some comments in atari_amiga.c amiga/support.c Added amiga/ReadMe Added amiga/Atari800.guide has been rewritten (not really finished yet) USAGE removed old Amiga descriptions and refered to the Atari800.guide file sio.c removed the #ifndef AMIGA. Only one is still left (devices.c, that's because I can't test this). List of changes from Piotr -------------------------- o ANTIC: WSYNC fixed - changed xpos < WSYNC_C to xpos <= WSYNC_C :) This fixes colours in Pitfall II o ANTIC: PMG flickering fixed. Data should be taken from data bus, not rand(). :) However, it is get now from memory at regPC. o monitor: COLPM0 typo in symtable[] fixed o IRQ interrupts fixed: - are reset by POKEY, not CPU - real SIO is faster and more accurate - POKEY counters are more accurate o diskled: Platform-independent disk LED - drawn on screen. Can be disabled with #define NO_LED_ON_SCREEN. o DOS version: - 320x240 made default video mode - keyboard layout PC/Atari can be set at startup with 'KEYBOARD' in configuration file or '-keyboard' command line option - Num Lock LED indicates current keyboard layout and Caps Lock LED - disk LED, if it isn't drawn on screen. Scroll Lock still indicates joy-only mode. - paddles/touch pad emulation is enabled with 'MOUSE PAD' in configuration file or '-mouse pad' command line option Horizontal position of mouse is paddle 0, vertical is paddle 1, buttons left and right are buttons of paddles 0 and 1 respectively. Tested in ARKANOID and KABOOM. Should be tested on more programs, especially those using touch pad. - light pen emulation is enabled with 'MOUSE PEN' in configuration file or '-mouse pen' command line option Mouse emulates position of light pen. Left button is pen's button. Right button is unused. Tested in Atari BASIC only. Should also work in games using light gun. Atari_PEN() has to be added to all platforms. Atari_PEN(0) returns horizontal, Atari_PEN(1) vertical position. If light pen emulation isn't supported, the function should look like this: int Atari_PEN(int vertical) { return vertical ? 0xff : 0; } o ANTIC: mode 3 can be now artifacted and in GTIA modes 9/11 (ANTIC mode 2 routines used) o GTIA: missiles optimized a bit o Delay before reading sector 2. Now OVERMIND works with both emulated and real SIO o DOS version: sound disabled in UI and monitor o QUIT works when invalid opcode encountered o Monitor: you can enter system commands with !cmd, for example !dir Changes in 0.9.9h ----------------- o a big bunch of changes from Piotr, completely rewritten Antic emulation, changed Antic<->CPU synchronization, improved sound, improved PCX screen shots including interlaced screenshots and much more. The rewritten Antic will need proper testing. Please do test and report problems. o new binloader improved, sound improved o Amiga updates and general clean up Changes in 0.9.9g ----------------- o STEREO sound support (2 POKEYs) added o if STEREO sound is compiled in you can switch between mono/stereo output in the F1 menu. o new binary loader improved again o curses mode improved (now enables the F1 menu, warm start moved to F8) Christian Groessler o a new BRKHERE command for the monitor - if enabled (BRKHERE on) then the emulator invokes the monitor when it encounters a BRK instruction. Useful only if you use the BRK insn for debugging your own programs. Christian Groessler o new Amiga updates from Sebastian Bauer DEFAULT_CFG_PATH To alter the default config path (if not defined the orginal path is used) SUPPORTS_ATARI_CONFIGINIT The port provides a function Atari_ConfigInit() which inits the configuration to default values. SUPPORTS_ATARI_CONFIGSAVE The port provides a function Atari_ConfigSave() to save port specific configuration lines in the config file. SUPPORTS_ATARI_CONFIGURE The port provides a function Atari_Configure() for the lines not recognized by RtConfigLoad() DONT_USE_RTCONFIGUPDATE RtConfigUpdate() is not used and compiled (e.g. the Amiga Port provides an own GUI for configuration and so this is not needed here) A list of bugfixes from Piotr Fusik < pfusik@elka.pw.edu.pl > ----------------------------------- * NMIST fixed - antic.c * invalid color of all multicolor players in same place fixed - antic.c * blank characters can be inverted - antic.c * PMG DMA in every scanline - antic.c * DL can not cross 1k boundary - antic.c * PENV set to $FF - antic.c * B flag set on BRK and PHP, reset on NMI and IRQ, can not be changed, BRK doesn't care about I flag - cpu.c, monitor.c * TRIG2=1 on XL/XE, PAL=1 on PAL machine - gtia.c * typos in symtable fixed - monitor.c * 'q' to quit displaying display list - monitor.c * flags in "SHOW" displayed in a readable way - monitor.c * new "STACK" command in monitor - monitor.c * all printable ASCII characters displayed in "M" - monitor.c * "ANTIC" registers display fixed - monitor.c * better "HELP" in monitor - monitor.c * write protection checked in ATR header and returned in drive status - atari.h, sio.c * CRITIC flag reset and C flag set when returning from emulated SIO - sio.c Changes in 0.9.9f ----------------- o new binary loader fixed again (some binary files do not set starting address) Changes in 0.9.9e ----------------- o new binary loader fixed (some binary files contain additional $FF,$FF in the block headers) o X11 keyboard autorepeat turned off during emulation o Antic: border color in GTIA 0x80 modes should be taken from $d012 not $d01a o GTIA: return 0x0f for all write-only registers o monitor: added filename to write (memory dump) o svgalib: don't abort if joystick cannot be opened. Also allow cursorpad keys/ctrl key for joystick emulation (enable it by defining USE_CURSORBLOCK) Changes in 0.9.9d ----------------- Almost all changes in this version came from Marek Zelem. Thanks to him we got digital sound effects (including keyboard clicking sound and other sound effects) in all ports of Atari800 now. This is very cool. Also svgalib and X11 support were improved. And a new binary loader was added. + New features for end users: - digital (volume only) sound (finally!) - emulation of console and disk drive sound - improved keyboard, joystick and screen support under X11 - REALTIME mode for Linux - might speed up the emulator a bit - new routine for direct loading of single binary files - new cmdline command '-run program' that runs a program when emulator starts - fixed a bug in XL/XE mode after warmstart List of changes for programmers: o keyboard in X11 didn't generate KEYPRESSED - fixed. Also second joystick emulation was fixed. AKEY_HELP added. o X11 color support: if more than 256 colors then use full 256 colors in the emulator (in 8bpp only 128 colors are used) o support for REALTIME process under Linux added. This is disabled by default since it might hog the whole operating system. On slower systems this might increase the emulator speed so test it out if you run on a 486. o atari_sleep_ms(100) added to ui() into cycle for reading pressed keys. Emulator thus doesn't hog the operating system while waiting for a keypress. This is essential when Atari800 runs in REALTIME mode under Linux. o digital sound (samples) emulation was added. It's enabled by default but you can disable it by defining NO_VOL_ONLY (who would disable it, anyway?) For better syncing a new global var cpu_clock was added. It's updated in cpu.c, cpu_nogoto.c after every instruction (cpu_m68k.s is not updated yet) This cpu_clock measures the number of physical ticks since the emulation started. o console sound emulation added (keyboard clicking sound and the beep that is produced by writting to CONSOL register). Can be disabled by a #define o disk I/O transfer sound emulation added (can be disabled by a #define). Hardcoded for 19200 bps for now. o the cmdline option '-refresh ' defines how often the screen is to be generated. Previously if num > 1 the screen generating was skipped (num-1) times but also interrupts weren't generated, no sound was produced and CPU ran a bit faster (full 114 cycles per screen line which is not possible under normal circumstances). Seems like this was meant for the BASIC or CURSES emulations. In this version the code for num > 1 was changed so that all interrupts are still generated, sound works OK and CPU runs at the right speed. Just the screen is not generated (antic.c) and not drawn (only in x11.c and svgalib.c for now - other platforms will be updated ASAP). This is driven by global var 'draw_display'. This new approach can be disabled anytime by defining VERY_SLOW. o Warm Start on 800XL/XE fixed - turns on the ROM OS now. o new BIN file loader added. Does not need a temporary .ATR disk image. Should be much better than the original attempt. Define USE_NEW_BINLOAD and test it out. o atari_x11.c: if screen is not visible do not update the emulated screen. Improves speed and is useful e.g. for listening the Atari800 music. Simply cover the emulator window with another window and the emulation runs faster. o atari_svgalib.c: support for running on an inactive virtual console, if allowed by the underlying svgalib. o sound recording added. Global variable 'sound_record' contains a file descriptor. If it's valid the played sound is written to the file. It's up to atari_*.c to turn the sound recording on/off. So far supported by CTRL-F8 under X11 only. o atari_x11.c and joystick: if the mouse is not over the Atari800 window (doesn't have the input focus) the joystick is not read. Also a preliminary 'experimental_mouse_joystick()' was added. As the name says this is an experiment of joystick emulation using the mouse. Not used yet. o trace-ing in monitor: doesn't display 24 insns after a single step. o Jari Karppinen sent a patch for new Allegro lib (v3.12) o Christian Groessler sent a little patch for joystick under Linux o all gets() were replaced by fgets() since the compiler complained. o new configure stuff - configure.c, config.in, config.h and Makefiles Marek rewrote the configure stuff and introduced the config.in file. This is a great idea (something the emulator source needed for a long time). I tried to improve it even more (getting the idea from Linux kernel config stuff). It's not perfect yet but the main purpose - allow people to see and change all used #defines - works now. Also, my idea was to allow people to compile with or without ZLIB without editing the Makefiles and adding #define and -lz. This works too. Of course there's still a lot of work left, for example the (premise) as Marek calls it could allow logical operators like OR, NOT and AND (using C symbols |, !, & or even ||, &&) The .atari800 file format has been changed. The positive thing is that it's now compatible between all platforms. The negative thing is that I had to move it from $HOME dir into the current source dir in order to get the include of Makefile working under DOS. I don't know make and Makefiles well so all fixes are welcome. Changes in 0.9.9c ----------------- + New features for end users: - keyboard autorepeat in UI - separate current directories for operations in UI - better Linux SVGA support (including new 320x240 graphics mode) - new Linux SVGALIB keyboard handler - better sound (interpolation, less system load, configurable sound delay) ! coding style: - please do not change indentation of a source file unless you rewrote major part of it - this makes 'diff' impossible to use and causes hard time for people tracking changes between versions - use TABelators instead of spaces, if possible (set TAB size to 4 spaces) - you can use 'indent -kr -nce -ts4 source.c' to format the source file - if you're sending me diffs then please use diff -u (Unified), if possible List of changes for programmers: o TODO updated - volunteers, please read it. o created new function 'atari_sleep_ms(ULONG ms)' that should be used everywhere in the emulator where you need to delay the execution for a while in a portable manner. Right now used in ui.c for keyboard autorepeat. #include "atari.h" for that. Architectures without usleep() and nanosleep() will edit just this function instead of polluting the whole source code by many #ifdefs. Similar thing needs to be done in the syncing code for main emulator loop in the atari.c. o removed ALL warnings during compilation on DOS and Linux, with help of Jari Karppinen. Atari800 for DOS is known to have problems compiling under latest DJGPP 2.02 and/or with latest Allegro 3.12. This will be fixed as soon as I download the above mentioned dev tools. o ui.c: the keyboard repeat works on all platforms (thanks to 'atari_sleep_ms') some array size hardcoded constants replaced by #define FILENAME_SIZE memcpy(fname, ' ') and strcpy(fname, " ") replaced by memset o pokey.c: ULONG DivNIRQ[], DivNMAX[], TimeBase replaced by 'unsigned int'. This removed the warnings in Pokey[Read|Save]State(). It should not have any negative effects on machines where sizeof(long int) = sizeof(int). Linux-ia32, DOS/DJGPP and Atari Falcon/TT machines (all using GCC) should be OK. Is there an other computer/compiler with 16-bit ints or 64-bit longs that runs Atari800? If yes, state saving/restoring will neither work there, I think. And 16-bit ints would probably broke most of the emulator, anyway... Following changes in 0.9.9c done by Krzysztof Nikiel o new Makefile.linux (Makefile.unix still works for Linux) o pokeysnd.c: added sound interpolation to reduce dsp frequency interference (now should work good even at low rates) and required main output loop reorganization. o sound.c: added correct dsp device handling. Now shouldn't slow down the emulation. added option '-dsprate ' and changed default rate to 22050 Hz (why?) added option '-snddelay ' that allows tuning sound delay according to interval betwen sound updates o sound_dos.c: buffersize increased from 400 to 440 bytes o sbdrv.c: divided sound buffer into four parts. o Linux svgalib: better utilized svgalib capabilities; used mode 320x240x256; removed vgagl dependency; added status of disk LED; o ui.c : bug in SaveState - no terminating zero at end of string separate current dirs for different operations refresh screen bug in GetKeyPress added keyboard autorepeat Changes in 0.9.9b ----------------- o fixed SD and ED floppy formatting in SIO code (sector size is hardcoded) o monitor's commands 'COLDSTART' and 'WARMSTART' perform the reboot immediately now (previously you have to give it the 'cont' command to actually perform the reboot). o statesave bug in SaveINT fixed (negative integers weren't saved correctly). o Makefile.unix updated - the rawkey lib is now essential for the linux-svgalib version of Atari800. o Linux-svgalib version now recognizes F8 keypress for jumping to monitor Changes in 0.9.9a ----------------- o full NOVA graphics support on Falcon including double sized screen o double buffering of screen on NOVA gfx o 16,32-bit X11 shared memory support. Compile with -DSHM. Quote: "Just in case you're interested, here's a patch for Atari800 that will allow shared memory to be used in 16-bit and 32-bit colour modes. There isn't much of a performance benefit on my system (the emulator's CPU usage drop from around 68% to 53%, but the X server rises from 5% to 28%) but it might be useful in some environments. It's a bit of a hack since it adds another copy of each frame's data, but it's probably the best that can be done without changing the non-interface-dependent code." o SIO fix: register A should always contain 0 on return from ROM(?) o Unix fix: call select() in the main sync loop to reduce system load o SIO format fix: realsize is set - formatting should work (7 Cities of Gold) . Though I think we probably should not call SizeOfSector since someone might want to reformat double density diskette to single density. Thus I think realsize = 128; should work better. Let's test that. o Linux SVGALIB - proper keyboard support implemented using the rawkey lib (http://sunsite.unc.edu/pub/Linux/libs/ui) Changes in 0.9.8 ---------------- o antic.c: artif_mode is up to 4 (fixed) o compfile.c: ReadAtariExe() for direct loading of single EXE files (actually it creates a temporary ATR file) o sio.c: formatting of ATR disk images fixed o supercart.c: fixed RTIME month (months are zero indexed) o ui.c: added Run Exe option. The LoadState file calls fileselector now. o rt-config.c: added two config options: EXE_DIR and STATE_DIR o compfile.c: fixed a serious bug when using prepend_tmp_file() Changes in 0.9.8g ----------------- o Falcon030 direct VIDEL programming for 336x240 resolution, NOVA screen saver o START/SELECT/OPTION keys on Atari fixed o DOS drives for Atari (still needs to be fixed) o "Load State", "Save State", "Back to emulated Atari" "Cold/Warm Start" reboots machine immediately o fixed the CPU opcode 0xcb and removed the BCD tables definitely Changes in 0.9.8f ----------------- o PAGE BASED memory access implemented (partially). See memory*.[ch] files and possibly #define PAGED_MEM in memory.h to see the (speed) difference. o cpu.c: BCDtoDEC and DECtoBCD removed. WARNING - cpu_nogoto.c is out-of-date! o cpu_asm.c, cpu_m68k.s updated o double buffering of screen output on Atari port o little fixes and general source cleanup (rcsid's were removed, at last) Changes in 0.9.8e ----------------- o Antic address counters fixed (both DisplayList and ScreenAddress). Salmon Run and other games should now scroll the screen correctly. The bug was found by Jindroush. o SelfTest must be disabled when OS ROM is disabled (suggested by Jindroush). o cpu_m68k.s is corrected (stack bug found and fixed). Spelunker runs now. Changes in 0.9.8d ----------------- o introduced #ifdef ZLIB_CAPABLE. Emulator is now compilable without the zlib files. o deleted file 'djgpp.h' and added O_BINARY to all O_RDONLY in open() calls. TODO: update UI and add there menu items for state saving and restoring Changes in 0.9.8c ----------------- o atari.c contains three functions that should rather be port-specific: - zlib_capable() should return TRUE if we're linked against ZLIB - prepend_tmpfile_path() should insert path to a Temp dir to supplied buffer - ReadDisabledROMs() should read ROM files from disk instead from state image The functions are not written yet (they just return FALSE or something like that). Emulator code is not compilable without zlib header files... o cpu_m68k.s contains GetByte, PutByte and GenerateIRQ now. It's faster. Changes in 0.9.8b ----------------- o SIO bug fix: sectors are counted from 1! o new icon for Atari800 emulator o State Saving - a new feature that allows saving the state of emulated environment anytime (in the VBL, actually) and restoring it later. o cpu_m68k.s (assembler module for CPU 6502 emulation on M680x0 machines) was updated (undocumented commands), corrected (Bruce Lee works now) and greatly improved (profilling support, speed). Changes in 0.9.8a ----------------- o added compfile.c for handling DCM and ZLIB compressed files. SIO module updated. Please add call to 'Clear_Temp_Files()' into Atari800_Exit() in all Atari800 ports. o some more printfs changed to Aprints (not sure if everything still works correctly in all ports). o CTIA (artifacting mode 4) added. o DOS port: vertical retrace control in display functions (animations are now much smoother) for both "official" and Allegro Dos versions. It will probably need a fast CPU to work fine. Vertical retrace is normally turned off, it may be activated by command line '-vretrace' option or by adding 'VRETRACE=1' to atari800.cfg. Changes in 0.9.7 ---------------- o CPU.C has got several new macros for stack (PH, PHW, PL) and memory access (dGetByte, dPutByte, dGetWord). This is intented for easier implementation of future memory management. o new command line switch "-nopatchall" and option in config file "ENABLE_ROM_PATCH". If you disable ROM patches (either by setting the ENABLE_ROM_PATCH to 0 or by using "-nopatchall") it will automatically disable the SIO patch as well. But the main purpose of this is to get a clean Atari800 ROM so Self-Test is happy when testing CRC and some games that search for certain device in HATABS do work now. o new undocumented GTIA priority ("transparent missiles") added. The 5th player colour of missiles is transparent in mode 9 and 11. Also it fixes a bug in the earlier implementation of gtia mode 11 There is also a major change in the way priorities are handled which is designed to be faster somewhat, it seems to help a bit with demos that cover the screen with players. It will probably not help too much for other programs. o #define BIG_ENDIAN -> POKEYSND_BIG_ENDIAN (why Linux-ix86 defines BIG_ENDIAN???). o NTSC patch to get Joust running under A5200. o new: support of R-Time 8 cartridge. Try to type 'date' or 'time' under SpartaDOS. o new: artifacting in ANTIC mode 2. o PM DOS version: sound routines (DOSSOUND.C) do not need SEAL library as it uses ALLEGRO lib now. ALLEGRO is capable of sound card auto detection. New code uses just double buffering (previously tripple buffered) and the value of gain was reduced to fix some problems with digital sound. Edit ALLEGRO.CFG to change sample rate and thus sound quality. o CPU 6502 emulation core adapted to not use goto's all over the place. Also the jump table was replaced by switch() statement, which should be optimized into jump table by any modern compiler, anyway. This has various results - under MSVC it speeded up the emulation, while under GNU C on MC68040 it actually slowed the emulator down (about 10%, which is too much). The new core is available in file CPU_NOGOTO.C and is not used by default, however you may experiment with it under your architecture. o SIO DVSTAT byte 1 changed from 128 to 255 in order to get Strip Poker running. o WIN32 related additions and changes o stricmp() -> strcasecmp() in ui.c o TVmode enum members PAL and NTSC had to be changed to TV_PAL and TV_NTSC (PAL and NTSC were already defined in falcon.h header file) o ESCape code for SIO invoking (at 0xe459) has got an additional check to ensure that SIO emulation layer is not called by mistake when CPU gets some random data instead of instructions (it used to cause mysterious locks up of emulator). All other system patches should be protected this way, I think. o ADDLOG and BACKUP_MSG were replaced with one universal routine in log.c called Aprint (syntax same as printf). All printf() should be replaced with this Aprint() routine that buffers the messages on systems where the emulator runs in a special graphics mode (DOS/Falcon/Win32) and does not want to have screen filled with a mess instead of debug reports. o Falcon port cleaned up a lot: cflib removed, three different routines for chunky-to-planar conversion in 320x240, 352x240 and 384x240 resolutions were replaced with one universal routine that works in any resolution and centers the screen view automatically. The default resolution for Falcon is 336x240 now. It also is NOT a Falcon specific port anymore, as it now supports any Atari compatible hardware with MC68020 or higher and 8-bit color graphics (320x240 is the minimum resolution for starting emulator). It also supports LED emulation (floppy LED blinking during SIO activity). o source is compilable with -Wall, all previously uninitialised variables are set to 0. o UI: long file names in Disk Selection dialog are shortened now. o Colour Artifacting! Use '-artif ' command line switch to enable the artifacting. Mode is number between 0 and 3. o the WIN32 specific code for artifacting in antic was removed. o DOS specific files clean up and fixes (a lot). o PIA: fixed support for four joysticks in Atari800, tested on some games. Improved emulation of joystick ports on XL/XE. Some games obviously switch the ports into output state(!) and then read it. One would say there is nothing but $FF when the port is in output state and you read from it, but the real life is different. Atari800 emulator now supports this hardware trick correctly. o UI: better directory tree browsing support in Select Disk, in MS-DOS you can even select disk drives. Changes in 0.9.6 ---------------- o DOS: keyboard and joystick handling changed a lot. Joysticks emulated on keyboard can now be freely defined to (nearly) any key combinations using comfortable JOYCFG.EXE tool. Besides, there are two modes of keyboard: Joystick mode and Normal mode. In Joystick mode the keypresses to joystick predefined keys are not passed to emulated environment. You can switch between Joystick and Normal mode on-the-fly by pressing the F7 key. o Falcon: NOVA graphics extended: 336x240 or 672x480 (double size) o UI: the too fast autorepeat was fixed - by disabling the repeat altogether. o SIO: serious bug in CopyToMem fixed. No more rewritten ROM OS. o ANTIC patch: no player DMA without missile DMA. o SIO: missing 'else' in DIR routines. o Allegro VGA: updated Makefile and fixed ShutdownVGA(). o VCOUNT patch o PIA_Initialise() should initialise PORTA to 0. o PIA registers are mirrored not only in Atari800, but in XL/XE models as well (thus addr&=0xff03). Bounty Bob runs now? o DOS: VESA2 mode support (about three times faster than X-mode). VESA2 also preserves the refresh rate. You can disable VESA2 modes by switch -novesa. Also colour pallete initialisation is faster now. o DOS: Atari_Set_LED function (use -DSET_LED to enable that). o UI: the last ESC keypress is not passed to the emulated program anymore. o Monitor: pressing [Return/Enter] can be used for single stepping as well. o new routine for saving of screenshot in 336x240 size as PCX. So far used in DOS and Falcon ports (press F10 to save current screen into a file). o the Atari keyboard should now react quickly enough. DOS port contains keyboard buffer for last two keys. o fix for initialisation of PORTA o DOS port: better joystick autodetection o several fixes for more ANSI like C code o ANTIC: fix for DLIST counter. o ANTIC: several more hardware registers are unreadable. Changes in 0.9.5 ---------------- o ANTIC: fix for scrolling of empty lines. o CPU: little fix in remembering last N jumps. o new command line option: '-basic' to override Hold_Option in cfg file o UI: you can now go into folders when selecting image in Disk Management o DOS port - finally full resolution 320x240, 320x480 interlaced. o SIO: ATR images created by SIO2PC are readable now. Also Read/Write Config was updated to reflect real XF551. o monitor continues last command by pressing [Return/Enter] key. o PIA: reading PORTA fixed (now works exactly like real Atari800, not compatible with Atari5200 yet). o UI fix: it's possible to disable disk drive by [Space] again. o Gtia fix: CONSOL (Start/Select/Option keys) handling. o Pokeysnd: poly4 and poly5 bit fields were changed for more accurate sound emulation. The original values are still available with -DPOKEY23_POLY. Changes in 0.9.4 ---------------- o CPU fixes: several unofficial instructions compared with real Atari800XE and their emulation fixed. ADC/SBC "V" bit bug found and fixed (Thor's code used, which in turn was taken from Frodo emulator, AFAIK). Compatibility greatly improved again! o Antic fix: cycle counting when DMA is disabled (improves sound quality in non-interrupt driven sound update routines). o Voxware sound driver updated (tested under Linux). pokey11.[ch] files removed. o the crashing in UI when switching to Atari5200 mode fixed. o internal monitor improved (symbolic names for often used hardware registers etc). Line assembler implemented. Single instruction step mode implemented. Monitor remembers not only last N PC addresses, but also last N jumps. To enable these features edit your Makefile CFLAGS = -DMONITOR_BREAK -DMONITOR_HINTS -DMONITOR_ASSEMBLER. o additional WIN32 code (Atari800 User Interface is used in Windows port now) o all Hardware_GetByte(address) routines return 0xff for unknown address now. o fixed several files so Makefile.allegro works now. o NMIEN is not readable now. Changes in 0.9.3 ---------------- o POKEY interrupts implemented (inspired by Thor's version). Ghostbusters run now! :-) o NOVA graphics support on Atari TT/Falcon computers finished. Atari800 is no longer Atari Falcon specific port, now it works on any TOS compatible machine with MC68020 or higher and a NOVA graphics card (please test in on Medusa, Hades and Milan machines) o A special check for pending IRQ put into CLI, PLP and RTI insns. It's a macro for speed reasons, though a function might be more appropriate. o A new function GenerateIRQ() was written in CPU module and is used where needed (ATARI and POKEY modules). o Handling of IRQ's changed. Before, we tested for IRQEN (is interrupt enabled?) and then (in positive case) we set IRQST. Now, we always set the IRQST and then we take an action only if IRQEN is OK. I don't know if it's OK, I have just been told that more demos work with this. o all HardwareGetByte(address) routines return now 0 for unknown address (probably not ideal, but deterministic at least). o several routines from ANTIC, CPU and POKEYSND modules moved to POKEY module, where they actually belong. o CPU emulation fixed (INDIRECT_X mode was overflowing) o CPU and Antic speeded up *slightly* by using type casts instead of direct anding with 0xff (the compiler got a chance to optimize it at least). o a lot of uneccessary castings to (UWORD) and (UBYTE) was removed from CPU emulation o DiskDir of UI enhanced - now you can define up to eight directories where disk images are stored - then you can go through these directories in Disk Management by pressing TAB key. o fixed sorting of file list in Disk management in DOS port (a speciality of strcmp() function of DJGPP libc). Changes in 0.9.2 ---------------- o LPTjoy implemented. Now you can connect up to three old style CX-40 (Atari, Amiga digital joysticks) to the printer ports of your PC (via a very simple interface). Then you just specify "-LPTjoy1" on command line for joystick on LPT1 etc. LPTjoy idea came from Petr Sumbera. o m68k assembler CPU emulation was updated to reflect recent changes in CPU module . o preliminary support for NOVA graphics on Falcon o Allegro joystick routines slightly improved (now you can play even without real joystick) o Atari800Win changes were put in the main source tree o after selecting another OS from UI emulator doesn't hang if there is no ROM file. Changes in 0.9.1 ---------------- o new POKEY v2.4 with sound channels filtering! Exclusively written by Ron Fries for Atari800 emulator. Thanks, Ron! o merge of Perry's and (RASTER & Petr)'s source tree - great! Current source can be compiled for DOS by either Makefile.dos or by Perry's Makefile.allegro. Perry's Makefile needs DOS game library Allegro. The only functional difference between these two DOS versions is that Makefile.allegro enables keyclicks (due to different sound handling). o major rewrite of DOS keyboard emulation - now allows two modes of operation: native (the labels on English PC keyboard are valid) and original (the keyboard layout is the same as the original Atari800 keyboard). You can switch between these two modes on-the-fly by pressing Control+F1 and Shift+F1). Better handling of START/SELECT/OPTION keys (these console keys are independent of the rest of keyboard). Screen view movement changed to Control-numeric pad (just like emulated joy, but with Control key). o ANTIC speeded up by narrowing the screen width to 42 chars (originally it was 48 chars wide, but no TV can show more than about 43 chars..). This should speed things up for about 10% in wide modes and PM graphics. o Emulation of 320 kB of memory added. Two different modes are supported - Rambo and Compy Shop. Extended memory tested by Q-meg (alternative operating system for Atari320XE). ROM/ShadowRAM and AtariXL Basic switching optimized. o Atari5200 emulation corrected (loading of ROMs, keyboard, paddles). Special support for Bounty Bob on Atari5200 added. o new SIO code that supports formatting (written by , updated by Perry and Petr). Changes in 0.9.0 ---------------- o slight speed up in antic.c o the right-most vertical line was missing on screen o DOS: BREAK key should not have auto-repeat, Invers key added o ANTIC now contains #ifdef POKEY_UPDATE. That should be defined in Makefiles for architectures where it's impossible to update sound buffers in DMA interrupt (i.e. Unices etc) o source cleaned up (no C++ style of comments), docs updated Changes in 0.8.9 ---------------- o ANTIC's DIRECT_VIDEO mode was completely rewritten. Now it is the default mode of emulation, much faster than the previous approach. This version of ANTIC is also 'line-oriented' - that means video emulation is accurate to single scanlines. It allows such tricks like changing charset during displaying an ANTIC text mode line. ANTIC's scrolling in both horizontal and vertical direction is now supported in all graphics modes. Thanks Perry for all these things. o GTIA now supports all possible combinations of PMG collisions. It also supports third colour (many games are much more colourful now, just like they were on original Atari800). Thanks Thomas Richter and Perry. o -configure now preloads the default filenames of ROM images. It also presets hold_option to 1 (for game players is better not to confuse them with Atari Basic). o xcolpf1 kludge was removed (antic, gtia, rt-config files). o DIRECT_VIDEO support was removed (configure.c) o the compilation config file is named atari800.djgpp on DOS, so it finally doesn't collide with atari800.cfg (config file of emulator itself) o sio.c opens files in binary mode - works on DOS o Atari800 monitor changes: disassembler rewritten (now recognizes all 256 opcodes and displays also cycles and hex codes), different (more logical?) commands: [D]isassembler, [C]hange memory, dump [M]emory (previously Y, M, D) o Fixed DMACTL and GRACTL registers (difference between enabled PMG and enabled DMA for PMG). o Introduced PMG flickering (try out POKE 53248,160:POKE 704,14:POKE 53277,3). o DOS keyboard: added Ctrl-1 (stops scrolling), Ctrl-2 (bell), Ctrl-3 (EOF) and HOME key clears screen, END key stands for Atari BREAK key. INSERT and DELETE keys insert and delete chars or whole lines (with Shift and Control keys). Changes in 0.8.8 ---------------- o Antic, GTIA and CPU are now synchronized. Very precise timing (up to 99.87% compared to real Atari800XE) with CPU cycle counting was implemented by RASTER. This should be the final solution for numerous DLI problems. Changes in 0.8.7 ---------------- o snailmeter (speed indicator on the screen) is disabled automatically when the host computer is fast enough for emulating the Atari800 at full speed. o Atari_Scanline() function was optimized - should be up to twice as fast as was before. o Falcon: keyboard emulation of joystick was fixed once more. Now you can hold down several keys at once and it works OK. o DOS: joystick is autodetected. If not present, keyboard emulates joy1. If real joy is detected, keyboard emulates joy2. If "-joyswap" command on command line is used, the joy1 and joy2 are exchanged. Changes in 0.8.6 ---------------- o improved IRQ handling in CPU (CLI instruction) - now Rescue on Fractalus reacts on keyboard presses o Falcon: real DMA sound with interrupt driven buffer recalculation using Ron Fries POKEY 2.3 o DOS: keyboard fix of HASH mark (Shift-3) o Falcon: keyboard fix of joystick emulation o DOS version starts even when sound card is not initialized (emulator is now able to run under WindowsNT 4.0) o Falcon detects current video mode and doesn't touch VIDEL registers if it's 320/352/384x240x8bp (see the -resolution switch) - Atari800 should now run on RGB monitors as well. o fixed little typo in BACK_SLASH (thanks Perry) o improved DOS and Falcon keyboard emulation (common KEYPRESSED and SHIFT_KEY) DOS version now recognizes extended keys properly - joystick emulation is OK (Chimera, BruceLee and others are now playable) o XL operating system is turned on in Coldstart routine. o keyboard IRQ are set only if allowed by IRQEN o DOS port emulates TAB and HELP key (HELP is mapped to F10 - not optimal, should be changed to another key - perhaps F6, which is useless in XL mode) o DOS port has faster screen update with dosmemputl (Perry) o files on virtual drive are opened in binary mode (Perry) and are listed in uppercase (RASTER's suggestion) o fixed bug in SIO_Mount causing crashes when mounting drives in Disk management o in System menu (F1) copy font from operating system and not from shadow RAM (another XL related bug fix) o added support for '\\' in file paths (see #define BACK_SLASH) Changes in 0.8.4 ---------------- o fixed bug in vertical scrolling (visible for example in Archon intro) - thanks to Perry McFarlane o DMA sound for Falcon version (using POKEY 2.2). Buffer recalculation is not interrupt driven yet. o Error messages are buffered until the original text mode is restored (see #define BACKUP_MSG) o Falcon version supports up to two joysticks o Snailmeter :-) A kind of indicator for slow machines - it shows you how many times is the emulator slower than real Atari800. On my Afterburner (68040 @ 40 MHz) it's about three or four times slower than original :-( If your machine is fast enough, the snailmeter is not visible. So watch the lower bottom of screen! :-) Changes in 0.8.3 ---------------- o Radek Sterba (raster@infos.cz) did a marvelous work on discovering unofficial 6502 instructions. This CPU.C has implemented _all_ 256 opcodes! He added more than 70 unofficial instructions, many of them were even unkown before. ESC code had to be changed from 0xff to 0xf2 (0xff is a kind of 'regular' instruction, while 0xf2 is the CIM). Atari800 is the world's first 6502 emulator with full instruction set! 100% software compatibility with original 6502. o I've integrated his code and fixed JMP (addr) for addr crossing page boundary (6502 was 'buggy', though 65C02 should had this fixed). o IRQ variable has been changed from int to UBYTE (for C it shouldn't matter and it helps in the m68k asm code). o Disk images created by XFormer and its utilities (having extension .XFD or .DD) may be of double density - I implemented it in sio.c (see #ifdef ORIGINAL_XFD_CODE). Tested and works (glad to get it working, because I have a lot of XFD images). o In DOS/VGA version you can move the 320x200 screen around with Ctrl-Arrows to see full 384x240 resolution of original Atari800. To restore the VGA screen back to center press F10. o DOS/VGA version supports one real PC joystick (emulated in port 1). You still can use the numeric keypad as emulated joystick - by default in port 1, or in port 2 with "-joyswap" command line switch. Joystick doesn't have the ghost-moves (interrupts are disabled during joy reading). Also joystick is not read whenever the Atari800 wants it, but only in the keyboard routine (i.e. regularly 50 times per second, basically in VBL). This was important to prevent a game reading joy port too often to hang or slow the emulation down (reading of PC joystick takes some time). o DOS port has finally got wonderfully clear sound, thanks to Ron Fries' SoundBlaster Driver 1.2 and new, little/big-endian aware POKEY 2.2 routines. o New monitor S command for searching a value in memory. o The best news: found the reason why so many games didn't work in XL mode. Fixed one MMU bug (XL didn't have TRIG2 and TRIG3 was connected to cartridge) and introduced one MMU workaround (many 800-only games put zero to PORTB. That's why Tapper and other games didn't work). Now the compatibility ratio of Atari800 in XL/XE mode is at 97% or higher - definitely the most compatible Atari800/XL/XE emulator in the world. Changes in 0.8.2Petr ---------------- o Fixed wrong missile width (all missiles had the same width) - now River Raid looks much better. o Added 28 cycles in Antic after executing DLI - it was absolutely needed, because otherwise the interrupt routine was executed too late and the effects (color or font change) occured with another Antic line - now Pitfall II has the score displayed in numbers and not in characters. o Added several checks into SIO code for seeking() after end of file - on Falcon it caused enlarging of disk images (for example the well known MENU.ATR has original size 1296 bytes, but after rebooting of Atari800 the file was enlarged to 2598672 bytes). Maybe it's a hidden endianess problem in SIO code? It happened on Amiga, too. o Added a method of invoking Monitor - by pressing the F8 key anytime during emulation. o Added BREAK command into Monitor. Now it's possible to enter monitor, use command BREAK and then CONT. The emulator then runs until the PC (program counter) is exactly . Then the monitor is invoked again. o DOS version has got joystick support and also sound support using Ron Fries Pokey Emulation 2.0. The joystick is OK, but the sound is not clear - need to change to interrupt driven sound buffer generating. o Atari800 has been ported to Atari Falcon (32-bit machine with MC68030 or MC68040 and flexible graphics processor). Besides the port this Falcon version contains special CPU 6502 emulation written in pure MC68030 assembler by Empty Head (Karel Rous), special very fast routines for chunky2planar conversion (written by Douglas Little @ Black Scorpion) and special code for VIDEL programming (provided by Douglas as well). The keyboard and joystick emulation, the port itself and the fixes mentioned above were done by me, Petr Stehlik (stehlik@cas3.zlin.vutbr.cz). Changes in 0.8.2David ---------------- o New Monitor READ command to load file into memory. o New Monitor COLDSTART command to perform a coldstart. o New Monitor WARMSTART command to perform a warmstart. o New Monitor F command to fill memory range with a value. o Prevention of "config.h" being included during compilation for Amiga. o Improved MS-DOS keyboard handling. The most noticable difference is that the keypad joystick emulation now returns to centre when the key is released. o Re-instated replacement OS - Allows Defender and Star Raider to run without the Atari OS Roms. o Added Atari Falcon Support - Thanks to Petr Stehlik. o NAS (Network Audio System) support is now obsolete. The entries have been removed from the makefile and the intention is to remove the obsolete code before the next release. Changes in 0.8.1 ---------------- o Added -private_cmap flag for X11 version. o Correction to handling of 6502 V flag during ADC and SBC operations. Changes in 0.8.0 ---------------- o Added Ron Fries Pokey Emulation routines for sound in Linux. A million thanks to Ron for releasing these routines - I've put off using sound for ages but it took less than an evening to add sound using these routines :-) Sound is setup for Linux using /dev/dsp but it also seems to produce something using /dev/audio, which leads me to believe that it should work on most Unix boxes with a little work. Patches welcomed :-) In order to support sound I've added a few new command line options:- -sound and -nosound do what you'd expect. -dsp_divisor takes a decimal value which alters the quality of the sound output. It is used to work out how much sound should be created each time the screen is refreshed. Ideally it should be 50 (PAL) or 60 (NTSC) but I've found that the best value to use is about 5 less than the emulators screen refresh rate WITH SOUND DISABLED. If the values is to high you will get gaps in the sound. If the value is to low the emulator will run slower than it should. I strongly suggest you experiment with this parameter in order to get both the best sound and performance. o Support for an Experimental New Cartridge Format - with the use of OSS Super Cartridges there is no way of automatically distinguishing standard 16K cartridges from the various Super Cartridges. Hopefully this format will do for cartridges what ATR files did for disk images. Feedback and view would be welcomed especially from the other Emulator Authors. The current format is :- first 4 bytes containing 'C' 'A' 'R' 'T'. next 4 bytes containing cartridge type in MSB format. Type 1 - Standard 8K Cartridge Type 2 - Standard 16K Cartridge Type 3 - OSS Super Cartridge (I heard rumours that there are two different types of OSS Cartridges) Type 4 - Atari 5200 Cartridge Note: There is probably a case for extra cartridge types indicating the system that needs to be emulated. e.g. Standard 8K Cartridge (800 Mode Only). next 4 bytes containing cartridge checksum in MSB format (ROM only). next 4 bytes are currently unused. followed immediately with the ROM data, typically 8, 16 or 32K. In the next version I'm intending on adding:- 32 bytes for Cartridge Name 32 bytes for Cartridge Serial Number 32 bytes for Manufacturer The current version of the emulator includes options in the Cartridge Management screen to Create Cartridges in the above format but be warned this format is likely to change. Changes in 0.7.1 ---------------- o Note: I now consider the new Menu System that runs in the Emulated Atari's window to be the prefered User Interface. I have no intention of doing any further development for XVIEW o Cartridge Management added to Menu. o Removed FFP Code. Changes in 0.7.0 ---------------- o F1 enters Menu System at any time. ESC returns you to the previous screen. Items are lcoated using the cursor keys and selected by either RETURN, SPACE, TAB or BACKSPACE. In most cases these keys can be used interchangeably, the exception is in the Disk Management Screen where RETURN is used to select a new disk and SPACE, TAB and BACKSPACE are used to eject a disk - If there is no disk in the virtual drive then SPACE, TAB and BACKSPACE will switch the drive off (Useful for Shamus). o X11, SVGALIB & DOS - F5 is now Warmstart and Shift F5 is Coldstart. o X11 - F8 Single Shot Screen Dump, Shift F8 continuous Screen Dumps. o MS-DOS version runs about three times quicker now that the emulator is synchronising with a high resolution timer. o MS-DOS version resets the screen back to text mode when finished. Changes in 0.6.2 ---------------- o Antic Modes 2, 3 and f now display the normal Atari Colour and Luminance by default. Extended Antic Modes 2, 3 and f are enabled by starting the emulator with the "-xcolpf1" command line option. This allows two completely different colours to be displayed in these modes - as previously. o Improved Run-Time Configuration. Starting emulator with the "-configure" command line option allows configuration of several items:- 1. Location of OS Roms 2. Default Directory for Disk Images 3. Default Directory for ROM Images 4. Default Directory for H1, H2, H3 and H4 pseudo devices 5. Command Print File (for Printer Support) 6. Default Screen Refresh Ratio 7. Default Startup System (OS/A, OS/B, XL, XE, 5200) 8. Default TV Mode (PAL, NTSC) 9. Hold Option during Coldstart 10. Enable C000-CFFF RAM in Atari 800 mode 11. Enable SIO Patch 12. Enable FFP Patch 13. Enable Extended COLPF1 (Two true colours in Antic Modes 2, 3 & F) The emulator writes a file called "atari800.cfg" in your default directory. When reading the configuration the emulator first checks to see if you've specified a configuration on the command line with the "-config" option otherwise it first tries to read a configuration file from your default directory, failing this it then tries to read a configuration file from "/etc/atari800.cfg". o JoyMouse for Toshiba Portables running SVGALIB - Probably also suitable for Trackball devices with minor modifications. Changes in 0.6.1 ---------------- *** IMPORTANT MESSAGE for EXISTING Users of Atari800 (Source Versions) You will need to make some changes during the sytem configuration stage - the emulator now expects the full path to each of the system ROM images to be explicitly stated. If you don't have all the ROM images then just pretend you have! o FPS and SIO Monitor are no longer compile time configuration options. Enabled by "-fps" or "-sio" command line option or via an XVIEW pulldown menu. o Motif fileselector retains state from one invocation to the next. o Configuration program detects if longwords need to be aligned. o Modification to X11 Paddle Emulation. o Removed hardcoded paths in MOTIF code. o Various fixes for curses mode. o Correction to Colours in Antic Modes 4&5 causing Incorrect colours in Rally Speedway, Galactic Chase and Mr. DO) o Disabled DiskChange KEY (F8) in X11 version. o Added "-nobasic" command line parameter. o Added "-osa_rom", "-osb_rom", "-xlxe_rom", "-5200_rom" and "-basic_rom". These command line options are used to specify the location of various system ROMs on mis-configured systems or binary distributions. Note: To prevent cluttering up the CHANGES file all credits are listed in the CREDITS file. Changes in 0.6.0 ---------------- - Emulator can now be compiled for DOS using the DJGPP port of GCC (Thanks to Ivo van Poorten) Thanks to Maximum Entropy for the following Changes:- - Implementation of Disable Drive menu item for Motif. - Fixed scrolling problem for machines that can't access longwords on word boundaries (e.g. SGI and SPARC). - Added FPS Monitor to X11 and Motif versions. - Changes to pattern matching for H: device. Changes in 0.5.5 ---------------- Thanks to Maximum Entropy for the following Changes:- - Various corrections to MOTIF code. - MOTIF callbacks for Insert Disk, Eject Disk and Insert ROM - Bug Fixes in sio.c - Bug Fix to devices.c allowing DOS 2.5 to get a directory of H: - Bug Fix to monitor.c (EOF on INPUT + Blank Lines) - Undocumented commands added to monitors HELP command. Changes in 0.5.4 ---------------- - Made Emulator C++ Friendly. - BASIC version has not been working since CPU cycles were allocated during scanlines processing. This problem was caused because the BASIC version doesn't generate any scanlines and therefore didn't execute any instructions. This version fixes the problem. Changes in 0.5.3 ---------------- - Removed GetWord macro from cpu.c - Added XVIEW option to disable drive (via SIO_DisableDrive()). This allows SHAMUS to work. The drive is automatically re-enabled next time a disk is inserted. Changes in 0.5.2 ---------------- - Made CPU timing more accurate: It now issue 114 clock cycles per scanline instead of 48 instructions. - Removed obsolete functions: GetBinaryWord() and BinaryLoad(). - Handle PORTA Direction Control Register. Fixes Joystick problem in Caverns of Mars 1. - The atari_basic array was incorrectly defined in pia.c as [8129]. This has now been corrected to [8192] (Thanks to Chris Palmer). Changes in 0.5.1 ---------------- - Changed handling of CONSOL for X11 versions - previously it was hard to start some games. - Changed address of 5200 POKEY chip. The information I have states that it is located in page $eb, but evidence in a disassembled cart suggests its at $e8. Of course it could appear in both pages, does anyone know for sure? - CPU time allocation is now performed entirely within "antic.c". This is a pre-condition for switchable PAL/NTCS modes. - Compile time configurable to either PAL [default] or NTCS system. - "-countdown" option has been removed. Changes in 0.5.0 ---------------- - Simplified interface to CPU module. - DIRECT_VIDEO now works with PMG collision detection. This option increases performance by about 28% but can result in different colours being displayed. This is because this option relies on COLPF0, COLPF1, COLPF2, COLPF3 and COLBK all having different values, hence the emulator sometimes modifies the colours :-( This option can be enabled during the configuration phase. - Correction to ANTIC Mode 5 Vertical Scrolling. - Correction to PMG DMA Code - Demon Attack now works OK. - Added code to limit the emulator to 50fps - this will not have any effect if your machine can't run the emulator greater than 50fps. F10 in X11, XVIEW, MOTIF and SVGALIB versions toggles the limit on/off. When the limit is off the emulator will go as fast as it can. - Path to directory containing the OS ROM images is now defined during the configuration phase (Declaration of ATARI_LIBRARY has been removed from the Makefile). - Correction to handling of PMG DMA - Pitfall II now Works. - The unused bits in PMBASE are now ignored correcting errors in Atari Chess and Frogger. Changes in 0.4.5 ---------------- - Added a compile time configuration option to control the default screen refresh rate. In previous version of the emulator the default rate has been 4 frame: draw 1 skip 3. From this version you will be prompted for the default during the compile stage (except VMS and AMIGA which still default to 4). A value of 1 is required for the most accurate emulation. Values other than one can produce some collision detection problems on a few programs (e.g. Burried Bucks). - Split Custom Chip code into seperate files. - Added 5200 Emulation Code - Runs program but needs modifications to support 5200 controllers. The 2K OS ROM must be called "atari5200.rom" and placed in the same directory as the other OS ROMS. - Linux Joystick enabled by configuration program. There are nolonger any makefile targets containing "joystick". - Removed code relating to Emulated Operating System. - Added option that displays the number of Frames per Second. This option is enabled within the configuration program and currently only works with the XVIEW version. Changes in 0.4.4 ---------------- - SpartaDOS 3.2 works for both Read and Write Access. - Alternate Reality "The City" now works. - Added interrupt timings for Invalid SIO commands. - Support for Direct Serial I/O Write and Put sectors commands. - Correction for Double Density ATR files. Changes in 0.4.3 ---------------- - Corrected a Bug that prevented DOS 2.5 from copying files to/from H: - Re-instated F8 Disk Change function for non XVIEW/MOTIF/AMIGA Systems. Changes in 0.4.2 ---------------- - Test code for faster screen generation, enabled by defining DIRECT_VIDEO within "atari_custom.c". It needs a little more thought with respect to collision detection, hence it is disabled by default. - Better PMG Priority Handling. - Tidied up code accessing hardware registers - Changed handling of B, D and I flags. - Changed handling of NMIs. Changes in 0.4.1 ---------------- - Flashes background colour while performing direct Serial I/O - Minor optimisation to Player/Player collision detection - Minor changes in CPU emulation - Correction to new cartridge code causing it to fail under XL/XE emulation (Thanks to Neil Shipp) - New targets in the Makefile for freebsd systems (Thanks to Ivo van Poorten) Changes in 0.4.0 ---------------- - Added MOTIF User Interface - Support for DEC-Windows under VMS (Thanks to Chris F Chiesa) - Removed dependency on 'ncycles' global variable. - Support for direct access to serial port hardware - The emulator will now run Alternate Reality "The Dungeon" (I haven't tried the others) - Modified handling of XL/XE memory. - Fixed the GTIA modes which broke after X Window shared memory support was added in version 0.3.0 - Correction allowing Montezumas Revenge to work again. Changes in 0.3.3 ---------------- - New System menu in XVIEW version allowing selection of operating system etc. - Amiga: Iconify working. - Amiga: System menu contains options for Insert ROM, Remove ROM, Enable PILL, Selection of Operating System and all previous disk options. - Amiga: Help menu option is now working using Multiview. Changes in 0.3.2 ---------------- - Modified BRK instruction to take account of the I flag. The BRK instruction is ignored if the I flag is set. - Added all unofficial NOP opcodes. - New cartridge handling. The XVIEW version provides menu items enabling the insertion and removal of cartridges. Changes in 0.3.1 ---------------- - Defined PRINT_COMMAND in devices.c for Amiga - Minor optimisation to PMG handling - Modified DLI Handling and ScanLine processing Changes in 0.3.0 ---------------- - Support for Atari 130XE memory banks (Antic currently accesses the same bank as the CPU) - XVIEW Exit item on the Disk menu. - Printer device calls tmpnam() to allocate a temporary filename for the spool file. - XView version didn't enable HELP key for XL and XE emulation. - X11 Backspace keys works in the same ways as the Delete key. (Thanks to Cyrus Malek) - Reset and Coldstart now work during XL and XE emulation. - Added OK button to XVIEW controller and performance dialog boxes. - Optional support for X11 Shared Memory Images resulting in a 32% speed improvement. This option can only be used in conjunction with the small screen display. Type make by itself to obtain the new list of targets. "-shm" target extension enables this option. - Simple configuration program to avoid editing the Makefile as ofter. make will invoke it the first time and afterwards "make config" can be used. It currently handles the directories for the H: device, the disk image directory for the XVIEW file chooser and the command used to send a file to the printer. The print command should contain a %s character sequence where a filename is expected (only the first %s is relevant). Changes in 0.2.7 ---------------- - Renamed atari_h_device.c to a more general devices.c - Emulator (private) opcode ESCRTS ($d2) added to support patching of OS. - Printer device supported via Unix lpr command. - Moved from RCS to CVS and added rcs Id keyword to all C files. - Emulated OS: Better handling of Keyboard and ATASCII to screen code conversion. Editor uses LMARGN, RMARGN, ROWCRS and COLCRS. - Many other changes to EmuOS including implementation of SETVBV COLDSV and WARMSV. - Detection of X11 server supporting the MIT Shared Memory Extension in preperation for shared memory pixmaps. - Corrected bug in H: device (filename extraction routine). Changes in 0.2.6 ---------------- - Corrected calculation of number of sectors and reading of double density ATR files (Thanks to Preston Crow) - Correction for Linux ELF systems. - XVIEW and NAS work under Linux/ELF - Default directory for XVIEW Disk File Chooser is set within the Makefile. By default it is pointing to /usr/local/lib/atari/DISKS - Corrected bug in Missile 0 to Playfield collision detection. - Corrected WSYNC bug (multiple stores to WSYNC during one scanline). River Raid now runs correctly. - -emuos to enable emulated operating system. Users without the necessary atari OS ROMs can use this option to boot disk images/ROMs. Currently this is very experimental and runs very little without problems. Defender runs perfectly but if you haven't got the OS it's unlikely you'll be able to get this either! - H0: device accesses the current directory on your Unix Machine. - H1: through H4: can access four directories specified either within the Makefile or via the -H1, -H2, -H3 and -H4 command line options. By default they are set to /usr/local/lib/atari/Hx where x is 1, 2, 3 or 4. - H5: through H9: duplicate H0 through H4 but have automatic ATASCII to ASCII translation. They are not suitable for binary files. - All files accessed via the H: device have Unix filenames consisting entirely of lowercase letters. Changes in 0.2.5 ---------------- - Network Audio System support on Unix Systems [incl. Linux]. Waveform can be selected via the -sinewave or -squarewave options. At the moment it doesn't support the Atari Distortion values and switches channels using distortion off. This is available in XVIEW, X Window and Linux SVGALIB versions. The Network Audio System is freely available on the Internet - I used nas-1.2p2.tar.gz. Any Linux XVIEW version do not work when built with the Network Audio System. *** See BUGS file for more information *** - Support for /dev/sequencer removed since it didn't look like it would ever produce satisfactory results. - Introduced -help option that lists all options available in the emulator. - Added LAX unofficial opcodes - Corrected Vertical Fine scrolling in Antic Mode 7. - Enhanced DLIST command in "monitor.c" which now displays the display list using mnemonics. - Updated VMS command file. Changes in 0.2.4 ---------------- - Corrected mask in Atari800_GetByte() and Atari800_PutByte() - In Atari800_PutByte(), only switch on cartridge type when an access is made to page $d5 - Screen generation using word access where possible. - merged main.c with atari.c - Fixed SVGALIB Escape and cursor keys. - Emulated Floating Point Library which performs floating point arithmetic directly on your host computer - bypasses 6502 CPU emulation. Enabled by the -ffp option. Changes in 0.2.3 ---------------- - ADC and SBC functions are nolonger implemented as functions. - 6502 PC, S, A, X, and Y register now handled using local variables. Copied to global variables on exit from cpu and restored on re-entry. - Took advantage of a GCC feature: goto array[opcode]. Other compilers still use a switch statement. - Amiga: DisplayScreen() tidied up - Added DLIST command to monitor. This command shows the address of the display list (from hardware registers). - Major recode of all Antic Graphics Modes. Now allows Horizontal and Vertial fine scrolling. - Added an -interlace option to the SVGALIB version, giving a performance increase of about 10%. You would use this option to increase the speed of programs that must be run with a screen refresh rate of 1 (e.g. Burried Bucks) - In the SVGALIB version, the F11 and F12 keys can be used to modify the vertical positioning of the emulated screen. F11 moves the screen down while F12 moves the screen up. - Corrected a BUG causing River Raid to have corrupt screen display. Changes in 0.2.2 ---------------- - Made GetByte, GetWord and PutByte macros local to cpu.c - Added some 386 inline asm() for some 6502 addressing modes - Simplified Keyboard Handling - Assembly routines for Amiga AGA screen handling Changes in 0.2.1 ---------------- - Created a new Makefile for Unix. The Amiga support is now in Makefile.amiga - Sorry, but I renamed the ATARI800 environment variable to ATARI_LIBRARY which points to /usr/local/lib/atari by default. - Control + Shift + Key combination for Linux SVGALIB implementation. - SVGALIB version can be restarted after entering the monitor. - HELP Key available in XL/XE mode - Optional XVIEW (V3) Interface for X Window version. Allows disk changes using a file selector, controller configuration and access to performance variables. - BREAK Key fixed - PC Joysticks can be used with Linux (svgalib, x11 and xview) through the /dev/js0 and /dev/js1 devices. Second button activates the space bar which is very useful in Defender :-) Build with "make " where is one of:- linux-x11-joystick, linux-xview-joystick or linux-svgalib-joystick - X11 Joystick emulation using keyboard re-implemented. Straight X11 can use either numeric keypad or cursor keys + space. XVIEW can only use cursor keys + space (Problem using keypad in xview!) - Disk selector for Amiga version + controller configuration menu - Started code to emulate SERIN and SEROUT registers. At the moment this is ongoing and does not work. New startup option -nopatch disables the SIO patch leaving the normal SIO routine in place. Changes in 0.2.0 ---------------- - Separated Playfield Scanlines from Player Missile Scanlines - Corrected playfield colour errors in Antic modes 8 & 10 - Horizontal Fine Scrolling - Playfield and Player/Missile Priorities - Allow Emulator to run either as an Amiga Screen or Window - Added Paddle support for Amiga Changes in 0.1.9 ---------------- - Corrected bug in IRQST and IRQEN - Corrected minor bug in player missile collision detection - Amiga version is now full screen + Menus - Faster disk I/O - Added ATARI800 environment variable. This allows the emulator to be run from different directories. If ATARI800 is unset it will still try to load the OS images from object/ below the current working directory. - colours.h replaces colours.dat - Added man page. - New way of handling Joysticks, Triggers, Paddles and Console Keys - Corrected handling of CHBASE which was causing K-RAZY ANTIKS to display garbage. - Corrected handling of VCOUNT which was causing screen handling errors in Star Raiders (galactic map) and Henri (game screen). - Added Sound API. A test sound implementation is available for the Linux SVGALIB version via /dev/sequencer - It's not very good and has only been used to test the API. It is enabled by starting the program with the -sound option. Listen to the title screens of Necromancer, K-Razy Antiks and Henri (these are the best I've heard). - argc and argv are passed to the platform specific initialisation code - Atari_Initialise(). This allows platform specific options like -sound on the Linux SVGALIB version. - Extra Amiga options -ocs -ecs and -aga. Currently the default is AGA. The -ocs and -ecs have been tested on an A1200 with the OCS and ECS emulation modes enabled. At the moment it is not guaranteed to work on real OCS or ECS equiped machines since it has only been tested under Workbench 3.0. Hopefully someone will provide some feedback. - Another two Amiga options -grey and -colour. The -grey option produces a grey scale display on OCS, ECS and AGA machines. The -colour option produces a full colour display on AGA machines and up to 32 simultaneous colours on OCS and ECS machines. - The DOUBLE_SIZE compilation flag for the X11 version has been replaced by a runtime options. The runtime options are -small, -large and -huge. Changes in 0.1.8 ---------------- - Allows direct use of GRAFP0, GRAFP1, GRAFP2, GRAFP3 and GRAFM without using DMA. - -rom16 option to load standard 16K ROMs. - -a option to load object/atariosa.rom - -b [default] option to load object/atariosb.rom - Simplified screen generation for host - Player missile graphics collision detection has been moved into 'atari_custom.c' - Corrected read from PORTB (XL/XE emulation) - GTIA support for *all* antic modes. i.e. GTIA can be enabled in graphics mode 0 (antic mode 2) just like a real 800. POKE 623 with 64, 128 or 192 to test. - Amiga version can be compiled using either DICE C or GNU C - see Makefile Changes in 0.1.7 ---------------- - Issue cpu cycles during screen update (corrects VCOUNT problem) As a result DLI are not occuring on the correct mode line. - Support for 256 bytes/sector ATR files - Handle Insert, Delete and Tab keys properly - Handle Shift + Control + A-Z properly (X11 only) - Cartridge support tidied up (Thanks to Dave Bennett) Changes in 0.1.6 ---------------- - Correct Colours (Thanks to Chris Lam) - Fetch correct number of screen bytes with horizontal scrolling enabled - Speed improvements for Antic Display Modes - Support for ATR files (128 bytes sectors only) - Support for XL/XE ROM (Reset etc. do not work???) - Corrected Bug in BCD SBC instruction. - Added X11 window Expose event (Thanks to Ivo van Poorten) - Control characters within CURSES (Thanks to Ivo van Poorten) - Improved Portability - Remove '-b' flag (Use -rom object/ataribas.rom instead) - Graphical Support for Amiga 1200 - Faster 6502 Emulation - X11 Joystick emulation now uses the mouse Changes in 0.1.5 ---------------- - CURSES text only mode (Support for various terminals) - Display list jump instruction corrected. - Fixed SIO module (It didn't update DSTATS) Changes in 0.1.4 ---------------- - Changed GetByte and PutByte to macros - Added SVGALIB support for Linux which is much quicker than X11. - Added support for OSS Super Cartridges (Thanks to Dave Bennett) - -rom option to specify alternative cartridges - -oss option to specify alternative OSS Super Cartridges Changes in 0.1.3 ---------------- - Compilation option for double size screen - Trigger now initialises to not pressed - Joystick now initialises to central - Fifth Player support added - Support for Paddle 0 - Preparation for changing GetByte and PutByte to macros. Changes in 0.1.2 ---------------- - Now include in atari_custom.h - Resets count to countdown as soon as it reaches zero. This was causing problems with the RESET Key - count went negative. - Removed XImage structure. I am now updating only the pixels that have changed within a Pixmap. XCopyArea is used to move the Pixmap onto the Window. XCopyArea is not called if no pixels are changed. As a result I am trying a higher refresh rate. - Correction for BASIC version - I left some X11 stuff in resulting in unresolved sybols. - Remove unused status variable from atari_h_device.c - Added some test Amiga Intuition Code - not usable (No Colour or Keyboard) It manages to get the 'READY' prompt up! Atari Basic Blue is one colour and everything else is the other. When keyboard support is added you will be able to use Atari Basic. - Registers are now allocated variables within atari_custom.c. They are nolonger stored in main memory area. Changes in 0.1.1 ---------------- - Outputs an error message when ROM images are not available. Version 0.1.0 ------------- - Initial Release atari800-5.0.0/DOC/CHANGES.dc000066400000000000000000000141251425067567700150570ustar00rootroot0000000000000027-Apr-2015 atari800dc v0.79beta2 * adapt to current Atari800 cvs code base * adapt to current KOS code base (9b7049b3c8b39421) * add atari800.cfg file generated with the current version * fix controller dis-/reconnection code (due to new KOS version) * fix autorepeat in emulator menu (due to new KOS version) 01-Apr-2015 atari800dc v0.79beta1 * adapt to current Atari800 cvs code base * adapt to current KOS code base (f6fff5b012265521) 17-Aug-2008 atari800dc v0.78 * fix crash when loading state save file from ramdisk * add screen position configuration ability * default screen position can be set in the configuration file (DISPLAY_X_ADJUST and DISPLAY_Y_ADJUST) * adjust default PAL screen position by x=10, y=-8 * adjust default NTSC screen position by x=10, y=-8 * remove "Save configuration file" option in "Emulator configuration" menu. Since the atari800.cfg file is on the CD this option anyway never worked. 13-May-2008 atari800dc v0.77 * enable basic R: device emulation with the DC Coder's Cable (no modem controls; fixed to 8n1; baud rates 300 - 9600) * use Atari800 2.0.3 code base * use KOS svn code base version 560 * add possibility to switch X and Y axes of controller input * ability to disable either the D-Pad or the Joystick of the controllers (in "Controller Configuration" menu) * ability to disable or enable Bienias' sound improvements. They are too heavy for the DC and therefore disabled by default. 0.75 had them disabled, 0.76 had them enabled, now it's selectable. * when saving or restoring state display a "please wait" since accessing the VMU is very slow. This was already in 0.75 but got lost in 0.76. 30-Jan-2006 atari800dc v0.76 * use Atari800 cvs code base as of jan-27-2006 * use KOS svn code base version 289 * unplugging/replugging controllers after atari800dc has started up works now * screen update is now done by an assembler routine 17-Jan-2003 atari800dc v0.75 * use Atari800 cvs code base as of jan-11-2003 * reverted the sound changes which were introduced in the 0.72 version - the sound should be similar to 0.71. * saved states on the VMU now show a Atari icon. Due to a change in the layout of the state save file, saved states of previous versions aren't recognized. * changing video mode of emulated Atari now doesn't change the video mode used to drive the screen. These 2 video mode settings (what the emulated Atari thinks the video mode is, and the video mode used by the DC) can now be changed independently. Setting them to different values will disable double buffering, so best results are achieved if both settings are the same. * buttons B, X, Y on the 1st DC controller can now be redefined to generate simulated key presses on the keyboard. If they are redefined, the Start, Select, and Option keys can be entered in the keyboard emulation screen. 21-Sep-2002 atari800dc v0.72 * use Atari800 cvs code base as of sep-17-2002 * changing CDs should now work more reliably * load and save (VMU) state now display "please wait" messages and report if the save failed 21-Jul-2002 atari800dc v0.71 * use Atari800 1.2.3 code base * support to save/restore status on VMU. The status will be saved on the first VMU found, unless the configuration file contains an entry for STATE_DIR which is not empty and not ".". * changing video mode of emulated Atari (PAL/NTSC) now changes the video refresh rate of the DC (50 for PAL/60 for NTSC). Since the timing of atari800dc now depends on the video refresh rate, the PAL/NTSC differences are better emulated. * support for the Arcade Stick. * implemented double buffered screen update with the possibility to switch at runtime between normal screen update and double buffered version 17-May-2002 atari800dc v0.7 * support for autostarting executable files or atr images: place autorun.com or autorun.exe or autorun.atr into the root directory of the CD autorunning cartridges is not implemented (the emulator needs the cart type, and there is no way to tell him automatically) * selecting (inserting) a cartridge will now start it immediately * 800: added keyboard emulation using DC controller: now most keys can be generated with the standard DC controller * 5200: added keypad emulation (only for the 1st 5200 controller) * 800: Option/Select/Start are now emulated with the DC keyboard (F2/F3/F4) * support to change video mode of emulated Atari (PAL/NTSC) 08-May-2002 atari800dc v0.65 * directory browsing on the CD implemented. Due to additional CD accesses needed for this, don't populate a directory with more than a few hundred files, otherwise entering the directory will become very slow. * after startup, the CD can be exchanged. 15-Apr-2002 atari800dc v0.61 * fix display glitch on the left side introduced in the last version * in the crash menu one item wasn't centered 11-Apr-2002 atari800dc v0.6 * speed increase: use new DIRTYRECT facility of the a800 main code * 5200: controller joystick now generates 5200 controller compatible (analog) data. * 800: controller joystick also generates joystick direction events (previously only the joypad did) * customized ui * support for ui switch "emulate paddle": must now be turned on when using paddles. Up to four paddles are supported (only 2 tested, don't have more controllers; makes sense in 800 mode only, 5200 results are undefined :-) * in ui, B button is now the same as R trigger (go back) 05-Apr-2002 atari800dc v0.5 * sound fixed (reason of the large version jump) * improved ui "keyrepeat" * 800: simple paddle support * 5200: Y key now generates "H" - some games want a "H" to start 27-Mar-2002 atari800dc v0.2 * implemented "keyrepeat" while in the emulator ui (controller only) * fixed crash when system was set to atari 800 (not XL) and less than 3 controllers were connected * some sound changes (but they don't improve anything :-) * added support for 5200 controller 2nd action button 22-Mar-2002 atari800dc v0.1 atari800-5.0.0/DOC/CREDITS000066400000000000000000000360011425067567700145140ustar00rootroot00000000000000Current active members of the Atari800 development team: -------------------------------------------------------- Petr Stehlik (maintainer) Perry McFarlane (core developer) Piotr Fusik (core developer) Tomasz Krasuski (core developer) Mark Grebe (Mac OSX) Kostas Nakos (Windows CE, Android) James Wilkinson (DOS, BeOS, Win32) Christian Groessler (Sega Dreamcast) Andrey Dj (Raspberry Pi) Miro Kropacek (Atari Falcon) All contributors, past and present: ----------------------------------- Miro Kropacek - revitalised the Atari Falcon port: - Sound ThinAPI - Videl fixes & RGB support - SuperVidel support - double/tripple buffering Troy Ayers - PlayStation 2 port Michael Beck - SIO2PC ATR patch - SIO config patches (tested on real XF551) - monitor continues last command Dave Bennett - code enabling the use of OSS super cartridges - correction to Display List jump instruction - tidied cartridge code up Adam Bienias - a fix for better quality of sound Jakub Bogusz - fixed memory corruption in input.c - a fix for DCM decoding - jakub.act palette file (built-in since 1.3.6) Michael Borisov - completely new, high quality Pokey sound emulation Robert Brewer - Voxware sound driver updated for POKEY v2.4 Chris Chiesa - added code allowing emulator to run under DEC Windows Mike Coates Tom Haukap - Votrax SC-01 Ed Cogburn - major improvements of configure & make process - added copyright headers to all source files - miscellaneous cleanups and fixes Matthew Conte - new SoundBlaster driver for DOS Preston Crow - corrected calculation of ATR sector count - UI enhancement (folders in disk management) David Dahlstrom - DirectX input and display enhancements Nir Dary - detailed information about OSS, Williams, XEGS and MegaCart cartridges Andrey Dj - Raspberry Pi support Jason Duerstock - R-Time 8 cartridge support (real date and time from host machine) - page based memory access - PAGED_ATTRIB support Zdenek Eisenhammer - real.act palette file - util/keyboard.png Maximum Entropy - various corrections to Motif code - Motif callbacks for Insert Disk, Eject Disk and Insert ROM - bug fixes in sio.c - bug fix to devices.c allowing DOS 2.5 to get a directory of H: - bug fix to monitor.c (EOF on input + blank lines) - undocumented commands added to monitor's "HELP" command - implementation of Disable Drive menu item for Motif - fixed scrolling problem for SGI and SPARC machines - added FPS Monitor to X11 and Motif versions - changes to pattern matching for H: device - Motif fileselector retains state from one invocation to the next - fixed an unitialized pointer - tidied up declaration of various functions - removed warning messages when compiled with -Wall - configuration program detects if longwords need to be aligned - modification to X11 paddle emulation - removed annoying flicker present under some X11 platforms - removed hardcoded paths in Motif code - various fixes for curses mode David Firth - original author of Atari800 Stephen Firth - graphical support for Amiga Friedrich Friedrichs - RPM .spec file Ron Fries - Pokey Sound Emulation library Rob Funk - tidied up emulator abort code - case insensitive monitor commands Piotr Fusik - general rewrite of ANTIC and GTIA (accuracy and speed improvements) - changed ANTIC/CPU synchronization - corrected undocumented 6502 opcodes - corrected PCX screenshots and added interlaced screenshots - PNG screenshots - improved IRQ accuracy - ATR write protection - monitor improvements - loading of .act palette files - improved disk LEDs - rewritten executable loader - UI enhancements - read-only mode for H: devices - exact 17-bit and 9-bit polys for sound and RANDOM - improved emulation of potentiometers - support for Express, Diamond, SpartaDOS X, XEGS, and other cartridges - corrected disk formatting - cassette recorder emulation - emulation of paddles, Touch Tablet, Koala Pad, Light Pen/Gun, Trak-Ball and Amiga/ST mice - util/act2html - initial cycle-exact GTIA emulation - 16K, 576K, 1088K RAM machines - Display List based screen in CURSES ports - util/benchmark.pl - loader for Atari BASIC programs - file format autodetection - ported DirectX version to MSVC Robert Golias - UI enhancements and DJGPP fixes - monitor enhancements (esp. line assembler) - fullscreen in DOS port - 320x240 and 320x480 interlaced graphics - VESA2 support in DOS - keyboard and joystick handling, joystick emulated on keyboard Mark Grebe - initial Mac OSX support - new complete H: device support (with subdirectories) - Multiple Disk Set support - new state-file implementation supporting bank-switching cartridges and disk images - XEP80 Shay Green - NTSC composite video emulator, based on NewRisingSun's algorithm Christian Groessler - Sega Dreamcast port - SVGAlib patch for joystick - BRKHERE command - missing autorepeat in Atari800 debugger under X11 fixed - missing XSync calls in X11 - UI improvements ("Please Wait" message for slow operations) - improved R: device support (serial/network/both) Achim Haertel - XF551 highspeed transfer emulation - greatly improved standard cassette loading - implemented cassette writing - cassette loading with variable baud rate - trainer searcher - slow loading of binary DOS files Nathan Hartwell - Win32 fixes - sethdr perl script Cameron Heide - 16,32-bit X11 SHM support Alex Hornby - Virtual 2600 Emulator the "/dev/dsp" code bases on Tom Hunt - original author of R: device support Jakub Husak - support for SIC! cartridge mapping (wihout the flash programming feature) Gerhard Janka - cpu_m68k.asm corrections and improvements - double buffering of screen output - cpu_m68k.asm massive updates that keep it compatible with cpu.c Ed Kaminski - correction of Antic 4&5 Bug affecting Galactic Chase & Mr. Do - improved speed of DOS version by syncing with a high resolution timer - PORTB duplicated special handling of PORTA Jari Karppinen - fixed some warnings and bugs such as "void main()" in joycfg Tomasz Krasuski - various bugfixes - accurate emulation of NTSC and PAL palettes - support for color adjustments - saving of color palettes - integration of Blargg's video kernel version 0.2.2 - rewrite of SDL video subsystem - new options for display adjustments in SDL port - OpenGL support in SDL - support for V-Sync in SDL port (only on Windows fullscreen) - slider widget in basic UI - autosaving of the configuration file - Tape Management menu with options for creation of tapes and rewinding - display tape position during loading/saving - fixes in tape emulation to support some non-standard tapes - rewrite of cartridge subsystem to fix savestates and pigyback cartridges - support OSS 8 KB, OSS 043M, Blizzard 4 KB, AST, Atrax SDX, Turbosoft, Ultracart, Low bank, and standard 2 & 4 KB cartridge mappings - rewrite of XEP80 emulation to fix inaccuracies - automatic searching for OS ROM images based on CRC matching - rewrite of Select system menu, incl. choosing OS & BASIC revision - support for RAM amounts other than 16/48 KB in Atari 400/800 - support for RAM expansions by RC Systems - emulation of 1200XL and XEGS features - autodetection of video and sound libraries in configure Kuba - vertical retrace control in DOS port Jindrich Kubec - various corrections and refinements (SIO) - hours of testing on real Atari800XL - research on real cartridges Jerzy Kut - MapRAM memory expansion for the XL/XE Chris Lam - RGB values for each Atari colour Rich Lawrence - Atari800Win author - DCM and ZLIB compressed files support Avery Lee - a fix for error codes in SIO patch handler - ROM images for AltirraOS, Altirra BASIC and Altirra 5200 BIOS Marcin Lewandowski - Atari800Win PLus maintainer since version 4.0 - initial implementation of "B" and "LABELS" monitor commands - fixed incorrectly saved N flag when entering the monitor - found a memory leak in remez.c Paulo Lopes - windowed mode for Win32 maddoxik - "Make Blank Boot Disk" option added to Disk Management UI Cyrus Malek - patch to make the X11 Backspace key work the same as the Delete key Chris Martin - R: device as Atari850 emulation via network Perry McFarlane - Antic fix in vertical scroll - complete Antic rewrite (DIRECT_VIDEO approach, but better) - GTIA enhancements (based on Thomas' code, but using DIRECT_VIDEO) - Allegro library in DOS port - colour artifacting - "digital sound" emulation in DOS port - complete cycle-exact ANTIC/GTIA emulation - SDL on MS Windows fixes - interpolated scanlines (for SDL) - various SDL fixes (Caps Lock) - Axlon and Mosaic RAM expansions for Atari400/800 - support for switching between NTSC and PAL color palettes - Java port (NestedVM) - sound improvements: nonlinear mixing, two-tone filter - emulation of the 1400XL, 1450XLD, MIO and Black Box - XEP80 emulation by Mark Grebe - CX85 numeric keypad - SIO: support for .pro images - various bugfixes in all areas of Atari800 - and much much more, including general source clean up in 2.1.0 Rob McMullen - libatari800 compile target (atari800 as a library) - multimedia framework, audio codecs, video codecs, and AVI video support Petr Mojzisek - rawkey support for svgalib Nathan Monson - fix for handling 6502 V flag during ADC and SBC operations Kostas Nakos - update of the WinCE port - porting to Smartphone devices - the whole Android port ("Colleen") Krzysztof Nikiel - SaveINT() fix in state save code - Linux improvements (new svgalib keyboard input and screen output) - sound improvements (interpolation, configurable delay, 4 buffers) - autoconf stuff - Windows code clean up and DirectX version John Oyler - atari2.svg and atari2.png icons Chris Palmer - spotted incorrect declaration of atari_basic[8129] in pia.c Ivo van Poorten - added X11 window Expose Event - made hardware registers repeat within their page - control characters in CURSES version - Makefile targets for FreeBSD systems - modification to Curses character attributes handling (for FreeBSD) - ported emulator to DOS using DJGPP - IDE support Jacek Poplawski - SDL port of Atari800 Erhard Puetz - reported inaccurate PERCOM emulation Matthias Reichl - POKEY ALLPOT register fix - The!Cart emulation fixes - reported quirks in behaviour of XEGS cartridges Thomas Richter - GTIA collisions and third colour of players - new SIO code with formatting support - POKEY timers - ADC/SBC "V" bit bug found and fixed using Frodo 6502 emu source Karel Rous (Empty Head) - rewrote cpu.c to optimized MC68030 assembler Benjamin Schreiber and Alexander Martinez - SDL keyboard joystick emulation stored in the Atari800 config file Daniel Serpell - SDL keyboard based on Unicode values, more keys emulated correctly Neil Ship - correction to new cartridge code introduced in 0.4.0 Ken Sider - his binary loader has been used by Rich for developing our EXE LOADER Petr Stehlik - project coordinator/manager since v0.8.2 (spring of the 1998) - added support for Atari Falcon (port itself, sound, kbd, joy) - added sound, keyboard and joystick support for DOS version - snailmeter - various fixes in the SDL version - Atari800 project web pages at http://atari800.github.io/ - RT-Config fixes (per-user and system wide config, Y/N questions) Radek Sterba - added all missing CPU 6502 instructions - implemented precise timing in Antic and CPU - fixed PMG registers and implemented PMG flickering - added full 256 opcodes support to disassembler - various DOS enhancements - added emulation of 320 kB memory (Atari320XE) Petr Sumbera - LPTjoy idea and design of the interface Tomasz Szymankowski - Atari800Win PLus author - "-state" command line option - sector counter Vasyl Tsvirkunov - WinCE port of Atari800 - refactored UI (introduced ui_basic.c) Steven Tucker and Wrathchild - Atarimax cartridges B Watson - mouse support for SDL - direct mouse support (SDL and X11) - readline support for the internal monitor (including command history) - turbo mode James Wilkinson - DirectX joystick support - various enhancements and bug fixes Piotr Wiszowaty - LPTjoy support for Linux Ken Zalewski - segfault fix in GetKeyCode of atari_x11 Marek Zelem - little improvements in SIO and main sync loop for Unix - X11 keyboard - X11 screen (background => faster emulation) - digital (volume only) sound - console sound emulation - disk drive sound emulation - various fixes Marcin Zukowski - fix in ANTIC, GTIA - slight monitor improvement - fix in Atrax cartridge bank switching atari800-5.0.0/DOC/ChangeLog000066400000000000000000006451411425067567700152610ustar00rootroot00000000000000*** With Atari800 hosted by Github we rely on the git commit messages now *** so for detailed changelog please clone git repository and use git log *** or visit https://github.com/atari800/atari800/commits/master 2018-07-07 Tomasz Krasuski * monitor.c: Fixed building --without-video. 2018-07-04 Tomasz Krasuski * android/res/values/strings.xml, android/src/FileSelector.java, android/src/MainActivity.java: Allow running the emulator without setting system ROM path - Altirra ROMs are available. Updated the first-run message to reflect that. * android/jni/androidinput.c, android/src/A800view.java: Fixed a bug when the "Right-Handed Joystick" option is enabled: a one-finger touch on the screen's left side did not register as a trigger press. 2018-07-01 Tomasz Krasuski * android/jni/graphics.[ch]: Fixed an issue with labels of the console keys being unreadable on high-resolution displays. They are now scaled to screen resolution. * android/jni/androidinput.c: Fixed a bug in computing coordinates of console key presses, which could result in a different key being pressed than expected. Moved variables to reduce their scope, for better readability. 2018-06-22 Tomasz Krasuski * DOC/NEWS: Added an entry about addition of DOC/BUILD.windows. * DOC/NEWS, DOC/TODO, DOC/USAGE, .cvsignore, Makefile.in, android/jni/Android.mk.in, atari.[ch], atari800.man, configure.ac, dc/Mahefile.dc, devices.c, emuos.*, esc.c, memory.c, roms/altirra_5200_os.[ch], win32/msc/Makefile: Removed EmuOS. 2018-06-10 Tomasz Krasuski * DOC/BUILD.windows, DOC/INSTALL: Extracted Windows-specific instructions to a separate document. Added instructions on building with MSYS2. 2018-06-05 Tomasz Krasuski * android/jni/androidinput.[ch], android/jni/graphics.c, android/jni/jni.c, android/jni/platform.c, android/jni/sound.c: Fixed -Wimplicit-function-declaration warnings. * android/jni/androidinput.[ch]: Fixed -Wimplicit-int, -Wunused-comparison, -Wbitwise-op-parentheses, -Wtautological-constant-out-of-range-compare and -Wparentheses warnings. * android/jni/androidinput.c, android/jni/graphics.c: Fixed -Wswitch warnings. * android/jni/androidinput.c, android/jni/jni.c: Fixed -Wdangling-else warnings. * android/jni/jni.c: Fixed -Wpointer-sign and -Wreturn-type warnings. * android/jni/keys.inc: Disabled many -Winitializer-overrides warnings. * atari.c: Fixed a -Wtautological-constant-out-of-range-compare warning. * ui.c: Fixed a -Wformat-truncation warning. * monitor.c: Fixed a -Wformat warning. * dos/vga_gfx.c, img_tape.c: Fixed -Wstringop-truncation warnings. * ide.c: Fixed a -Wmultistatement-macros warning. * antic.c, configure.ac: Fixed -Wpointer-to-int-cast warnings. * Makefile.in: Disable an unavoidable -Wpedantic warning in dos/dos_sb.c. Add the src/roms/ directory to make clean. * devices.c: struct stat.st_time and time_t may have different size on some platforms. 2018-06-02 Tomasz Krasuski * cassette.c, devices.c, esc.c, sio.c: Added support for SIO patches in AltirraOS 800/XL. * android/jni/jni.c: Allow running "Atari OS/B" machine types with AltirraOS when no real rev. B ROMs are available. 2018-06-01 Tomasz Krasuski * atari800.man: Fixed an error in description of -800-rev. * DOC/NEWS, DOC/USAGE, atari.[ch], atari800.man, configure.ac, emuos.h, emuos_altirra.c, esc.c, memory.c, roms/altirra_5200_os.[ch], roms/altirra_basic.[ch], roms/altirraos_800.[ch], roms/altirraos_xl.[ch], sysrom.[ch], ui.c: Reverted support for Altirra OS and redid it from scratch - the AltirraOS version added previously was the 400/800 variant, but it was used in both 400/800 and XL/XE modes. Added support for AltirraOS 400/800, AltirraOS XL, Altirra 5200 BIOS and Altirra BASIC. Added options for Altirra OSes and BASIC in the "System settings" menu. SIO patches are not yet supported in Altirra OSes. * DOC/CREDITS: Added credit to Avery Lee for his Altirra ROMs. 2018-05-29 Tomasz Krasuski * DOC/README.android: More detailed build instructions. 2018-05-27 Tomasz Krasuski * monitor.c: Fixed building with --disable-monitorhints. * configure.ac, monitor.c: TIOCGWINSZ may require including termios.h on some platforms (e.g. Android) - added autodetection of such case. * DOC/NEWS, src/android/jni/Android.mk.in: Fixed building of Android port - emous is now an optional module. * .gitignore - Added files to ignore from the Android port. 2018-05-01 Petr Stehlik * implemented joyhat support for all four real joysticks (command line, configuration file and also the F1 TUI configuration). Original patch from Michal "Baktra" Kalous, with my fixes and clean up. * DOC/NEWS: updated with new platform specific bits for the 4.0.0 release 2018-04-26 Petr Stehlik * TravisCI scripts from Thorsten Otto added ** 4.0.0 released on 2018-04-21 2018-04-21 Petr Stehlik * src/monitor.c: fixed printf() GCC warnings * src/mzpokeysnd.c: silence generates 0000 in the physical sound output now. Originally it was generating a large negative value that was causing an annoying humming sound in certain high-end sound systems. * DOC/*: updated for new project web: atari800.github.io * src/sound.c: "-volume" parsing fixed * src/atari800.man: "-volume" documented 2017-06-25 Tomasz Krasuski * DOC/NEWS, DOC/USAGE, android/jni/jni.c, atari800.man, cartridge.[ch], ui.c: Original Atrax cartridges have address and data lines intermixed. The existing CART Type 17: Atrax 128 KB cartridge was therefore not a type of real cartridge, not usable for actual Atrax ROM dumps. I've renamed it to "Decoded Atrax 128 KB cartridge" and added new "Type 68: Atrax 128 KB cartridge" that supports real Atrax ROM dumps. 2016-10-08 Tomasz Krasuski * debian/compat, debian/changelog, debian/control, debian/rules, debian/source/format: Updates from the official Debian package. 2016-10-07 Tomasz Krasuski * sdl/input.c: Fix segfault when using -nojoystick. Fix improper use of SDL_PollEvent - caused keyboard input lag when moving a mouse or joystick. 2015-11-12 Tomasz Krasuski * pia.c: Fix convoluted "if" condition. 2015-10-13 Tomasz Krasuski * sio.c: Suggested by Avery Lee: Fix SIO error codes with SIO patch enabled. This bug tripped up the original Sikor Soft's Ketchup disk, that relied on attempting to read disk sector 720, which should return error 144 instead of 146. 2015-09-23 Tomasz Krasuski * cassette.[ch], pia.c, screen.c, sio.[ch]: Some tapes try to read from disk while the tape motor is on (case in point: Cubbyholes (APX)). This was not emulated correctly - when a disk read was attempted while tape motor was on, the value of the sio.c->TransferStatus variable would never revert to SIO_CasReadWrite, and the tape loading would not continue. This is now fixed. As a consequence, tape emulation ceased to use the variables SIO_last_op, SIO_last_op_time and SIO_last_drive, so the related code in screen.c and pia.c has been updated with that in mind. 2015-08-26 Tomasz Krasuski * atari.c: Avoid segfault on switching TV system while sound is disabled. 2015-07-23 Christian Groessler * dc/Makefile.dc, dc/atari_dc.c, dc/config.h, dc/displayscreen.S: Rewrite of the screen update routines. DIRTYRECT isn't used anymore. Now always the whole screen is updated. The new routines use the Dreamcast processor's "store queue" which results in a decent speed-up. The time spent updating the screen is now constant, regardless of the screen changes. With little changes to the screen more time is spent in the screen update routines, compared to DIRTYRECT. But for the worst case (whole screen dirty) it's faster than with DIRTYRECT. Boulder Dash in NTSC mode now doesn't jitter when scrolling. Add another option in Makefile.dc to use OCRAM (fast on-processor RAM, cutting the data cache size in half) for the palette data. This option is disabled for now since I didn't notice any difference in emulation speed with it. Maybe if more "hot" variables are moved into OCRAM it could make a difference. * dc/shlelf-ocram.xc: New File. Linker script to be used when using the OCRAM option. 2015-06-06 Tomasz Krasuski * binload.c: Achim Haertel's patch fixes emulation crash when slow loading of DOS binary files is turned off during such loading. * ui.c, DOC/USAGE: Rename "Slow loading of XEX" to "Slow booting of DOS binary files" - XEX is just one of the possible extensions of such files. 2015-06-02 Petr Stehlik * sdl/input.c: preliminary support for four real joysticks 2015-05-29 Tomasz Krasuski * binload.[ch], cfg.c, ui.c, DOC/CREDITS: Achim Haertel's patch adds an option to slow down the loading of DOS binary files ran using "Run Atari Program". * atari_curses.c, atari_falcon.c, atari_x11.c, amiga/amiga.c, javanvm/input.c, sdl/input.c, win32/atari_win32.c, DOC/USAGE: Map F7 to temporarily stop slow loading of DOS binary files, in addition to its standard "Break" key mapping. 2015-05-27 Christian Groessler * antic.c, cartridge.c, ide.c, input.c: Remove warnings when compiling on FreeBSD/i386 10.1 with llvm. 2015-05-10 Christian Groessler * atari_x11.c (PLATFORM_Initialise): Preinitialize image_data buffer to shut off valgrind warnings. * devices.c: Fix for bug #43: Prevent double close of entry in h_fp[] array. 2015-04-28 Tomasz Krasuski * antic.c: Fix an infinite recursion with enabled NEW_CYCLE_EXACT, disabled PAGED_ATTRIB, when the ANTIC display list is pointed to GTIA registers. The recursion was: ANTIC_UpdateScanline -> draw_partial_scanline -> antic_load -> MEMORY_CopyFromMem -> MEMORY_GetByte -> MEMORY_HwGetByte -> GTIA_GetByte -> ANTIC_UpdateScanline. Test case: Sky Writer XEX (length 16827, CRC32 9e0fd2e7) running in 400/800 mode. 2015-04-27 Christian Groessler * dc/atari_dc.c: Remove obsolete comments. * dc/version.h: Set A800DCBETA to 2 (2nd beta version). * DOC/TESTS.dc: New file. Lists tests which should be run before a new Atari800DC release. * DOC/README.dc: Update. * DOC/CHANGES.dc: Update for Atari800DC 0.79beta2 release. 2015-04-24 Christian Groessler * dc/atari_dc.c: Parse "DOUBLE_BUFFERING" from atari800.cfg, setting the 'db_mode' variable. Some other small cleanups. * dc/atari800.cfg: Add "DOUBLE_BUFFERING" entry. 2015-04-16 Christian Groessler * dc/atari_dc.c: Adapt controller and keyboard detection to new KOS version. 2015-04-11 Tomasz Krasuski * ui.c: Fix a bad cast that resulted in crash when changing display resolution. * artifact.c: Remove an invalid cast. 2015-04-08 Christian Groessler * sdl/input.c: Fix auto-repeat in emulator menu when using on-screen keyboard emulation. 2015-04-08 Christian Groessler * dc/atari_dc.c: Fix paddle emulation (adapt to new KOS return values). Add PLATFORM_Configure() to parse DISPLAY_X_ADJUST and DISPLAY_Y_ADJUST. Remove warnings and some unused code. * dc/config.h: Add SUPPORTS_PLATFORM_CONFIGURE. * dc/atari800.cfg: Recreated with new emulator version. 2015-04-01 Christian Groessler * sound_oss.c: Fix sound device name for NetBSD and OpenBSD. 2015-03-31 Christian Groessler * dc/atari_dc.c: Fix crash when disconnecting the controller while being in the emulator menu. Fix inaccessibility of controller when disconnecting and reconnecting to a different port while being in the keyboard emulation menu. 2015-03-28 Tomasz Krasuski * configure.ac: Fix displaying --enable-nonlinear_mixing twice on ./configure --help. NONLINEAR_MIXING now defaults to enabled on all targets. 2015-03-28 Christian Groessler * ui.c, ui_basic.c: Adapt emulator menu to Dreamcast and add DC specific menu items. * dc/atari_dc.c: Ditto. And fix swapped up/down direction when using the controller joystick. 2015-03-27 Christian Groessler * dc/atari_dc.c (controller_kb): Fix auto-repeat in emulator menu. 2015-03-23 Christian Groessler * dc/atari_dc.c: The overridden console keys were never released, except for START. 2015-03-21 Perry McFarlane * gtia.c: Improve player/playfield collisions for NEW_CYCLE_EXACT 2015-03-21 Tomasz Krasuski * pokeysnd.[ch], DOC/NEWS: Fixed a crash with SYNCHRONIZED_SOUND, when enabling stereo sound together with ENABLE_NEW_POKEY=0. Added comment to avoid future mistakes. 2015-03-20 Christian Groessler * dc/atari_dc.c: Fix problem when trying to leave the on-screen keyboard emulation menu when an override for the DC 'B' button is configured. Some other unrelated code cleanups. 2015-03-19 Christian Groessler * dc/atari_dc.c: Don't inject a "START" button press when leaving the on-screen keyboard. 2015-03-17 Perry McFarlane * antic.c, artifact.c, colours.c, img_tape.c, log.[ch], monitor.c, screen.c, sio.c, ui.[ch], sdl/video.c, sdl/video_gl.c, sdl/video_sw.c, win32/sound.c: Fix gcc warnings, allow compiling with g++. 2015-03-16 Perry McFarlane * pia.[ch], pokey.c, statesav.c: Fix PIA CA2/CB2 and irq. Bump SAVE_VERSION_NUMBER to 8. 2015-03-14 Tomasz Krasuski * sio.c: With SIO patch enabled, replicate behaviour of the real SIO OS routine. E.T. Phone Home! now works with SIO patch enabled. 2015-03-11 Perry McFarlane * cpu.c: Fix opcodes 93, 9b, 9c, 9e, 9f (sha ind_y, shs, shy, shx, sha) page crossing behaviour. 2015-03-05 Christian Groessler * ui.c (AboutEmulator): Change copyright year to 2015. * dc/version.h: Add a knob to switch "beta versions" on and off. * dc/atari_dc.c: Update on-screen keyboard to current interface of ui_basic.c. 2015-02-25 Christian Groessler * configure.ac: If a non-standard location for the X11 libraries was given (--x-libraries parameter), add this location to the run-time search path. 2015-02-24 Perry McFarlane * bit3.c, DOC/NEWS: Invert bit3 cursor, add bit3 NEWS. 2015-02-24 Christian Groessler * atari_x11.c, configure.ac: Add support for palette update in X11 targets. * gtia.c: Fix compilation of basic (no video) target. 2015-02-18 Tomasz Krasuski * DOC/NEWS, DOC/USAGE: Updated for new release. 2015-02-12 Petr Stehlik Committing fixes provided by Jools Wills in SF.net Bugs #41 and #42: * configure.ac: native building on RPi fixed * sdl/video.c: handle properly situation when any resolution is available 2015-02-12 Perry McFarlane * DOC/ChangeLog, DOC/TODO, DOC/USAGE, atari.c, cartridge.c, cfg.c, configure.ac, pbi.c, ui.c, videomode.[ch], sdl/input.c, sdl/palette.c, sdl/video.[ch], sdl/video_gl.c, sdl/video_sw.c, bit3.[ch]: Emulate the Bit3 Full View 80 column card for the Atari 800. Added more #ifdefs for AF80, XEP80_EMULATION, PBI_PROTO80, and NTSC_FILTER. 2015-02-07 Tomasz Krasuski * cassette.c, img_tape.c: Minimal support for reading CAS "fsk " chunks, to support some tape images of copy-protected original software, only with unpatched SIO. 2015-01-24 Tomasz Krasuski * platform.h, sound_oss.c, sound.[ch], ui.c, dos/sound_dos.c, javanm/sound.c, sdl/sound.c, atari800.man, DOC/USAGE: Improve usability: rename "Fragment size" to "Hardware buffer size" and change the unit to milliseconds instead of frames. Code for resizing the buffer to a power of 2 is now called in platform-specific modules - the reason is not all sound backends require such adjustment of the buffer length. 2015-01-10 Tomasz Krasuski * win32/msc/Makefile: Fixed incorrect file extensions. 2014-11-28 Tomasz Krasuski * colours_ntsc.c, atari_ntsc/atari_ntsc_impl.h: Fixed mathematics in the YIQ computations - although the resulting colors were correct, the names of i and q variables were swapped in the sources. * colours_ntsc.c, colours_pal.c, colours.[ch], pal_blending.c, filter_ntsc.c, atari_ntsc/atari_ntsc.c, DOC/NEWS: Fixed computation of gamma adjustment - it is now applied to each of the three RGB channels separately. 2014-09-22 Kostas Nakos * android/* : Bugfix no sound when machine is NTSC, small bugfixes and workarounds for OSL sound. Prepare for release. 2014-09-19 Kostas Nakos * configure.ac: Switch to android-9 environment for OpenSL ES support. * android/*: Add OpenSL ES native sound support for post-2.3 devices. Gained accurate sound playback. Added bindings for capstoggle & atari keys. 2014-09-16 Kostas Nakos * atari.c: Skip ROM file search as some android builds go in infinite loop due to buggy platform implementation. * configure.ac: Updated to newer android toolchain. * android/*: Support for built-in Planetary Defense 2012 (courtesy and thanks to Tom Hudson), miscellaneous fixes, update to newer android toolchain. ** 3.1.0 released on 2014-04-12 2014-04-12 Petr Stehlik * DOC/ChangeLog, DOC/NEWS: updated for new release * README.1ST, atari800.spec, DOC/README, atari.h, atari800.man, configure.ac, util/export: version++ 2014-04-05 Tomasz Krasuski * cfg.c, mxpokeysnd.[ch], pokeysnd.[ch], sound.c, ui.c, configure.ac: Moved the SYNCHRONIZED_SOUND code made more generic and moved out of mzpokeysnd.c to pokeysnd.c. Now synchronized sound is supported by both pokey sound engines. * colours_pal.c: Minor formatting & constness fixes. 2014-03-03 Tomasz Krasuski * atari.c, atari_basic.c, atari_curses.c, atari_falcon.c, atari_ps2.c, atari_x11.c, amiga/amiga.c, dos/atari_vga.c, sdl/main.c, win32/atari_win32.c, win32/main.cpp, atari_wince.c Ensure that Sound_Exit() is called after config file is saved-on-exit, by moving the call to Sound_Exit() out of PLATFORM_Exit() and into Atari800_Exit(). Reason: When SOUND_THIN_API is enabled, autosaving after Sound_Exit would cause the config file's SOUND_ENABLED entry to always be written as 0. 2014-02-27 Tomasz Krasuski * sdl/init.c, sdl/main.c: Avoid "undefined reference to PLATFORM_Time" linker error when configured --with-sound=sdl but --with-video != sdl. * atari.c: Fixed a bug with keyboard input not working on --with-video=ncurses --with-audio=oss. On initialisation, Sound_enabled == TRUE but audio output is not yet initialised. In such situation calling sound_oss.c->PLATFORM_SoundSetup() would close standard input, thus disabling keyboard. 2014-02-19 Tomasz Krasuski * cartridge.[ch], ui.c, android/jni/jni.c, atari800.man, DOC/cart.txt, DOC/USAGE, DOC/CREDITS: With Hias' help - documented behaviour of the XEGS cartridges more precisely. Also added a different variant of the XEGS 64 KB cartridge - both variants were manufactured by Atari. 2014-01-29 Tomasz Krasuski * cartridge.[ch], ui.c, android/jni/jni.c, atari800.man, DOC/cart.txt, DOC/USAGE: Based on description by Hias, added minimal support for the 32 and 64 MB variants of The!Cart. * DOC/cart.txt: Added column that describes state of emulation support of the cartridge types. Also other fixes. 2014-01-26 Tomasz Krasuski * dos/dos_sb.c: Bring indentation more into line with the apparent standard. * dos/sound_dos.c, dos/dos_sb.[ch], configure.ac: Apply SOUND_THIN_API to DOS sound. Also fix two old bugs: pitch being wrong, and sound not working in one-shot mode (DSP 1.xx). * sound.c, ui.c: Move code that stores current sound settings in Sound_desired - previously settings were stored only when changed from GUI, but not when changed from command line params. 2014-01-18 Tomasz Krasuski * ui.c: Fix obvious mistake in System Settings, that lead to buffer overflow. * cartridge.c, DOC/cart.txt, DOC/CREDITS: Fixes by Matthias Reichl for emulation of The!Cart. 2013-12-28 Tomasz Krasuski * atari.c: Make turbo mode considerably faster, by avoiding pointless screen redraws. * sdl/sound.c, sound.c: Fix stereo sound on SDL and -sound/-nosound parameters, broken when introducing SOUND_THIN_API. 2013-12-15 Tomasz Krasuski * atari.c, util.[ch]: Atari_time and Atari_sleep renamed to Util_* and moved to util.c module - they are now used externally from atari.c. * atari.c, cfg.c, platform.h, sound_oss.c, sound.[ch], ui.c, javanvm/atari800.java, javanvm/javanvm.h, javanvm/sound.c, sdl/sound.c, configure.ac, atari800.man, DOC/USAGE: Formerly SDL-specific support for synchronized sound moved to new module sound.c and made platform-independent. In effect, created a new thin API for platform-specific audio. Platforms that support SOUND_THIN_API will have thinner layer of platform-specific sound code and will support a common set of new functionality: - ability to build with --enable-synchronized_sound, - new UI Sound menu options for enabling/disabling sound, setting sample rate, choosing 8- or 16-bit sound, setting hardwares ound buffer size, and (with enabled synchronized_sound) setting sound latency, - saving these new options in config, and setting them from command line parameters. Currently SOUND_THIN_API is implemented for SDL, JavaNVM and OSS sound. 2013-12-14 Tomasz Krasuski * javanvm/input.c: Map F12 to Turbo, as in other targets. 2013-12-08 Tomasz Krasuski * binload.c: When no OS patches were enabled, Running of BASIC files would cause the emulated system to go sraight to Self Test: the calls to Device_PatchOS() would enable E: patches, but wouldn't disable the OS memory checks. Calling ESC_UpdatePatches() instead solves the issue. * afile.c, atari.c, gtia.[ch]: Avoid sending Option and Start keystrokes to a diagnostic cartridge when coldstarting. * cartridge.[ch], ui.c, android/jni/jni.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added support for the 2 MB MegaCart mapping. 2013-12-07 Tomasz Krasuski * cartridge.[ch], atari800.man, DOC/cart.txt: Added support for a small subset of The!Cart mapping. * cartridge.[ch]: CARTRIDGE_kb is not modified anywhere, made it const. 2013-12-04 Tomasz Krasuski * cartridge.[ch], ui.c, android/jni/jni.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added read-only support for the 4 MB Flash MegaCart mapping. 2013-12-02 Tomasz Krasuski * cartridge.[ch], ui.c, android/jni/jni.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added support for the MegaMax 2 MB cartridge mapping. Developers of The!Cart confirmed that the CART ID for the 64MB variant is not needed, so I've reused it. 2013-11-23 Tomasz Krasuski * configure.ac, atari.c, platform.h, atari_ps2.c, sdl/main.c : Minimal cleanup of platform-specific Sleep/Time routines. 2013-11-11 Tomasz Krasuski * monitor.c: Fixed & updated symbols based on OS & BASIC source listings. 2013-11-09 Tomasz Krasuski * DOC/cart.txt: By request of the developers of The!Cart, reserved two IDs for this new cartridge type. 2013-05-02 Tomasz Krasuski * DOC/INSTALL: Update NestedVM build manual - it doesn't build with --enable-ide. * javanvm/atari_javanvm.c: Fix overflow of dsp_buffer - could happen on some systems where JAVANVM_SoundAvailable sometimes returns value larger than 2*line_buffer_size. * DOC/INSTALL, configure.ac, Makefile.in, javanvm/atari_javanvm.[ch], javanvm/input.[ch], javanvm/javanvm.h, javanvm/main.c, javanvm/sound.c, javanvm/video.[ch]: Code cleanup - split atari_javanvm.c to separate modules for video, sound and input. Merge javanvm and javanvm-basic targets into the default target - NestedVM host is now autodetected. 2013-04-28 Tomasz Krasuski * Makefile.in: Use printf instead of echo -e - more portable (and -e didn't work on GNU Make 3.81). 2013-04-23 Tomasz Krasuski * artifact.[ch], atari.c, atari800.man, cfg.c, configure.ac, pal_blending.[ch], ui.c, videomode.[ch], sdl/video_gl.c, sdl/video.sw.c, sdl/video.c, DOC/USAGE, amiga/makefile, dc/Makefile.dc, win32/msc/Makefile: New module, artifact.c, which manages settings of all artifacting modes. Artifacting modes are now stored independently for PAL and NTSC modes, and set according to the current TV mode setting. * sdl/main.c, sdl/video.c: When in monitor, avoid reopening the SDL window during stepping through code. 2013-04-15 Tomasz Krasuski * colours_pal.[ch], colours.[ch], configure.ac, pal_blending.[ch], platform.h, ui.c, sdl/palette.[ch], sdl/video_gl.[ch], sdl/video_sw.[ch], sdl.video.[ch]: Added accurate emulation of PAL delay line (PAL blending). 2013-04-08 Tomasz Krasuski * antic.[ch], gtia.c, ui.c: Improve the existing PAL blending implementation, which worked only on lines in GTIA mode 9 and was erroneously called "GTIA11_DELAY". Previously it only blended lines placed below GTIA 11 lines, now it works on all grasycale pixels. PAL blending now can be switched on/off - see "Display settings->TV effect" (renamed from "NTSC artifacting quality", as this option is no longer NTSC-specific). 2013-04-07 Tomasz Krasuski * colours_pal.c: More accurate emulation of PAL colours based on analysis of oscillograms of PAL GTIA output. * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added support for the cartridge mapping used by "Turbo Hit"/"Atari Blizzard Hit". * memory.h: Fix gcc 4.7.2 -Wstrict-aliasing warnings. * cartridge.[ch], ui.c, android/jni/jni.c: Avoid compiler warnings by moving the table of cartridge names to jni.c. The default target doesn't need that table anyway, it only needs the names. * cartridge.c: Fix uninitialised variable which could result in unnecessary bank switching. 2013-03-21 Petr Stehlik * configure.c, ui.c, atari_rpi.c, gles/video.c: committing new support for Raspberry Pi made by Andrey Dj * DOC/README.RPI, DOC/BUILD.RPI: documentation added ** 3.0.0 released on 2013-03-03 2013-03-03 Petr Stehlik * DOC/ChangeLog, DOC/NEWS: updated for new release * README.1ST, atari800.spec, DOC/README, atari.h, atari800.man, configure.ac, util/export: version++ * emuos.c, emuos.lis: extended copyleft * debian/{chaneglog, control, rules}: updates from the official Debian package merged with updates for a new release 2013-02-09 Tomasz Krasuski * DOC/INSTALL, DOC/PORTING, DOC/README: Rename the "basic" version to "simple" in the docs, to avoid confusion with the Atari BASIC and with the "basic" target - there's no such target anymore. * debian/control, DOC/INSTALL, DOC/INSTALL.dos, DOC/INSTALL.falcon, DOC/README, DOC/readme.html.in, src/atari800.man, atari800.spec, README.1ST: Update docs to inlcude the 1200XL and the XEGS as emulated systems. * DOC/INSTALL.falcon: Update after renaming --disable-sound to --without-sound. * DOC/README, DOC/NEWS: Updated with all my contributions since 2.2.1. 2013-01-28 Tomasz Krasuski * src/autogen.sh, src/configure.ac, src/configure_dos.bat: Rename the "basic" target to "default" and make it the default - the "--target" configure option can be omitted. Renamed the "--with-gui" configure option to "--with-video". * util/benchmark.pl: Update to reflect the above changes. Allow passing --with-* options to configure. * atari800.spec: Update to reflect the above changes. Allow building multiple binaries, each with a different set of configure options. * DOC/README, DOC/INSTALL, DOC/PORTING, debian/rules: Update to reflect the above changes. 2012-10-11 Tomasz Krasuski * devices.c: Fix the H: read function to return status $03 if the next read operation would yield EOF. This complies with Atari DOS behaviour and fixes Turbo BASIC's BLOAD. * atari.c, cfg.c, memory.[ch], ui.c, atari800.man, DOC/CREDITS, DOC/README, DOC/USAGE: Patch by Jerzy Kut with additional fixes. Adds support for the MapRAM memory enhancement for XL/XE systems. * sdl/video_gl.c: Patch by Jerzy Kut . Spelling fix. 2012-09-09 Kostas Nakos * android/*: More UI fine tuning, new dialog for cartridge type selection * afile.c, cartridge.[ch], ui.c: Moved cartridge types' descriptive text to a more central (reusable) location, hooked android port when a cartridge type cannot be detected. 2012-09-08 Kostas Nakos * android/*: UI fine tuning, soft keyboard fix for jelly bean 2012-09-05 Tomasz Krasuski * android/jni/jni.c: Fix ROM selection hack to support the well-known OSB NTSC ROM bundled with XFormer. That ROM is hacked and therefore it is not recognised as SYSROM_B_NTSC, but as SYSROM_800_CUSTOM. 2012-09-04 Kostas Nakos * android/*: Natively support UI on post-Honeycomb devices 2011-08-27 James Wilkinson * config.guess: Detect Haiku as x86 BeOS. 2012-08-05 Tomasz Krasuski * sysrom.c: Fixed CRC32 of the CC01r4 OS ROM - the previous one was for a binary that I've myself incorrectly-assembled from sources. 2012-07-29 Kostas Nakos * android/*: Update project to newer android sdk (jelly bean - 4.1), Fine tuning of the B: device handling, Fix audio stuttering on jelly bean, Fix keymap preference crash on jelly bean, Fix keyboard mapping dialog on jelly bean 2012-07-21 Tomasz Krasuski * DOC/CREDITS: Fix alphabetical order. Update my own contributions. 2012-06-02 Kostas Nakos * android/*: Small tweaks to the touchscreen mode * afile.c, cartridge.c: Temporary fix for non auto-detected cartridges, until the implementation of a proper menu 2012-05-20 Kostas Nakos * android/*: Implement Planetary Defense mode, a Koala Pad click-where-I-point mode * devices.[ch], esc.h, android/*: Implement the B: device in the core and android port 2012-05-19 Tomasz Krasuski * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt, DOC/USAGE: Support for 2 KB and 4 KB ROMs used in early Atari cartridges. * configure.ac, platform.h, atari.c, ui_basic.c, ui.[ch], sdl/init.[ch], sdl/main.c, sdl/sound.c, debian/rules, util/benchmark.pl, DOC/INSTALL: Merge basic and sdl targets - GUI and sound libraries are now autodetected or explicitely selected by --with-gui and --with-sound configure options. * configure_dos.bat: Fix the dosvga and basic targets being merged. 2012-05-16 Tomasz Krasuski * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt, DOC/CREDITS, DOC/USAGE: Committing patch by Jakub Husak: Support for the SIC! cartridge mapping (without the flash programming feature). 2012-05-04 Tomasz Krasuski * configure.ac, util/benchmark.pl: Merge basic, curses, ncurses, pdcurses and dosvga targets - appropriate GUI/input library is now autodetected or selected explicitely by --with-gui configure option. * ui.c: Fix segfault in the ROM Locations menu. * atari_basic.c: Fix some GCC warnings. 2012-05-01 Tomasz Krasuski * devices.c, ide_internal.h, input.c, log.c, pbi_scsi.c, sio.c, ui.c, util.h, dos/dos_ints.h: Fix some GCC warnings. 2012-04-22 Tomasz Krasuski * colours.[ch], colours_ntsc.[ch], colours_pal.[ch], ui.c, sdl/input.c, atari800.man, DOC/USAGE: More exact emulation of PAL colors, including colour delay - based on Altirra but with different table coeffitients, derived from a real machine. Colour delay values for NTSC rescaled to simplify the code. 2012-04-21 Tomasz Krasuski * sdl/input.c: Make the display adjustment keyboard shortcuts work by pressing and holding - no more need to press the keys repeatedly. * colours_ntsc.[ch], colurs_pal.c, colours.[ch], filter_ntsc.c, ui.c, sdl/input.c, atari800.man, DOS/USAGE: Rename color control "Hue" to "Tint". Add tint control also for PAL mode, as there are PAL TVs with tint control. 2012-03-31 Tomasz Krasuski * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added support for the cartridge mapping used by "Monkey Wrench II for the Atari XL". 2012-03-29 Tomasz Krasuski * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt: Renamed MicroCalc cartridge mapping to Ultracart - that's the name printed at the cartridge's PCB. 2012-03-26 Tomasz Krasuski * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added support for the MicroCalc cartridge mapping. 2012-03-24 Tomasz Krasuski * atari.c, cfg.c, memory.[ch], ui.c: Simplify Axlon RAM code. Fix bug with Axlon and Mosaic RAM switching to home bank on state read. Add option to control Axlon RAM settings in GUI. Save Axlon RAM settings in config. 2012-03-23 Tomasz Krasuski * atari.[ch], cfg.c, ui.c: Fixed 1200XL jumper emulation - the machine has only one onboard jumper, not four. * atari.c, cfg.c, memory.[ch], ui.c: Simplify Mosaic RAM code. Add option to control Mosaic RAM settings in GUI. Save Mosaic RAM setting in config. 2012-03-18 Tomasz Krasuski * atari.c, emuos.[ch], memory.c, Makefile.in, android/jni/Amdroid.mk.in, dc/Makefile.dc, win32/msc/Makefile: Always take UI font from EMUOS - fixes missing font when running the emulator in 5200 mode without configured OS ROMs. * atari.[ch], cartridge.c, cfg.c, devices.c, esc.c, input.c, memory.c, pia.c, screen.c, sysrom.c, ui_basic.c, ui.c, sdl/input.c, android/jni/jni.c, atari800.man, DOC/USAGE: Reworked support for machine types. All XL/XE features can be enabled/ disabled independently. UI menu "Select System" renamed to "System Settings" and reworked - now it only lists systems manufactured originally, with additional options for configuration. * devices.c, esc.c, sysrom.[ch], ui.c, atari800.man, DOC/USAGE: Support OS revisions from the Arabic 65XE and prototype XL machines. 2012-03-11 Tomasz Krasuski * pia.c: Fix recently-introduced bug with MEMORY_cartA0BF_enabled being saved twice in savestates - in both memory.c and pia.c. * af80.c, cassette.c, devices.c, log.c, monitor.c, pbi_bb.c, pbi_mio.c, pbi_proto80.c, pbi_xld.c, sysrom.c, ui.c, xep80.c, wince/port/missing.c: Remove initialisation of local-static and global arrays to "", to prevent them ending up in .data segment instead of .bss on some architectures/ compilers (android-arm). The C standard requires them to be initialised with zeroes at runtime, so initialisation with "" is not needed. 2012-03-10 Kostas Nakos * android/*: Rename android port to Colleen 2012-03-08 Tomasz Krasuski * atari.[ch], cfg.c, input.c, memory.[ch], sysrom.[ch], ui.c, atari800.man, DOC/USAGE: Add emulation of the XEGS (builtin game, detachable keyboard). * atari.[ch], cfg.c, input.c, ui.c: Add emulation of 1200XL option jumpers, as described in Atari XL Addendum section 3.8. * ui.c: Emulate 32KB and 48KB memory expansions for the 600XL manufactured by RC Systems. 2012-03-05 Tomasz Krasuski * memory.c, pia.[ch], statesav.c: Fix 2 errors related to separate access of CPU and ANTIC to XE RAM: - Self-Test should be visible also in the bank seen by ANTIC. - When saving/loading a savestate in which only ANTIC has access to XE RAM, XE bank number was not saved/loaded correctly. To fix this, loading/saving of MEMORY_xe_bank had to be moved from PIA_StateRead to MEMORY_StateRead; so I also moved a few other variables in those functions to where they belong. * atari.[ch], cartridge.c, cfg.c, devices.c, esc.c, input.c, memory.c, pia.c, screen.[ch], sysrom.[ch], ui_basic.c, ui.c, atari800.man, DOC/USAGE: Add emulation of the 1200XL (no builtin BASIC, LEDs overlayed on screen, 2 new XL OS revisions). The System ROM Settings menu ceased to fit on one screen, so it is split into submenus. * sdl/input.c: When in 1200XL mode, map arrows to F1-F4 keys. * atari.[ch], cartridge.c, devices.c, esc.c, input.c, memory.c, pia.c, screen.c, ui.c, sdl/input.c, android/jni/jni.c: Replace most of the "if Atari800_machine_type ==" statements with references to Atari800_features - the code was starting to be too convoluted. 2012-02-23 Tomasz Krasuski * cfg.c, memory.[ch], ui.c: Allow choosing more RAM amounts for 400/800, based on possible combinations of CX852 and CX853 memory modules. Extending the list of available systems in "Select System" menu to include all new RAM sizes would be impractical, so a new option "RAM size" was added instead. * atari.[ch], memory.c, pia.c, statesav.c: Support for saving new RAM sizes (and the old 52kb size, too) in save states. reading/saving MEMORY_ram_size moved to memory.c, where it belongs; storing RAM size as two separate values (base RAM, XE banks) to make it more future-proof. Fixed the "feature" of saving of unused 192kb. * statesav.c: Fix old bug that allowed loading of save states with version number higher than current. 2012-02-19 Tomasz Krasuski * atari.[ch], devices.c, esc.c, sysrom.[ch]: Make OS patches work depending on OS version. Now patches work correctly also with Rev. A PAL and Rev. 1 (600XL). 2012-02-16 Tomasz Krasuski * atari.[ch], cartridge.c, cfg.c, devices.c, esc.c, memory.[ch], sysrom.[ch], ui_basic.c, ui.c, android/jni/jni.c: Merge Atari800_MACHINE_OSA and Atari800_MACHINE_OSB into Atari800_MACHINE_800 - no need for separate machine types since OS revision can now be selected. * sysrom.c, atari800.man, DOC/USAGE: Support choosing OS revision from command line. 2012-02-10 Tomasz Krasuski * atari.c, cfg.[ch], crc32.[ch], sysrom.[ch], ui.c, Makefile.in, dc/Makefile.dc, win32/msc/Makefile, android/jni/jni.c, android/jni/Android.mk.in: Two new modules (crc32, sysrom) that add a new functionality of searching for OS/BASIC ROM images based on known CRC32 hashes. Added possibility to select an OS/BASIC version when many are available ("Select System"). When switching between PAL/NTSC, NTSC or PAL version of OS Rev. A is selected accordingly. Android port updated to work correctly (OS/BASIC version selection is still missing though). 2012-01-27 Tomasz Krasuski * xep80.c: Rename SetCursor to SetCursorMode to avoid conflict with a winuser.h function under MinGW. 2012-01-19 Tomasz Krasuski * xep80_fonts.c, xep80.[ch], videomode.c: Rewtritten XEP80 emulation, based on disassembly of the XEP80 ROM. Programs such as EIGHTY.BAS from XEP80 System Diskette, or XEPLIST2.BAS from ANTIC Oct/1988, now work correctly. * videomode.c: Added authenthic aspect ratio for XEP80. Fixed issue with 1x, 2x, 3x, and "custom" stretch settings - for all videomodes except NORMAL the screen would stretch twice the amount it should. 2012-01-12 Kostas Nakos * android/*: Implement state saving, fix a keymap preference corner case 2012-01-08 Tomasz Krasuski * antic.c: Fix accuracy of ANTIC_CPU_CLOCK when NEW_CYCLE_EXACT is enabled. * monitor.c: Fix accuracy of cycle counts (when displaying the current state) when NEX_CYCLE_EXACT is enabled. * xep80.c: Fix (and simplify) the code for I/O timing - it was not resistant to random data appearing in PORTA, which resulted in XEP80 going haywire after coldstart. The change breaks binary compatibility of savestates. Standardise indentation (tabs instead of spaces). Remove the XEP80_ prefix from names of static entities. 2012-01-07 Tomasz Krasuski * sdl/input.c: No need to call SDL_GetKeyState() on each frame - moved the call to SDL_INPUT_Initialise(). * xep80.[ch]: Removed variables XEP80_first_row, XEP80_last_row - not used anywhere. * cfg.c, xep80_fonts.[ch], xep80.[ch]: Load XEP80 fonts from a ROM image instead of storing them in the source file (ROM path stored in config). Generate the XEP80 block font algorithmically instead of storing it in the source file. * ui.c, videomode.[ch], xep80.[ch], atari800.man, DOC/USAGE, sdl/video_gl.c: Support XEP80's ability to switch the TV system by software. After the changes, the maximum height of the screen is 300 lines. * sdl/video.c: Fix a glitch that appeared during XEP80 initialisation. * ui.c: Add option to enable/disable XEP80 to the Emulator Settings menu. 2012-01-07 Kostas Nakos * android/*: Optimize file selector, allow roaming outside of ext. storage dir Added an exclusion border for paddle mode 2011-12-22 Tomasz Krasuski * android/jni/Android.mk.in, dc/Makefile.dc, win32/msc/Makefile: Add missing object img_tape.o to platform-specific Makefiles to make them work again (see Makefile.in revision 1.52). 2011-11-29 Tomasz Krasuski * cassette.c: Remove excessive logging, committed by mistake yesterday. 2011-11-28 Tomasz Krasuski * cassette.c: Fix segfault when the -tape parameter points to a nonexistent file. 2011-11-16 Tomasz Krasuski * atari_falcon.c, sound_falcon.c, falcon/sound_dma.S: Fix Falcon compilation errors with MiNTLib 0.59.1 and GCC 4.6.2 (still works with GCC 2.95.3 as tested under SpareMiNT). * atari_basic.c, atari_curses.c, atari_falcon.c, atari_ps2.c, atari_x11.c, sound_falcon.c, sound_oss.c, sound.h, android/jni/sound.c, dos/atari_vga.c, dos/sound_dos.c, sdl/main.c, sdl/sound.[ch], win32/atari_win32.c, win32/sound.c, wince/port/atari_wince.c, wince/port/sound.c: Make Sound_Initialise fail gracefully instead of segfaulting when an option argument is missing. Do not initialise sound unnecessarily when the "-help" option is given. * antic.c, atari_curses.c, atari.c, platform.h, ui_basic.c, ui.c: Cleanup: gather all declarations of curses_* functions together in platform.h. * atari.c, configure.ac, devices.c, log.c, monitor.c, screen.c, sio.c, sound_oss.c, ui_basic.c, ui.c: Cleanup to make the ncurses target build with more restrictive CFLAGS (same as the sdl target). 2011-11-11 Tomasz Krasuski * af80.[ch], atari.c, cartridge.[ch], devices.[ch], ide.[ch], input.c, pbi_bb.[ch], pbi_mio.[ch], pbi_proto80.[ch], pbi_xld.[ch], pbi.[ch], sdl/video.c: Add or fix Exit functions for files/resources that were not _explicitely_ closed/freed on exit. Add call to Atari800_ErrExit also when commandline-parsing fails. Previously when starting the dosvga target with "atari800 -artif", the emulator would exit without uninitialising VGA, leaving mess on screen. * amiga/amiga.c, dc/atari_dc.c: Fix Platform_Initialise() not returning a value. 2011-11-04 Tomasz Krasuski * monitor.c: Fix a memory leak - buffer allocated by readline() should be freed by user. * configure.ac: Clean-up of SDL detection - restore the "Don't redefine main" snippet that got mistakenly deleted in revisions 1.108-1.109. * configure.ac, Makefile.in, DOC/README.android: Cleanup in detection of libreadline and OpenGL: Renamed options --enable-monitor-readline and --enable-opengl to --with-readline and --with-opengl, respectively - Autoconf manual recommends the --with prefix for options requiring external software. Since the AC_CHECK_HEADER (used in OpenGL detection) requires proper setting of CPPFLAGS, rudimentary support for this variable has been added. * sdl/video_gl.c: Fix wrong definition of "black" colour for the BGRA32 pixel format, which caused a visible blue border around the screen with bilinear filtering and stretch >= 2. 2011-10-27 Tomasz Krasuski * afile.c, cassette.[ch], img_tape.[ch], screen.c, ui.c, Makefile.in: Cassette-related code cleanup - functionality related to handling of tape image files split from afile.c and cassette.c to new module img_tape. Functional changes: During cassette insert the old tape is not unmounted until opening of the new tape ended successfully; Added error message when tape opening fails with the -tape command parameter. 2011-09-05 Tomasz Krasuski * DOC/cart.txt, DOC/USAGE, atari800.man, cartridge.[ch], ui.c: Added support for Atrax SDX 64/128K cartridge mapping and for the Turbosoft 64/128 cartridge mappings. * cartridge.c: Fixed a bug in OSS 034M/043M mappings - the area filled by $FF should be $A000-$AFF instead of $8000-$9FFF. 2011-09-04 Kostas Nakos * android/*: Added paddle emulation 2011-09-03 Tomasz Krasuski * monitor.c: Code cleanup - split MONITOR_Run() into separate functions for each monitor command. Functionality unchanged. * af80.[ch], antic.[ch], cartridge.[ch], cpu.c, gtia.[ch], ide.[ch], memory.[ch], monitor.c, pbi_bb.[ch], pbi_mio.[ch], pbi_proto80.[ch], pbi.[ch], pia.[ch], pokey.[ch]: Added option of reading hardware memory without side effects. Used this in the, monitor so now eg. the "M" option doesn't switch cartridge banks while displaying page $D5. Fixed the monitor's "disassemble" functionality - it didn't correctly disassemble code in hardware memory. 2011-09-02 Tomasz Krasuski * sdl/input.c: Swapped mapping of right and middle mouse buttons, to make it identical to the X11 and Win32 ports. 2011-08-24 Tomasz Krasuski * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added support for a 32 KB cartridge format used by Atari Super Turbo Multi-Cartridge. * cfg.c, rtime.[ch]: Support for saving the state of R-Time 8 in config file. * atari800.man: Improve formatting (bold, italic etc.), mainly according to man-pages(7). 2011-08-06 Tomasz Krasuski * afile.c: Fixed compilation errors for --target=basic introduced on 2011-06-27. 2011-08-05 Tomasz Krasuski * DOS/cart.txt, DOC/USAGE, cartridge.[ch], ui.c: Added support for the Blizzard-type 4KB cartridge (which contains a 2732 EPROM inside). 2011-07-23 Kostas Nakos * atari.c: Use FPS defines in autoframeskip * android/*: Fix a nasty bug, when orientation was changed during the preferences activity, added shadow rectangle around console keys overlay 2011-07-02 Tomasz Krasuski * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt, DOC/USAGE: Added support for the OSS 043M cartridge format. The old 034M format is marked as obsolete but still supported. Renamed the OSS cartridge formats to include information on number of ROM chips (043M/034M - two chip, M091 - one chip). 2011-06-27 Tomasz Krasuski * cassette.c: Fixed a bug with eof_of_tape not always being set to 1 when it should be, f.e. after a call to CASSETTE_Seek(). When the SIO patch was enabled and the tape was Seek'ed past the last block, this could result in a call to CASSETTE_IOLineStatus() while CASSETTE_current_block was higher than CASSETTE_max_block. This in turn would cause division by 0 (due to reading an uninitialilsed value from cassette_baudblock). Now eof_of_tape is set properly after every change of either CASSETTE_current_block or CASSETTE_max_block, so a dangerous call to CASSETTE_IOLineStatus doesn't happen anymore. * cartridge.c: Fixed a bug introduced in rev. 1.48: CARTRIDGE_StateRead would try to read the cartridge's bank state even if the cartridge was not present; thus the whole state reading would fail. * afile.c: Support selecting cartridge type when loading a cartridge by Alt+R. 2011-06-21 Tomasz Krasuski * ui.c: Fixed a segfault when opening the "Fullscreen resolution" submenu. This was caused by the change in ui.h on 06-20. (reported by Krzysztof Karkosza) 2011-06-20 Tomasz Krasuski * sdl/input.c: Fixed a bug with F10 creating interlaced screenshots instead of non-interlaced. * cartridge.[ch], ui.c, atari800.man, DOC/USAGE: Ported from Atari800WinPLus - an option for enabling/disabling automatic reboot when the cartridge is inserted or removed. (Only applies to the main cartridge. After inserting or removing a piggyback cartridge, it works as earlier - ie. the system will not reboot automatically.) * ui.h, ui_basic.c: Reworked detection of menu end (UI_MENU_END). The previous solution stopped working correctly since in the CartManagement menu there are hidden menuitems with the "item" field set to NULL which would be incorrectly detected as end of menu. 2011-06-17 Tomasz Krasuski * cartridge.c, DOC/cart.txt: Reverted the last change in the 034M mapping regarding switched banks 1 and 2 - on second thought, applying such change to a years-old specification without proper discussion is not a good idea. 2011-06-16 Tomasz Krasuski *cartridge.c, DOC/cart.txt: Fixed an ages-old bug in the OSS 034M cartridge banking scheme. Banks 1 and 2 were switched, which caused all known OSS 034M dumps to fail. (There actually are only 3 known images of 034M cartridges: Action! 3.5: http://ftp.pigwa.net/stuff/collections/atari_forever/ROM/ACTION.OSS/ACTION.OSS BASIC XL 1.02: http://ftp.pigwa.net/stuff/collections/atari_forever/ROM/BASICXL.OSS/BXL102.OSS MAC/65 1.0: http://ftp.pigwa.net/stuff/collections/atari_forever/ROM/MAC65.OSS/MAC65.OSS All failed to work before this fix.) Additionally the combinations $D5x1 and $D5x5 were incorrectly described as working - I've changed it to more closely reflect the reality (the combinations cause selection of 2 banks simultaneously - but it's still not emulated 100% exactly). * cartridge.[ch], atari.c, ui.c: Moved the logic that auto-switches machine type after insertion of a cartridge. Now it resides in cartridge.c, where it belongs. Introduced new function CARTRIDGE_SetType, that should be used to change the cartridge's type. CARTRIDGE_IsFor5200 and CARTRIDGE_Start are not used outside cartridge.c anymore, so I renamed them and made static. 2011-06-13 Tomasz Krasuski * cartridge.[ch]: Major rewrite, required to fix bugs in piggyback cartridge emulation and with writing/reading savestates with banked cartridges. 1. SDX piggyback emulation was broken and apparently written without knowing the cartridge's specs - the SDX cart only reacts to access to address $D5Ex (also $D5Fx in case of the 128K version). 2. A piggyback cartridge reacts to access to page $D5 even if it is disabled by the SDX cart. So when processing a read/write to page $D5 both mounted cartridges must be bank-switched. 3. A cartridge reacts to page $D5 even if there's an R-Time or IDE hardware installed. 3. In savestates the bankswitched cartridge's current state was not stored, and in some cases such savestates didn't work properly when loaded. 4. Overall code cleanup - introduced the CARTRIDGE_image_t structure for clarity. * gtia.[ch], statesav.c, cartridge.[ch] (CARTRIDGE_StateRead) (CARTRIDGE_StateSave): GTIA needs to store its trigger latches in the savestate in order to properly restore after loading a savestate with a banked cartridge. Banked cartridge's current state must also be stored in a savestate. Both changes require bumping up the savestate version number. * atari.c, ui.c: Apply the new API of cartridge.h. * DOC/cart.txt: Update the SpartaDOS X sections with info about piggyback cartridges. * atari.c, cartridge.[ch] (CARTRIDGE_Initialise): Move code for processing cartridge-related commandline optins to cartridge.c. * cartridge.c, atari800.man, DOC/USAGE: Add -cart-type and -cart2-type options, that allow to choose cartridge type from commandline. * cartridge.c (CARTRIDGE_ReadConfig, CARTRIDGE_WriteConfig), cfg.c: Support loading and saving of the cartridge settings in the config file. * cartridge.[ch], ui.c, atari800.man, DOC/cart.txt DOC/USAGE: Add support for the OSS The Writer's Tool cartridge mapping. 2011-06-08 Tomasz Krasuski * ui_basic.c: Allow opening up the file selector when the given PATH is invalid. When a diskette image is mounted, its path is cached in the emulator. If, in the meantime, the path to that file have become invalid (e.g. the directory in which the file resided have been deleted), then reopening the file selector for that particular diskette would have failed. * cartridge.c: Unify duplicate code in CARTRIDGE_Insert and CARTRIDGE_Insert_Second. 2011-06-05 Kostas Nakos * android/*: Implement extended key remapping, Support Xperia play keycodes, Remap dpad enter to break, New NTSC/PAL tv mode preference 2011-05-22 Tomasz Krasuski * DOC/USAGE, atari800.man, cassette.[ch], ui.c: Add an option for making the attached cassette image read-only. * cassette.[ch]: Cleanup - rearrange function order to place the functions related to the SIO patch together at the bottom of the files. * cartridge.[ch], ui.c: Merge "Insert Cartridge"/"Remove Cartridge" menu options into one, to make it consistent with other file-selectors in the menu (ie. display filename, Enter=Insert, BkSp=Remove). Ditto for the "Insert|Remove SDX Piggyback Cartridge" options. * ui.c: Don't leave the "Cartridge Management" menu after inserting/removing a cartridge. The behaviour was inconsistent with other menus. * screen.c: Minor fix - missing "else" in Screen_Initialise(). 2011-05-21 Tomasz Krasuski * sio.c: Fixed a bug with SIO sounds remaining audible after saving to tape with SIO patch (reported by Krzysztof Karkosza). * atari.c: During coldstart, don't automatically hold Option on non-XL/XE machines. This fixes unwanted keystrokes when running cartridges on 400/800 with the "Disable Basic" option. Also, don't hold Start on booting the 5200. * memory.c: Bugfix: When "Selecting System" and choosing 800/48KB RAM twice in a row, BASIC would get disabled even if the "Disable BASIC" option was set to "No". This was caused by missing initialisation of cartridge memory in MEMORY_InitialiseMachine(). 2011-05-18 Tomasz Krasuski * cassette.c: Fixed a bug with CASSETTE_description not being properly ended with '\0' when tape is inserted (reported by Achim Haertel). 2011-05-15 Tomasz Krasuski * cassette.[ch], pokey.c, sio.c: Improve cassette emulation, to allow loading some non-standard tapes (e.g. Feud/Turbo 2600, Miecze Valdgira II, Operation Blood). Emulation of SERIN was inaccurate - new byte appeared in SERIN only if the serial input IRQ was enabled, and it happened 2 scanlines after the byte's transmission has _started_. On a real machine, a byte appears in SERIN at the same time the serial input IRQ is generated, that is, when the byte's transmission _ends_; and it happens even when the IRQ is disabled. The bug caused issues with tapes of _certain_ baudrates (e.g. 577 baud). Changed the way cassette IRQ is invoked - there is no notion of "cassette IRQ delay" anymore. Instead, CASSETTE_AddScanLine returns TRUE on SERIN update. Added partial emulation of SKCTL reset bits - due to improved SERIN accuracy proper emulation of serial IO resetting is now needed to load tapes correctly. 2011-05-09 Tomasz Krasuski * pia.c: Fixed a bug with PIA's tape motor state and COMMAND line state not being restored on loading of a savestate. * screen.c: Display SIO activity for tapes only when a tape image is attached. * cassette.[ch], sio.c: Fixed a segfault when reading tape blocks longer than 4096 bytes, by dynamically allocationg memory when needed. Blocks loaded with SIO patch are now copied to Atari memory even when they are too short or the checksum is wrong - this duplicates the behaviour of the unpatched system. CASSETTE_buffer no longer used outside cassette.c, so it's made static. 2011-05-08 Tomasz Krasuski * atari.c, cassette.[ch], cfg.c, screen.c, sio.c, ui.c: Added support for switching bettween tape loading/saving without need to re-attach a tape image. Added a "Tape management" menu with new options for tape rewinding and creating a blank CAS image. Added loading/saving of the currently attached tape image in the config file. Without the SIO patch, a user now must manually switch tape recording on/off if needed. Fixed some bugs and cleaned the code a bit. * DOC/directx.txt, atari_curses.c, atari_falcon.c, atari_ps2.c, dos/atari_vga.c, javanvm/atari_javanvm.c, sdl/input.c, win32/atari_win32.c: Added the Alt+T shortcut to the new Tape Management menu. The "tilt screen" in the Win32 port has been remapped to Alt+Shift+Z to avoid conflict. * DOC/USAGE: Updated the "Cassette operation" section with the new features. * screen.c: Added displaying of current tape position when sector counter is enabled. Display a "Dn" symbol instead of "n" during disk operations. * ui.c: Renamed the "Show disk activity" and "Show sector counter" options to reflect the fact that they also affect tape operations. 2011-05-05 Petr Stehlik * atari800.spec: David Bolt has provided an update that allows building the RPM packages for Fedora, CentOS, SUSE and Mandriva distributions. 2011-04-30 Tomasz Krasuski * videomode.c: Fixed a bug with not allowing a VIDEOMODE_HOST_ASPECT_RATIO=0:0 entry in the config file. Now when this value is encountered, the emulator performs aspect ratio autodetection. * DOC/USAGE, atari800.man, atari.[ch], atari_curses.c, cfg.[ch], colours.c, input.c, ui.c, util.c, sdl/sound.c: Added support for automatic saving of configuration on emulator exit. (Had to move the System ROM Settings to a separate submenu in UI in order to make place for the new option.) Autosaving is performed only when a user closed the emulator, and not when the emulator closed itself eg. due to failure. For exiting an emulator due to error, a new function Atari800_ErrExit() is provided. This function works like Atari800_Exit but omits the autosaving. ** 2.2.1 released on 2011-04-28 2011-04-28 Petr Stehlik * configure.ac: generalization for sound configuration * ui.c, videomode.c, sdl/input.c: slight optimization for snprintf() * monitor.c, rdevice.c, screen.[ch], sio.c, ui.c, ui_basic.c, util.c, videomode.c: replace unsafe sprintf() with snprintf() * sdl/input.c: fix for over-optimized LPT TRIG, sprintf() removed * README.1ST, atari800.spec, DOC/README, DOC/NEWS, atari.h, util/export: updated for a new release 2011-04-27 Petr Stehlik * DOC/ChangeLog: blank lines added, "src/" from filenames removed * ide.c: fixes for IDE emulation from Ivo - fix for 8-bit mode with an odd number of reads and adds a command line option for enabling CF mode (slightly different from normal HD mode) * configure.ac: fixes non-SDL sound (example: X11 target) for Linux and BeOS and also adds support for SDL sound on Falcon and other platforms (like for example *BSD, which should fix the Debian Atari800 package) * debian/*: updated for a new release, dropping non-SDL binary packages. 2011-04-23 Kostas Nakos * android/*: Speed up fileselector on orientation update & bugfix mount/insert 2011-04-22 Tomasz Krasuski * sdl/input.c: Allow using SDL/LPT joysticks together with keyboard joysticks. Previously if a user had a joystick connected, keyboard joysticks were ignored. * sdl/video.c, sdl/video_gl.c: Rework the resolution of the segfault when switching between software<->OpenGL in Windows - now it always reinitialises the video subsystem. The previous solution would later cause glitches when rapidly resizing the OpenGL window. * sdl/main.c, sdl/input.c: Delay processing of repeated window resize requests on Windows to avoid a bug in SDL. 2011-04-18 Tomasz Krasuski * ui_basic.c: Fix division by 0 in the slider control. * configure.ac: Fix recently-introduced issue with building SDL/Windows - adding SDL flags to CFLAGS must be done after all AC_CHECK_FUNCS tests but before the OpenGL check. * sdl/main.c: Fix Windows/SDL crash when the console window is closed by user, by servicing console-sourced signals. The crash was due to the audio subsystem not being closed properly. * atari.c, sdl/main.c, sdl/video.[ch], sdl/video_gl.c, sdl/video_sw.[ch]: On Windows use the DirectX backend only in fullscreen (supports VSync) and Windib otherwise (DirectX backend is glitchy in windowed modes). * ui.c: Use the slider control in the "Scanlines visibility" menu option; improve several option names. * cfg.c, screen.[ch]: Store the "Show speed", "Show disk activity" and "Show sector counter" settings in config file. 2011-04-13 Tomasz Krasuski * atari.c: Fix bug introduced at 04-09 with atari.c not compiling when HAVE_SIGNAL is not defined. * DOS/INSTALL, configure.ac, aclocal.m4: Detect presence of SDL using the standard m4 script provided by SDL. New configure options are available: --disable-sdltest, --with-sdl-prefix and --with-sdl-exec-prefix. * sdl/video.c, sdl/video_gl.c: Fix misuse of SDL - setting pointers to OpenGL functions must be performed after each call to SDL_SetVideoMode. Fix a bug with screen_texture not always being freed when needed. Make OpenGL log messages slimmer and let them appear only when initialising OpenGL. 2011-04-09 Tomasz Krasuski * DOC/USAGE, atari800.man, ui.c, atari_ntsc/atari_ntsc.[ch], sdl/palette.[ch], sdl/video.[ch], sdl/video_gl.[ch], sdl/video_sw.[ch]: Add option for setting pixel (texture) format in OpenGL mode - depending on graphics hardware, different formats give the best performance. the BPP parameter is now only for software modes. Also fix a bug with bit depth autodetection not working (in Windows BPP autotetection works only before the first call to SDL_SetVideoMode), and use the SDL 8-bit palettised video mode properly. * DOC/USAGE, atari800.man, ui.c, sdl/video.[ch], sdl/video_gl.[ch], sdl/video_sw.c: Add option for enabling synchronization with vertical retrace - for SDL fullscreen non-OpenGL modes. * DOC/USAGE, atari800.man, ui.c, sdl/video_gl.[ch]: Add option for disabling OpenGL Pixel Buffer Objects - on some hardware they decrease performance. * DOC/USAGE, atari800.man, ui.c, videomode.[ch]: Add option for automatic detection of host screen aspect ratio. * DOC/USAGE, atari800.man, ui.c, videomode.[ch], sdl/video.c: Rename several options to more intuitive names - in command line and in GUI: -horiz-offset -> -horiz-shift, -vert-offset -> -vert-shift, -stretch integer -> -stretch integral, -keep-aspect 1to1 -> image-aspect square-pixels, -[no]-opengl -> -[no]-video-accel * ui.c: Reorder the Video Mode Settings menu, for better usability. Use the slider control for video area/shift options. * sdl/video_gl.c, sdl/video_sw.c: Call SDL_SetVideoMode() and display ModeInfo only when necessary. * DOC/USAGE, atari800.man, videomode.c, sdl/video.c: Other fixes in help/documentation. * sdl/main.c, sdl/video.[ch], sdl/video_gl.[ch], sdl/video_sw.c: Try to reinitialise the SDL video subsystem after an error before failing. This allows to recover from some hardware/driver-related errors. * platform.h, videomode.c, sdl/input.c, sdl.video.c, sdl/video_sw.c: Fix broken handling of SDL_VIDEORESIZE event: the call to SDL_SetVideoMode must set the same window size as returned by the event. Also when window is maximised, it is not allowed to un-maximise it by software. When these conditions are not met, glitches occur. * videomode.c: Fix broken aspect ratio correction in windowed rotated modes. Make the windowed mode the default - it's more compatible. * sdl/video_gl.c: Fix glitches when switching software<->OpenGL on Windows. Avoid unnecessary scanline-drawing when scanline-percentage is 0. * sdl/input.c: Work around unwanted keyboard events when pressing Alt+Tab on Windows. * atari.c, ui.c, sdl/input.c: Fix abuse of signals. Atari800_Exit() calls signal-unsafe functions, so it cannot be called from within a signal handler. * sdl/main.c: Close the SDL window when the monitor is used, to avoid unnecessary keyboard events. * monitor.c: Fix improper handling of the prompt when readline is used. 2011-04-04 James Wilkinson * configure.ac, Makefile.in: maintain support for older compilers (DOS, BeOS) 2011-04-03 Kostas Nakos * android/*: Implement new screen cropping preferences, some small port fixes, implement new arrow key derotation workaround for ext. keyboards ** 2.2.0 released on 2011-04-02 at Atariada in Prostejov 2011-04-02 Petr Stehlik Commiting patches submitted by Tomasz Krasuski and Achim Haertel : * many files: Tomasz Krasuski's large patch that adds a new control to the GUI, a slider which allows to adjust a numeric value using left and right arrows. The slider is used in the colour controls (brightness, contrast etc.) and in NTSC Filter settings. The colour/palette settings and NTSC Filter settings are now saved in the config file. Color handling in UI got better names: "Color preset", "Standard", "Deep" and "Vibrant". Added the option "Filter preset" to Display settings->NTSC Filter settings. This option allows to adjust several presets for the NTSC filter: Composite, S-Video, RGB and Monochrome. Previously this option was available only as a keyboard shortcut in the SDL port. Also see -ntsc-filter-preset in the command line. Added a new function PreInitialise() that is intended to contain any initialisation code that needs to be called before reading of the config file. Fixed a few compilation errors and warnings for the MSVC build, and slightly updated the build instructions. As a bonus, the colour/palette adjustments are now also available in the DirectX port. Simplified the code for processing Win32-specific hotkeys. Now there's less platfrom-specific code scattered around. Functionality remains unchanged. * monitor.c: Achim Haertel's patch adds a minor change to the monitor: BPC without argument shows now the current breakpoint location. * atari800.spec: X11 and ncurses dropped. libGL should be added as a recommended library. * README.1ST, README, ChangeLog, NEWS, util/export: updated for a new release * sdl/video_sw.c: disabled an annoying debug print 2011-04-02 Kostas Nakos * android/*: Implement a simple disk management menu * ui.c: Rearranged an #include to silence a redefinition warning 2011-03-19 Kostas Nakos * android/*: Map dpad-center and ~ to Atari's escape key, fix a couple of races when restarting, pausing/resuming the audio 2011-03-06 Kostas Nakos * atari.[ch], android/*: Implemented autoframeskip functionality * android/*: Added .com & .exe to supported extensions, bugfix crash when sound disabled, added new joystick grace area preference 2011-02-13 Kostas Nakos * log.c, atari.c, screen.c, configure.ac, Makefile.in, android/*: Imported the android port * antic.c: Fix dirty screen updates with WORDS_UNALIGNED_OK 2010-12-09 James Wilkinson * af80.c: prevent extra carriage return in config file setting. 2010-11-25 Petr Stehlik * cartridge.c, cassette.c, cfg.c, devices.c, monitor.c, pbi_scsi.c, sio.c, sound_oss.c, statesav.c, ui.c: GCC warnings about unused results fixed (mostly return values of fread() and similar libc functions). * atari.c: fixed benchmarking with SDL (DONT_DISPLAY) 2010-11-24 Petr Stehlik * many files: Tomasz Krasuski's large patch that implements major SDL video output improvements - see "Display settings" -> "Video mode settings". * util.c: fixed Util_stricmp() implementation (was broken for empty strings) 2010-11-23 Petr Stehlik * configure.ac: Matthias Reichl's patches for cross-compilation of the Windows version under Debian. Use as follows: PATH="/opt/mingw/SDL-1.2.14/bin:${PATH}" \ CPPFLAGS="-I/opt/mingw/libz-1.2.5/include" \ LDFLAGS="-L/opt/mingw/libz-1.2.5/lib" \ ./configure --target=sdl --host=i586-mingw32msvc * ui.c: Tomasz Krasuski's patch for hiding proper Display entries in PAL mode * configure.ac: Tomasz Krasuski's patch for termcap being available in other libraries (readline, ncurses) 2010-10-05 James Wilkinson * ui_basic.c: change #ifdef to DIRECTX for DoEvents() call (thanks Matthias) 2010-05-24 Petr Stehlik * atari.c, cartridge.c, configure.ac, Makefile.in: make IDE emulation optional though enabled by default (use --disable-ide configure option if it doesn't compile on your platform) * colours_ntsc.c: fixed missing default return * atari.h: version increased to 2.2.0rc1 * atari800.spec, README.1ST, DOC/NEWS: updated for upcoming release 2010-05-17 Petr Stehlik * colours.c: write file in binary mode (thanks Tomasz Krasuski for the patch) * ide.c: read file in binary mode * data folder added * icon files moved from util to data folder * atari2.svg and atari2.png added to data folder (credits to John Oyler, thanks to Brian Watson) 2010-04-30 James Wilkinson * akey.h, atari.c, colours.[ch], colours_ntsc.[ch], colours_pal.c, configure.ac, ui.[ch], ui_basic.[ch], win32/atari_win32.[ch], win32/main.cpp, win32/main.h, win32/main_menu.h, win32/render_direct3d.cpp, win32/render_direct3d.h, win32/render_gdi.c, win32/render_gdiplus.cpp, win32/screen_win32.[ch], DOC/directx.txt: Committed DirectX display enhancements by David Dahlstrom 2010-04-29 James Wilkinson * Makefile.in: switched to patsubst long form in win32 rule because compound short form did not work as expected with at least some compilers * win32/atari_win32.h: corrected prototype to remove compiler warning 2010-04-28 James Wilkinson * ide.[ch], ide_internal.h: build fixes for Windows/BeOS/DOS fseek/ftell and compiler complaints 2010-04-27 Ivo van Poorten Implementation of both 8- and 16-bit IDE. If the MSB's are ignored, the interface is compatible with MyIDE (tested mainly with MYIDE44E.ROM). Some advanced features, like SMART and DVD/CDROM support, are not there yet, but this is more than enough to write and test low level IDE Microdrive/CF code. For harddisks it might be beneficial to emulate a couple of busy cycles. 2010-04-26 James Wilkinson * ui.c: corrected H: error caused by turbo patch * atari.c, colours.c: correct blank screen on platforms that do not support palette update * atari_sdl.c, sound_oss.c: improve turbo mode for SDL build with synchronized sound and OSS sound 2010-04-20 James Wilkinson * atari.c, monitor.[ch] DOC/trainer.txt: committed trainer searcher by Achim Haertel. * atari.[ch], ui.c: committed savestate sound patch by Tomasz Krasuski. 2010-04-19 James Wilkinson * akey.h, atari.[ch], atari_sdl.c, atari_x11.c, ui.c, dos/atari_vga.c, win32/atari_win32.c: Added support for F12 turbo mode. * win32/joystick.c: do not stop joystick enumeration on dual stick settings failure * emuos.h, emuos.lis: update for 2010 * win32/atari_win32.h, win32/keyboard.c: DirectInput cleanup 2010-04-16 James Wilkinson * win32/atari_win32.c: correct keystroke auto-repeat 2010-03-23 Perry McFarlane * DOC/USAGE, atari.c, configure.ac, mzpokeysnd.c, pbi.c, pbi_xld.[ch], pokey.c, pokeysnd.c, votrax.c, new files: voicebox.[ch], votraxsnd.[ch]: emulate the Alien Group Voice Box I and II 2010-01-29 Piotr Fusik * ui.h, ui_basic.c: changed source code from CRLF to LF 2010-01-27 Perry McFarlane * af80.[ch], atari.c: fix coldstart for AF80. 2010-01-21 James Wilkinson * win32/render_direct3d.cpp: disable extended functions if supporting runtime not installed. * configure.ac: remove dependency on libd3dx9. 2010-01-19 James Wilkinson * pbi_proto80.c: prevent extra carriage return in config file setting. * win32/sound.c: don't try to reinit sound (causes crash) if -nosound was used. 2010-01-18 James Wilkinson * ui.[ch], win32/atari_win32.c, win32/render_direct3d.*, win32/render_gdi.c, win32/render_gdiplus.cpp, win32/screen_win32.[ch]: Committed updated DirectX display enhancements from David Dahlstrom. * pbi_bb.c, pbi_mio.c, pbi_xld.c: prevent extra carriage returns in config file rom settings. 2010-01-17 James Wilkinson * configure.ac: define SUPPORTS_PLATFORM_CONFIGSAVE and SUPPORTS_PLATFORM_CONFIGURE for DirectX build. 2010-01-14 Piotr Fusik * win32/msc/config.h: #define WIN32 -> HAVE_WINDOWS_H * win32/render_gdi.obj: was incidentally committed 2010-01-13 James Wilkinson * configure.ac: removed -Wredundant-decls for BeOS * configure.ac, ui.c, win32/render_*.*, win32/screen_win32.[ch], win32/main.*: Changes to support new DirectX code under gcc. * configure.ac, atari.[ch], atari_sdl.c, compfile.c, devices.c, platform.h, pokey.c, rdevice.c, rtime.c, ui.[ch], ui_basic.c, util.[ch], wince/port/missing.h: Changes from WIN32 to DIRECTX and HAVE_WINDOWS_H definitions. 2010-01-12 James Wilkinson * atari_sdl.c: Committed patch by Tomaz Krasuski to fix DirectX default for Win32 SDL driver. Also made change to correct garbage column in some scaling modes. 2010-01-10 Piotr Fusik * util/colormix.asx, util/colormix.xex: program for testing PAL delay line; use arrow keys and space 2010-01-07 Piotr Fusik * ui.c: wrapped UpdateColourControls into ifdef * colours.c, colours_ntsc.c, colours_pal.c, sio.c: killed MSVC warnings * win32/msc/config.h, win32/msc/Makefile: updated (colour_ntsc etc.) Commiting patch submitted by David Dahlstrom * platform.h, ui.c, ui.h, ui_basic.c, win32/atari_win32.[ch], win32/joystick.[ch], win32/main.[ch], win32/main.cpp, win32/render_*.*, win32/screen_win32.[ch]: display and controller enhancements 2009-12-28 Piotr Fusik * configure.ac, devices.c: MKDIR_TAKES_ONE_ARG for MinGW * colours_ntsc.h: M_PI for MinGW Commiting patch submitted by Tomasz Krasuski * DOC/USAGE, atari.c, atari800.man, atari_sdl.c, colours.[ch], colours_external.[ch], colours_ntsc.[ch], colours_pal.[ch] filter_ntsc.[ch], configure.ac, ui.c, atari_ntsc/atari_ntsc.[ch], atari_ntsc/atari_ntsc_config.h, atari_ntsc/atari_ntsc_impl.h: 1. Removed Atari800-specific code from the atari_ntsc library, and placed it in a new module, FILTER_NTSC. This new module serves as an interface between Atari800 and Blargg's library. 2. Removed the palette generation code from atari_ntsc and placed it in a new module, COLOURS_NTSC. Palette generation is from now on used both in "standard" mode and in NTSC-filtered mode. Old default palettes have been removed from the COLOURS module. 3. Introduced a new module, COLOURS_PAL, that includes improved routines for PAL palette generation. PAL Ataris produce colours in a similar way to NTSC ones; the only difference lies in phases of hues in YIQ (or YUV) colourspace. Unfortunately, while differences between hue phases are constant in NTSC, it's not the case in PAL. I have failed in trying to develop a formula that lies behind PAL hue phases, so I gave up on that; instead I measured PAL hue phases based on several screenshots, and stuffed them in the colour_angles table (see colours_pal.c->GeneratePalette()). The result looks very plausible and accurately represents colours of my 65XE, at least. 4. Controls for contrast, brightness, saturation, gamma, hue and colordelay now apply to both NTSC and PAL palettes (hue and colordelay only to NTSC), regardless of NTSC filter. Palette generation is now on by default, therefore parameters -genpaln/p are not needed anymore. 5. Support for externally-loaded palettes has moved to a new module, COLOURS_EXTERNAL. Brightness, contrast, saturation and gamma can now be applied also to external palettes (-paletten-adjust and -palettep-adjust parameters). 6. NTSC filter also supports external palettes. 7. Added new and changed a few of existing colour-related command-line parameters. 8. Keyboard shortcuts in SDL have been shuffled a bit, so that controls usable only for NTSC filter lie next to each other. 9. Display Settings menu has been expanded - now it includes controls for adjusting all colour settings (including NTSC filter settings), and also loading and unloading of external palettes. 10. A new functionality has been added - saving the current colours (with adjustments) to a palette file. See Display Settings->Save current palette. 2009-12-13 Perry McFarlane * /DOC/USAGE, atari_sdl.c, platform.h, ui.c, xep80.c: All 80 column modes work like XEP80 with alt-shift-X to switch screens. Rename PLATFORM_SwitchXep80() to PLATFORM_Switch80(), PLATFORM_xep80 to PLATFORM_show_80. 2009-12-07 Perry McFarlane * USAGE, af80.[ch], atari.c, atari_sdl.c, cartridge.c, cfg.c, configure.ac, cpu.[ch], monitor.c, pbi.c, TODO: Austin Franklin 80 Column card Execution history now stores opcode data. update TODO 2009-11-21 Perry McFarlane * sio.c: replace random with rand for portability Commiting patch submitted by Tomasz Krasuski * DOC/USAGE, Makefile.in, atari.c, atari800.man, atari_ntsc.[ch] (removed), atari_ntsc/atari_ntsc.[ch], atari_ntsc/atari_ntsc.config.h, atari_ntsc/atari_ntsc_impl.h, atari_sdl.c, configure.ac: Update to atari_ntsc based on Blargg's nes_ntsc 0.2.2, correct colour phases, other fixes. 2009-10-08 Piotr Fusik Commiting patch submitted by Tomasz Krasuski * atari_sdl.c: fixed missing leftmost column in 16bpp and 32bpp modes 2009-09-29 Piotr Fusik * ui.c: sf.net bug #2868897 "Build fails on platforms without sound" 2009-09-20 Perry McFarlane * atari_sdl.c: fix support of -nosound with SYNCHRONIZED_SOUND * Makefile.in: use more memory for javac for javanvm version * input.c: remove unused result variable from call to mouse_step() to suppress warning. * javanvm/atari800.java: fix an issue with the screen sometimes not showing. 2009-09-18 Perry McFarlane * DOC/BUGS, atari.[ch], atari_sdl.c, cfg.c, configure.ac, mzpokeysnd.[ch], pbi_xld.c, platform.h, ui.c USAGE : added synchronized sound for the SDL version. Sound can now be generated in sync with the rest of the emulation and not in a separate thread. VOL_ONLY_SOUND is no longer needed. GTIA and POKEY digisounds now work properly. The old pokeysnd.c will not work with synchronized sound, only mzpokeysnd will be supported. 16 bit sound is now the default for SDL. Use -audio8 for 8 bit SDL sound. Improved mzpokeysnd speed somewhat. 2009-08-12 Piotr Fusik Commiting a modified patch from Magnus Lind * input.c: fix for trak-ball (cx22) emulation: bits 0 and 3 keep the last direction 2009-07-18 Petr Stehlik * configure.ac: patch from Patrice Mandin for gemlib autodetection 2009-06-30 Piotr Fusik Commiting patch submitted by Tomasz Krasuski * atari_sdl.c, compfile.c: changed "#ifdef linux" to "#ifdef __linux__" 2009-04-18 Perry McFarlane * sio.c: sio fix broke BINLOAD 2009-04-17 Perry McFarlane * sio.c: fix sio for AMS music player 2009-03-30 Perry McFarlane * gtia.c: compile without NEW_CYCLE_EXACT 2009-03-30 Petr Stehlik * atari800.spec: png library added to dependencies. 2009-03-27 Piotr Fusik * win32/atari_win32.c: missing return value in PLATFORM_Initialise * win32/.cvsignore: atari.res ** 2.1.0 released on 2009-03-27 2009-03-27 Petr Stehlik * atari800.spec: added dependencies to SDL, ncurses, zlib and readline * debian/control: added dependency to libreadline5-dev * debian/changelog, debian/atari800.cfg: updated for release * emuos.{h,lis}: (c) 2005 -> 2009 * DOC/FAQ: updated for release (SDL keyboard joysticks are configurable now) * DOC/NEWS: yet another update (thanks Piotr for help with final editing) 2009-03-27 Piotr Fusik * DOC/TODO: updated 2009-03-26 Petr Stehlik * DOC/NEWS, DOC/CREDITS, atari800.man, atari.spec, README: release update * configure.ac, atari.h, util/export: version increased 2009-03-23 Petr Stehlik * DOC/NEWS, DOC/CREDITS: updated for upcoming release * configure.ac: readline support in monitor enabled by default, simple Autoconf readline check added. 2009-03-22 Perry McFarlane * atari_sdl.c: fix warning * atari.c: fix basic/curses version compile error * DOC/TODO: update 2009-03-20 Petr Stehlik Commiting patch submitted by Tomasz Krasuski * too_many_files: check for existence of required parameter of some command line options before using it. Let all *_Initialise() functions return status (FALSE in case something failed). 2009-03-17 Piotr Fusik * colours.c, win32/sound.c: killed MSVC 2008 warnings 2009-03-16 Perry McFarlane * antic.c: fix for Ilusia demo 2009-03-01 Perry McFarlane * DOC/USAGE, input.c: specify CX85 port * atari_sdl.c: minor fix for CX85 2009-02-28 Perry McFarlane * /DOC/USAGE akey.h atari_sdl.c javanvm/atari_javanvm.c input.[ch]: Emulate CX85 numeric keypad 2009-02-25 Perry McFarlane Commiting patch submitted by Tomasz with my changes * atari.c atari_sdl.c atari_ntsc.[ch] configure.ac platform.h ui.c: NTSC Filter option in the UI. 2009-02-05 Perry McFarlane Commiting patch submitted by Tomasz Krasuski * atari_sdl.c: cleaned up display modes. 2009-01-11 Petr Stehlik Commiting patch submitted by Tomasz Krasuski * atari_sdl.c: -audio16 fixed * pokeysnd.[ch]: Sound recording must stop when POKEY is reinitialised * sndsave.c: Chunks in WAV format must be word-aligned, 16-bit sound recording fixed. 2008-12-27 Petr Stehlik Commiting patch submitted by Tomasz Krasuski * atari.c: initialize color palette after loading saved state * cfg.c, mzpokeysnd.c, pokeysnd.c, ui.c: serio_sound* -> POKEYSND_serio_sound* 2008-11-03 Perry McFarlane * configure.ac: fix syntax error 2008-10-30 Perry McFarlane * memory.c: 5200 GTIA c000-cfff and POKEY e800-efff mirrors. * configure.ac: minor fix for Cygwin. 2008-10-29 Perry McFarlane * afile.[ch], atari.c, sio.c: Support .pro images * ui.c: replace ^R in source with \022 * pbi_bb.c, pbi_mio.c: correct Util_filenamenotset error. * mzpokeysnd.c, pokey.c, pokey.h: rename SKCTLS -> SKCTL * monitor.c: 5200 equates. * DOC/BUGS: add Extract demo. * Makefile.in: use NestedVM javasource and UnixRuntime by default * monitor.c: SKCTL and SKSTAT in pokey state output. 2008-10-13 Matthias Reichl * pokey.c: fixed the ALLPOT register - it didn't work and there was an access outside array bounds 2008-09-21 Petr Stehlik * ui.c: visual configuration of keyboard joysticks layout, at long last! Currently for the SDL target only. Also default joystick mapping changed to num pad 4,8,6,5 + right ctrl and A,W,D,S + left ctrl keys. Feel free to set up your own mapping and then save the configuration. * atari_sdl.c: removed keys for combined joystick directions (left+up, etc.) * util.[ch]: safe_strncpy() added 2008-09-21 B Watson * input.[ch]: "-directmouse" added (directly converting the mouse's absolute X/Y position to the POKEY pot. Used only for "-mouse pad", "-mouse koala", or "-mouse touch". The "-mousespeed" option does nothing when "-directmouse" is enabled. * atari_sdl.c: mouse support ("-mouse xxx", "-mousespeed N") added, including the direct mouse support. Also adds a new "-grabmouse" command line option and a new keystroke, alt-M, to grab/ungrab the mouse. * atari_x11.c: direct mouse support added 2008-09-17 Piotr Fusik * win32/msc/Makefile: added new source files 2008-09-17 B Watson * configure.ac, monitor.c: --enable-readline option for the configure script - the monitor supports arrow keys (including up-arrow for command history), home/end, etc. using the "readline" library 2008-08-28 Perry McFarlane * javanvm/atari800.java: gain applet focus * sio.h: remove Id tag * xep80.c: XEP80_BlitGraphChar(int x, int y), add int before x and y * pokeysnd.[ch], mzpokeysnd.c: SAMPBUF_MAX -> POKEYSND_SAMPBUF_MAX * mzpokeysnd.c, pokeymix.inc: changed NONLINEAR_MIXING to use a better method, pokeymix.inc is no longer needed. 2008-08-22 Petr Stehlik * atari_svgalib.c, configure.ac, Makefile.in, DOC/*: SVGAlib target dropped definitely. SVGAlib is long time dead and running programs setuid 'root' is so dangerous. Use/improve the SDL target instead! 2008-07-12 Perry McFarlane * most files: finished renaming globals. New files: akey.h, (AKEY_*), esc.[ch](patches), afile.[ch](file loading), cfg.[ch] (configuration), ui_basic.h 2008-07-03 Perry McFarlane * remez.[ch], mzpokeysnd.c: rename Remez_, remez -> Remez_CreateFilter. * devices.[ch], atari.c, binload.c, rdevice.c, ui.c: rename Devices_, Device_ -> Devices. * cpu.[ch], antic.c, atari.c, binload.c, cassette.c, devices.c, input.c, monitor.c, pbi.c, pbi_bb.c, pbi_mio.c, pokey.c, rdevice.c, sio.c, ui.c: rename CPU_. * sio.[ch], atari.c, atari_x11.c, binload.c, pbi_xld.c, pia.c, pokey.c, screen.c, ui.c: rename SIO_ 2008-07-02 Perry McFarlane * javanvm/atari_javanvm.c: compile without SOUND * atari_sdl.c: name changes * sndsave.[ch], atari.c, pokeysnd.c, ui.c: rename externals with SndSave_ * statesav.[ch], antic.c, atari.c, cartridge.c, cpu.c, dc/atari_dc.c, gtia.c, memory.c, pbi.c, pbi_bb.c, pbi_mio.c, pbi_xld.c, pia.c, pokey.c, sio.c, ui.c, xep80.c: rename externals with StateSav_ * log.[ch], antic.c, atari.c, atari_basic.c, atari_curses.c, atari_falcon.c, atari_ntsc.c, atari_ps2.c, atari_sdl.c, atari_svgalib.c, atari_x11.c, binload.c, cassette.c, colours.c, devices.c, dos/atari_vga.c, dos/dos_sb.c, dos/sound_dos.c, input.c, javanvm/atari_javanvm.c, memory.c, pbi_bb.c, pbi_mio.c, pbi_xld.c, rdevice.c, remez.c, rtime.c, screen.c, sio.c, sound_oss.c, statesav.c, ui_basic.c, win32/atari_win32.c, win32/joystick.c, win32/screen_win32.c, win32/sound.c, wince/port/atari_wince.c, wince/port/sound.c, xep80.c: rename externals with Log_, Aprint -> Log_print Aflushlog -> Log_flushlog. * compfile.[ch], sio.c, ui.c rename CompressedFile_ to CompFile_ so that it matches the filename. * xep80_fonts.[ch] xep80.c: rename externals with XEP80_Fonts_. * votrax.[ch], pbi_xld.c: rename externals with Votrax_, INT16 -> SWORD. * binload.[ch], atari.c, cartridge.c, devices.c, sio.c: rename externals with BINLOAD_ * colours.[ch], atari.[ch], atari_falcon.c, atari_ps2.c, atari_sdl.c, atari_svgalib.c, atari_x11.c, dc/atari_dc.c, dos/atari_vga.c, atari_javanvm.c, screen.c, win32/screen_win32.c, wince/port/screen_wince.cpp: rename externals with Colours_, Palette -> Colours_ so that it matches the filename. * screen.[ch], antic.c, atari.[ch], atari_falcon.c, atari_ps2.c, atari_sdl.c, atari_x11.c, dc/atari_dc.c, dos/atari_vga.c, input.c, ui.c, ui_basic.c, win32/atari_win32.c, wince/port/atari_wince.c, wince/port/main.c, wince/port/screen_wince.cpp: rename externals to Screen_, atari_screen -> Screen_atari, etc. move entire_screen_dirty from antic.c to screen.c, rename Screen_EntireDirty. * xep80.[ch]: rename ATARI_EOL -> XEP80_ATARI_EOL * rtime.[ch], cartridge.c, ui.c: rename rtime_enabled -> RTIME_enabled * cassette.[ch], atari.c, gtia.c, input.c, sio.c, ui.c, rename CASSETTE_, make some vars static. * rdevice.[ch], devices.c, atari.c: rename RDevice_ * monitor.[ch], atari_basic.c, atari_curses.c, atari_falcon.c, atari_ps2.c, atari_sdl.c, atari_svgalib.c, atari_x11.c, cpu.c, dos/atari_vga.c, win32/atari_win32.c: rename Monitor_ 2008-06-30 Perry McFarlane * atari.c, atari_sdl.c, configure.ac, javanvm/atari800.java, javanvm/atari_javanvm.c, pokeysnd.c, sound.h, ui.c, win32/sound.c: add support for stereo, new sound.h function Sound_Reint on some platforms, fixes to sdl sound, minor fixes. * win32/sound.c: fix STEREO_SOUND undefined 2008-06-29 Perry McFarlane * configure.ac: -source 1.4 to suppress javac warnings 2008-06-28 Perry McFarlane * memory.h: suppress PAGED_MEM warning 2008-06-27 Perry McFarlane * atari.c: add -basic_rom none * Makefile.in fix javanvm variables * util.[ch] cassette.c, configure.ac: Util_strncpy to fix javanvm bug * INSTALL, UnixRuntime.patch, atari800.java, atari_javanvm.c: Java applet 2008-06-24 Perry McFarlane * pbi.[ch], pbi_xld.[ch], pbi_bb.[ch], pbi_mio.[ch], statesav.c: state saving for MIO, Black Box, XLD. 2008-06-19 Perry McFarlane * ui.c, xep80.c: improve XEP80 state saving 2008-06-18 Perry McFarlane * DOC/CREDITS, DOC/TODO, USAGE, atari.c, atari_sdl.c, configure.ac, pia.c, platform.h, statesav.c, ui.c, xep80.[ch], xep80_fonts.[ch]: Added XEP80 emulation by Mark Grebe to the SDL version, from Atari800MacX 2008-06-18 Christian Groessler * dc/atari_dc.c (Atari_Keyboard): recognize TAB key. * atari_x11.c (Atari_DisplayScreen): add missing XSync call in not-SHM part. * ui.c, ui.h: add additional parameter to the fMessage function, indicating whether to wait for a key press. Display a "please wait" message in SaveState and LoadState. * ui_basic.c: adapt to fMessage change. Change BasicUIMessage to use the new parameter and clear status line before writing the new message. 2008-06-15 Christian Groessler * rdevice.c, dc/Makefile.dc, dc/config.h, dc/atari_dc.c: add serial R: support for Dreamcast 2008-06-14 Perry McFarlane * input.c: 5200 bit 5 toggle fix (Star Trek) * atari_sdl.c, input.c: fix shift+control keys * atari_sdl.c, dos/atari_vga.c, javanvm/atari_javanvm.c, win32/atari_win32.c: further shift+control fixes * USAGE: updated keyboard * statesav.c: fix gzFile 2008-06-13 Perry McFarlane * rdevice.c, configure.ac: fix for win32 R: device * pokey.c: IRQEN fix * pokeysnd.c: add #ifdef PBI_XLD 2008-06-12 Christian Groessler * rdevice.c, configure.ac: R: device now not longer inherently supports network (with serial as an additional option). Now serial-only, network-only, or both can be selected. 2008-05-31 Piotr Fusik * atari.c, pokey.c: made the BASIC version compilable 2008-05-29 Perry McFarlane * atari_sdl.c, cassette.c, input.c, memory.c, pbi_bb.c, pbi_proto80.c, pbi_xld.c, pokeysnd.c, sio.c, statesav.c, ui.h, util.[ch], votrax.c: made compilable with g++. Fixed some bugs, and a bugfix for pbi_xld.c, other minor fixes. 2008-05-28 Perry McFarlane * DOC/USAGE, atari_sdl.c, configure.ac, pbi.c, pbi_proto80.c, pbi_proto80.h, pbi_xld.c: added emulation of a prototype 80 column card for the Atari 1090 expansion box (SDL version). Also fixed a problem with LoadImage in pbi_xld.c * DOC/INSTALL: Improved documentation a bit, suggested use of SDL. * input.[ch], pokey.c: record random_scanline_counter for event recording. 2008-05-27 Perry McFarlane * antic.c, atari_ntsc.h, cassette.c, gtia.c, joycfg.c, monitor.c, mzpokeysnd.c, pbi.c, pokeysnd.c, screen.c, sio.c, votrax.c: Some spelling in comments corrected. * mzpokeysnd.c: fix warnings 2008-05-26 Perry McFarlane * antic.[ch], atari.[ch], atari_sdl.c, cartridge.h, cassette.c, cpu.h, gtia.[ch], javanvm/atari_javanvm.c, mzpokeysnd.c, pbi_bb.c, pbi_mio.c, pbi_scsi.c, pbi_xld.[ch], pia.h, platform.h, pokey.h, rtime.[ch], sio.h, statesav.c, ui.c, ui_basic.c, util.[ch], votrax.[ch]: I compiled with: CC = gcc -ansi -pedantic -Wall -Waggregate-return -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wstrict-prototypes -Winline and I found missing headers and lack of static in many places. Black Box and MIO will now continue with SCSI disabled if the disk image is not found. * Makefile.in, configure.ac, cpu.c, atari_vga.c, sound_dos.c, vga_gfx.c, javanvm/atari_javanvm.c, rdevice.c, win32/atari_win32.c, win32/keyboard.h, win32/main.h, win32/screen_win32.c: Made windx, sdl, and javanvm compile with -ansi -pedantic. Fixed more warnings. Made improved gcc warnings the default for windx, sdl, javanvm and dosvga. * rdevice.c: removed // comments and warnings. * cpu.c: gcc will use goto and use of __extension__ will avoid -pedantic warnings. 2008-05-25 Perry McFarlane * atari_sdl.c, cpu.c, pbi_mio.c, pbi_xld.c, win32/atari_win32.c, win32/screen_win32.c: some gcc -ansi -pedantic fixes 2008-05-25 Piotr Fusik * win32/msc/Makefile: added votrax and pbi_xld * sio.c, pbi_xld.c: made compilable with VC2005 2008-05-25 Perry McFarlane * votrax.[ch] vtxsmpls.inc pbi.[ch] pbi_xld.[ch] pbi_mio.[ch] pbi_bb.[ch] pbi_scsi.[ch] sio.[ch] atari.c configure.ac atari_sdl.c dos/atari_vga.c javanvm/atari_javanvm.c win32/atari_win32.c memory.c pokeysnd.c DOC/CREDITS DOC/README DOC/TODO DOC/USAGE: Added emulation of the 1400XL, 1450XLD, MIO and Black Box. 2008-05-24 Achim Haertel * cassette.c: implemented loading with variable baud rate 2008-05-22 Petr Stehlik * cpu_m68k.asm: made linkable (missing cim_encountered and rts_handler). Surprisingly it is working (ATARI BASIC READY) eventhough it is 5 years outdated and needs many changes to be in sync with cpu.c again. * cpu_m68k.S: made compilable and linkable. It even sort of works but fails before reaching the ATARI BASIC READY prompt :-( The conversion is still not correct but debugging it is hard... 2008-05-21 Petr Stehlik * atari_x11.c: removed "-fps" support, use "-showspeed" instead * USAGE, atari800.man: updated wrt. removed "-fps" * cpu_m68k.S: added fresh conversion of 5 years outdated cpu_m68k.asm * configure.ac: default LDFLAGS will be without the "-s" (strip binary) since package maintainers don't like autostriping of the debug symbols. 2008-05-20 Petr Stehlik * .asm->.S: Devpac syntax of asm files converted to gcc one * gst2gcc: removed, no longer needed * Makefike.in: updated for compiling/assembling the .S files * atari_falcon.c: corrected include path to "falcon.h" * atari.c: corrected C++-ism (my old gcc 2.91 didn't like it) * DOC/INSTALL.falcon updated (an optimized rebuild script added) 2008-05-15 Perry McFarlane * rdevice.[ch] atari.c configure.ac: Windows support for R: device. * USAGE: added record/playback 2008-05-14 Perry McFarlane * input.c: stdlib for exit() 2008-05-13 Perry McFarlane * configure.ac: nonlinear mixing minor fix * input.[ch], configure.ac, pokey.c, atari.c, TODO: event recording 2008-05-11 Perry McFarlane * dos/atari_vga.c, configure.ac: Atari_PaletteUpdate * win32/sound.c, pokeysnd.h SND_STEREO removed (obsolete) 2008-05-10 Perry McFarlane * mzpokeysnd.c, pokeymix.inc: use shorts for smaller file size with table 2008-05-09 Perry McFarlane * mzpokeysnd.c, pokey.c: fixed two-tone 2008-05-08 Petr Stehlik * atari.c: get rid of #ifdef USE_CLOCK and also #ifdef DONT_SYNC_WITH_HOST * configure.ac: get rid of USE_CLOCK for Falcon 2008-05-07 Petr Stehlik * screen.c: DrawAtariSpeed() now computes the real speed by itself and always shows it (if enabled) even if it is at 100% or around (previously it was hidden when in range 99% - 101%). It even shows speed < 100% (previously it didn't) - hopefully this will help profiling various ./configure options on slow Atari800 hosts. * atari.c: just some cleanup around the atari_sync(), no functional changes. 2008-05-07 Perry McFarlane * mzpokeysnd.c, configure.ac, pokey.h, pokeymix.inc: Nonlinear mixing, two-tone filter, corrected STIMER. 2008-05-05 Perry McFarlane * javanvm/atari_javanvm.c, atari_sdl.c: remove // comments * javanvm/atari800.java: fix frame.pack() * Makefile.in, DOC/INSTALL: changed to make jar file by default for Java * Makefile.in: added comments to build from NestedVM javasource compiler 2008-04-16 Piotr Fusik * antic.c, atari.c, memory.c: in C code local variable definitions should precede statements 2008-04-16 Achim Haertel * cassette.[ch], pia.c, pokey.c, screen.c, sio.[ch]: implemented raw writing (via HW registers, not SIO) to cassette files 2008-04-08 Perry McFarlane * javanvm/atari_javanvm.c, javanvm/atari800.java, configure.ac: sound support for the Java NestedVM port 2007-11-28 Marcin Zukowski * cartridge.c: fixed Atrax cartridge bank switching 2007-10-19 Perry McFarlane * javanvm/atari_javanvm.c: keypad fix 2007-10-18 Perry McFarlane * javanvm/atari_javanvm.[ch] javanvm/atari800.java added for Java NestedVM port configure.ac, Makefile.in, platform.h, INSTALL, USAGE: modified for NestedVM port * screen.c, USAGE: -showspeed command line option * win32/*: suppress gcc warnings * win32/screen_win32.c, configure.ac: support Atari_PaletteUpdate 2007-10-11 Perry McFarlane * devices.h: make h_current_dir extern * monitor.c: COLOUR -> COLOR 2007-10-04 Perry McFarlane * colours.[ch], atari.[ch], platform.h, USAGE, atari_sdl.c, atari_ntsc.c, configure.ac, TODO: added support for switching between NTSC and PAL palettes. The platform-specific function Atari_PaletteUpdate is now required in those ports which calculate their own palette from colortable. The SDL version is working but other ports will need to be updated. 2007-10-02 Perry McFarlane * antic.c: cleaner macros * cycle_map.c: minor cleanup * ui.c, README, amiga/Atari800.guide: GPL version 2 now, not 1 * most files: FSF address change in GPL notices. 2007-09-30 Perry McFarlane * antic.c: Added better support for GTIA bug mode. 2007-09-12 Perry McFarlane * memory.c: Fix PAGED_MEM error (missing break in switch) with POKEY in loading saved states. * memory.[ch], statesav.c, cpu.c Support Axlon and Mosaic state saving. SAVE_VERSION_NUMBER upgraded to from 4 to 5 2007-09-06 Perry McFarlane * memory.[ch], atari.c, TODO, USAGE: add Axlon and Mosaic RAM expansions for the 400/800. 2007-08-04 Perry McFarlane * memory.c: fix PBIM1/M2_Get/PutByte in MemStateRead * atari_ntsc.c: tweak default parameters a bit 2007-08-02 Perry McFarlane * atari_sdl.c: fix broken Caps Lock key handling * atari_sdl.c: reduce default NTSC scanlines percentage from 20 to 5 2007-07-31 Perry McFarlane * configure.ac, INSTALL: fix for windows sdl version. Don't use -mwindows or -Dmain=SDL_main and use -mno-cygwin on Cygwin. SDL_win32_main.c is now required from the sdl source. Update documentation in INSTALL. This fixes the stdout.txt problem. * atari_sdl.c: fix for windows sdl version. Make SDL_VIDEODRIVER=directx by default because it is much faster. SDL 1.2.10+ uses windib as the default. * atari_sdl.c: added interpolated scanlines, made it the default, added -scanlinesnoint option to disable it 2007-07-30 Perry McFarlane * configure.ac: fix for windows sdl version. Don't require winmm or gdi32 ** 2.0.3 released on 2007-07-11 2007-04-23 Piotr Fusik * win32/msc/Makefile: fixed a problem that appeared when I switched to another version of NMAKE ("fatal error U1100: macro '$@' is illegal in the context of batch rule '.c.obj'") 2007-04-23 Paulo Lopes * win32/atari_win32.c: new command-line option "-win32keys" for keyboard layouts different from US (the emulator relies on Win32 API to do scan code translations) 2006-12-07 Paulo Lopes * win32/main.c, win32/screen_win32.[ch]: an option to run the emulator in a window ("-windowed" on the command line) 2006-11-05 Piotr Fusik * DOC/PORTING: an introduction to writing platform-specific part of Atari800 2006-10-31 Kostas Nakos * util.c: Make sure user does not updir from the root in WinCE 2006-10-30 Kostas Nakos * wince/port/*, ui_basic.c, DOC/INSTALL.wince: added support for QVGA landscape smartphones, added the virtual keyboard (kb_ui) and updated documentation. 2006-09-04 Piotr Fusik * cartridge.[ch], ui.c, DOC/cart.txt: added 128 KB SpartaDOS X cartridge type, by the way: shortened the cartridge code and replaced letters with numbers for bank indexing in the documentation 2006-07-23 Piotr Fusik * input.[ch], atari_x11.c, win32/main.c: middle button support for ST and Amiga mice 2006-07-21 Piotr Fusik * antic.c: corrected PMG in bizarre ANTIC/GTIA modes 2006-07-01 Mark Grebe * antic.[ch], ui.c: new style of artifacting 2006-06-29 Piotr Fusik * win32/msc/Makefile, win32/msc/config.h, DOC/INSTALL: upgraded VC++ from 6.0 to 2005 2006-05-01 Piotr Fusik * util/act2html.*: replaced my old C program with a Perl script; the Perl script keeps hues from different palettes together which I think is better for palette comparisons * util/colors.asx, util/colors.xex: Atari program that displays all 256 colors * util/crlf.*, util/keyboard.txt, util/usage2html.pl: removed * util/readme.txt: updated * act/gray.act: 0x00,0x11,0x22,... instead of 0x00,0x10,0x20,... 2006-04-24 Piotr Fusik * util/sethdr.pl, util/sethdr.txt: removed; the script hasn't been updated for years (so it supported only half of current cartridge types), wasn't portable, etc. "Create Cartridge from ROM image" in the emulator basically does the job of the removed script. * util/makebb.bat: removed; anyone who is serious about making a ROM image of "Bounty Bob Strikes Back 5200" by concatenating 3 files can read DOC/cart.txt ** 2.0.2 released on 2006-04-08 2006-04-08 Petr Stehlik * atari_sdl.c: map ATARI key to SDL_BACKQUOTE key as well (similarly to DOS port) since LSUPER key (the WINDOW key) is unusable in MS Windows (it opens up the Start menu). * config.{guess,sub}: updated to version from 2006-02-23 * debian/*: update for new release. Fixes bugs in Debian BTS (#346876, #288543) * atari800.{h,man},configure.ac,README*,atari800.spec: update for 2.0.2 release 2006-04-06 Perry McFarlane * antic.c: removed IR = 0 and anticmode = 0. Added a check to ignore JVB in the jump instruction instead. 2006-03-29 Perry McFarlane * atari_sdl.c, atari_ntsc.c: added command line options, help and rearranged code a bit in the NTSC emulator. * DOC/USAGE updated for the NTSC emulator. * DOC/BUGS added Satan's Hollow and Sirius games. * TODO updated to add NTSC emulator todos and a large number of other ideas. * DOC/CREDITS added Shay Green as author the of NTSC emulator 2006-03-19 Piotr Fusik * compfile.c: fixed DCM image handling - support 0x45 "End Of Pass" code in an empty sector block starting at any sector (usually 0x0045) 2006-03-10 Perry McFarlane * atari_sdl.c, atari_ntsc.c: Blargg's NTSC composite video emulator based on NewRisingSun's algorithm. SDL port 640x480x16 only. Use -ntscemu. 2006-02-03 Piotr Fusik * antic.c: a bug in do_border_gtia10 caused a crash on machines that don't support unaligned words (problem reported by Mark Watson), on other machines sprites on the right border in GTIA 10 modes were incorrectly shifted; a pointer cast in DO_BORDER_1 replaced with IS_ZERO_ULONG, just in case 2006-01-31 Piotr Fusik * win32/screen_win32.c: made DDERR_UNSUPPORTED user-friendly ;-) * atari.h, input.c, statesav.c, ui.c, ui.h, ui_basic.c, dc/atari_dc.c, dc/atari800.cfg, dc/config.h, dc/dc_chdir.c, dc/icon.h, dc/Makefile.dc, dc/version.h, dc/vmu.c, dc/vmu.h, DOC/CHANGES.dc, DOC/README.dc: integrated Christian Groessler's SEGA Dreamcast port 2006-01-30 Perry McFarlane * antic.c: fixes for Spider City and Fast Eddie Don't display usual graphics if DMACTL width changed from 0 past a certain cycle. Also don't continue to steal cycles. Bug made Fast Eddie bounce up and down one scan line in the demo mode and caused garbage lines in Spider City. * antic.c: fix update_scanline_* to adjust for HSCROL only when IR&0x10 is true. I don't know if it caused any problems but it was wrong. * antic.c: fix for Final Orbit. Set IR = 0 after JVB instruction. Bug made the screen shake badly. 2006-01-26 Piotr Fusik * ui_basic.c: directory that has been left (via Backspace or "[..]") is highlighted in the parent directory; display an error message when cannot enter a directory 2006-01-14 Piotr Fusik * monitor.c: "D" command displayed FFFE and FFFF instruction addresses as FFFFFFFE and FFFFFFFF respectively 2006-01-11 Troy Ayers * atari_ps2.c: Added routines for sound_pauses and sound resume for the PS2 2006-01-09 Piotr Fusik * pokeysnd.c: some fixes for stereo RF pokeysnd, essential for ASAP 2006-01-07 Piotr Fusik * atari.[ch], memory.c, ui.c: 192 KB RAM 2006-01-06 Piotr Fusik * configure.ac: small fix for sound on PS2 * DOC/BUGS: 5200 Joust sets all colors to black on PAL machines (not Atari800's bug) ** 2.0.1 released on 2006-01-02 2006-01-02 Petr Stehlik * atari_sdl.c: keysym.unicode is not defined for KEYUP event (reported by Patrice Mandin, the Atari libSDL port author) * various doc files: update for 2.0.1 bugfix release 2006-01-02 Piotr Fusik * devices.c: H: device defaults to read-only * atari_sdl.c: keys used for joystick emulation shouldn't be ignored in UI (reported by Wiktor Grebla) * ui.c: fixed a bug in per-file ROM configuration in UI (reported by Piotr Skamruk) * ui.[ch]: MENU_PLACEHOLDER is no longer necessary thanks to the new FindMenuItem() ** 2.0.0 released on 2005-12-31 *** started second decade of Atari800 development! 2005-12-31 Petr Stehlik * atari_falcon.c: 'fVDI' cookie almost surely indicates that we are running on a graphics card with no bitplanes support. header file is in mint subfolder in newer mintlibs. 2005-12-30 Kostas Nakos * wince/*: code refinements * DOC/INSTALL.wince: updated 2005-12-30 Piotr Fusik * cpu.[ch], mzpokeysnd.c, pokey.h, pokeysnd.c, remez.c: added conditional code for an external project derived from Atari800, see http://asap.sf.net 2005-12-29 Petr Stehlik * atari_sdl.c: keyboard joysticks: - removed secondary trigger key - added functions that list currently assigned keyboard joystick keys (for use in the UI to show user how the joystick is mapped) - SDL_X_TRIG renamed to SDL_JOY_X_TRIGGER (old config name still supported) - SDL_JOY_X_ENABLED added to config file (so you can enable/disable the keyboard joysticks and save that for future) * ui.c: SDL keyboard joysticks: show how the joystick keys are mapped * config.{guess, sub}: updated to versions from August 2005 * atari800.man: added -Hpath * DOC/FAQ: listed my solutions for keyboard joysticks and sound problems under SDL with GNOME ESD. * atari800.spec, README.1ST, DOC/{README, NEWS}: updated for new release 2005-12-29 Piotr Fusik * ui_basic.c: help line for the directory selector 2005-12-28 Petr Stehlik * sound_oss.c: handles situations when Pokey generated channels don't match the output channels - for example when stereo Pokey is to play on mono only card, or vice-versa. Also stereo Pokey compiled in but disabled at runtime now plays from both channels (not just the left one). 2005-12-27 Piotr Fusik * DOC/INSTALL.amiga: removed (completely obsolete) * DOC/TODO: reorganized and added my ideas * pokey.c: made initialization of poly17_lookup[] about 10 times faster 2005-12-05 Piotr Fusik * atari_ps2.c: sound support for the PS2 2005-11-30 Piotr Skamruk * ui.c: options for enabling/disabling SDL keyboard joysticks 2005-11-26 Piotr Fusik * atari.c: fixed Atari_time() on the PS2 * atari.c: applied patch for *argc==0 (Chris) * ui_basic.c: minor fix in FileSelector() 2005-11-24 Petr Stehlik * atari_sdl.c: keyboard joysticks don't pause games anymore. However, a runtime switch between keyboard joysticks and normal keyboard is needed. DOS/VGA uses . Will SDL use that or something else? Also some sort of visual indication (similar to disk drives lights) is needed otherwise users will get confused when half of their keyboard doesn't respond. 2005-11-19 Piotr Fusik * configure.ac, sound_oss.c, sound_unix.c: new OSS sound handling: - renamed sound_unix.c to sound_oss.c - added "-lossaudio" (necessary on NetBSD) - removed some advanced tricks (including "-snddelay" option), now writing samples for one Atari frame at once - implemented Sound_Pause() using SNDCTL_DSP_POST * monitor.c: the output of "GTIA" command is now 7 lines instead of 5, but is much more readable (sprite registers are aligned) 2005-11-14 Piotr Fusik * configure.ac: R: device disabled by default (use "--enable-riodevice" at your own risk) * atari_ps2.c: fixed timer_interrupt_id, but the timer code probably still won't work, so I wrapped it in USE_TIMERS * ui_basic.c: added "[mc0:]" to file selector on PS2; use just one Win32 API call GetLogicalDrives() for all drive letters 2005-11-11 Piotr Fusik * configure.ac, amiga/config.h, win32/msc/config.h, wince/port/config.h, antic.c, cpu.c, memory.h, pokeysnd.c: UNALIGNED_LONG_OK -> WORDS_UNALIGNED_OK * atari.[ch], antic.c, memory.h: STAT_UNALIGNED_WORDS * binload.c, devices.c: dGetWord -> dGetWordAligned, dPutWord -> dPutWordAligned * configure.ac: WORDS_UNALIGNED_OK now bases on the built-in CPU architecture database and can be overridden with "--enable-unalignedwords" / "--disable-unalignedwords" * atari.c, atari_ps2.c: implemented Atari_time() and Atari_sleep() on PS2 2005-11-08 Piotr Fusik * atari_ps2.c, devices.c, ui_basic.c: support for directory listings on PS2 ("mc0:" only) 2005-11-04 Piotr Fusik * monitor.c: pacified warnings on 64-bit CPUs 2005-11-03 Piotr Fusik * ui.c: "Uncompress disk image": there was a random message when the user cancelled output file selection * sio.c: removed superfluous SIO_Dismount() - SIO_Mount() calls it 2005-11-02 Piotr Fusik * atari.c: RESET key in 400/800 does not reset chips, but only generates RNMI interrupt * gtia.c: pacified warnings in no-NEW_CYCLE_EXACT build * devices.c: pacified MSVCE warning in WORDS_BIGENDIAN build * ui_basic.c: file selector shows empty directories on WinCE * devices.c: H: directory listing with no matching entry now works on WinCE * devices.[ch], ui.[ch]: "Advanced H: options" * devices.c: fixed H: open mode 12 - now creates files that didn't exist; added H: open mode 13 - append and read (most Atari DOSes don't support it, but Sparta does) * devices.c: H: MyDOS Load Executable command now works on open files (this is how MyDOS menu uses it) * configure.ac, amiga/config.h, win32/msc/config.h, util.[ch], devices.c, sio.c: improved handling of temporary files: - temporary files with H: directory listing are deleted on WinCE - if available, tmpfile() is used for DCM and GZ disk images (no need to store names of temporary files) * sio.c: fixed Aprint("%SIO... inside #ifdef DEBUG * sio.c: drive status command ('S') now reports the density configured via PERCOM ('O') - MyDOS menu can reformat a disk with different sector size * compfile.[ch]: rewritten from scratch. New DCM code is partially inspired by Ernest Schreurs' DCM2ATR utility: - DCMs that aren't Single/Double/Enhanced Density are now supported (example: double-sided disks) - DCM sector coding type 0x42 is now supported - DCM code is short, fast and clear (as opposed to old DCM code and DCM2ATR) * ui.c: "Uncompress Disk Image" converts XFD.GZ to XFD, ATR.GZ to ATR, DCM to ATR * win32/main.c: replaced WinMain() with main() so that MSVC-compiled version is a console application * atari.[ch], atari_curses.c, atari_sdl.c, atari_svgalib.c, colours.c, compfile.c, devices.c, log.c, memory.c, monitor.c, mzpokeysnd.c, pia.c, platform.h, pokeysnd.c, sio.c, sound_unix.c, statesav.c, ui.c, ui_basic.c, dos/dos_ints.h, dos/dos_sb.[ch], win32/atari_win32.c, win32/joystick.c, win32/keyboard.c, win32/main.c, win32/screen_win32.c, win32/sound.c: removed CVS log from file contents 2005-10-29 Kostas Nakos * atari.c: implementation of alternate host syncing scheme With USE_CLOCK undefined, normal operation requires syncing (sleeping) for each frame, even when refresh rate is > 1. By defining the ALTERNATE_SYNC_WITH_HOST symbol results in calculating skipped and the drawn frames, then sleeping once for a longer period. This scheme seems to yield better results for slow devices. 2005-10-25 Piotr Fusik * sio.c: compressed disk images are now open read-only. Version 1.3.6 could open them in read-write mode, but the compressed images were never modified, so changes were lost. It was commented "this is a fake but some games need it", but, since read-only ATRs (e.g. on a CD-ROM) cannot be open in read-write mode, why compressed images should be? * antic.c, monitor.c: "VCOUNT" and "ypos" are now zero in the monitor invoked outside ANTIC_Frame() (previously 0x9c and 312 respectively, which doesn't make sense) * atari.[ch], devices.c, ui.c, util.h: Atari800 tries to guess ROM paths that are not configured (no configuration file or no entries for ROM paths). It checks in the current directory, "/usr/share/atari800" (only on Unix and Linux), directory with the Atari800 binary and its "rom" and "ROM" subdirectories. See source code of Atari800_FindROMImages() in atari.c for the filenames that are checked. Note that only the presence of files is checked here, not their contents. This is far from perfect, but probably better than hard-coded default filenames (in the current directory) as in Atari800 1.3.6 and earlier. 2005-10-23 Piotr Fusik * ui_basic.c: silenced a warning * devices.c, hdevtest.lst: made H: functions 0x2f and 0x30 SpartaDOS-compatible * devices.c, ui_basic.c: Win32 implementation of directory listing no longer fails when no file matches the mask * devices.c: Win32 implementation of long directory listing reports local file times rather than UTC 2005-10-22 Piotr Fusik * monitor.c: #include "pokeysnd.h" for stereo_sound (previously in rt-config.h) * dos/atari_vga.c: didn't compile after removing Atari_DisplayScreen's argument * atari_x11.c: XVIEW didn't compile after introducing atari_files_dir * atari.[ch], ui.c: I forgot about configuration of tv_mode, now it's in "Select System" * util.[ch], devices.c, ui_basic.c: Util_chrieq() * ui.[ch], ui_basic.c, wince/port/ui_wince.c, wince/port/main.c: - display error message when SIO_Mount() fails - introduced MENU_* macros to hide tMenuItem structure layout in menu definitions - removed tMenuItem.sig (used by wince_ui_driver only) - simplified tMenuItem.flags values - replaced tUIDriver.fAboutBox with more general tUIDriver.fInfoScreen - added "tooltips" in Disk Management - combined "H: device" with "Use H: devices in Read Only mode" - added "Configure Directories" for configuration of atari_files_dir[] and saved_files_dir[] (thanks Petr for idea) - tUIDriver.fSelect now supports "dragging" (for reordering atari_files_dir[] and saved_files_dir[]) - FileSelector's scrolling is less tricky and more reliable, as a side effect Left and Right arrows can be used to jump to first and last menu item respectively - you can quickly move in menus and file selector by pressing first letter of an item - fixed some problems with Alt+letter shortcuts - Alt+O no longer displays a blue line at bottom of the screen - moved WinCE-specific UI menu items to ui.c; only AboutPocketAtari() left in ui_wince.c; wince_ui_driver is history, which is good, because UI Driver is meant for View/Controller, not Model of User Interface; Kostas should review my changes, naturally - some naming changes to follow Atari800 convention * atari_svgalib.c, ui_basic.c: improved SVGA_SPEEDUP: - now draws 1/refresh_rate part of screen every frame instead of every refresh_rate frames; - protected against problems when changing refresh_rate from UI - should work correctly with refresh_rate not being a divisor of 240 - removed special handling from ui_basic.c * atari.h, configure.ac: version 1.4.0 2005-10-19 Piotr Fusik * amiga/amiga.c: Atari_LoadAnyFile() additionally supports DCM, BAS, LST, CART, ROM, CAS, BOOT_TAPE * ui.c: disks mounted as read-only now marked with '*' in Disk Management * sio.c: initialize sio_filename[] with "Off" to match drive_status[] initialized with Off; simplified code by removing istmpfile[] * amiga/amiga.c, atari_curses.c, atari_falcon.c, atari_ps2.c, atari_sdl.c, atari_svgalib.c, atari_vga.c, win32/atari_win32.c, wince/port/atari_wince.c, atari_x11.c, win32/main.c, platform.h, ui_basic.c: removed Atari_DisplayScreen's argument: use atari_screen directly * util.c: Util_splitpath() and Util_catpath() recognize slash in addition to backslash * rt-config.[ch], ui.c, ui_basic.c, atari_x11.c: DISK_DIR, ROM_DIR, EXE_DIR and STATE_DIR configuration options replaced with ATARI_FILES_DIR and SAVED_FILES_DIR. See discussion on the mailing list (9-11 Sep 2005). * ui.[ch], ui_basic.c, wince/port/ui_wince.c: improved file selection: - file selector's title is the path of the listed directory - sort directories that start with a dot - file selector starts on the previously selected file - Backspace in the file selector goes to the parent directory - filenames of saved files are no longer limited to 32 characters - directory of a saved file appears in the edit box - Tab in the edit box invokes directory browser - added directory selection * ui.[ch], ui_basic.c, wince/port/ui_wince.c: - removed box around screen title; screen title now always takes one line and is shortened if necessary - improved refresh_rate selection - added "Controller Configuration" - restored "Save Interlaced Screenshot" in the main menu - "Atari Settings" -> "Emulator Configuration": added H: paths and read-only, print command and ROM settings; the easiest way to configure ROMs is "Find ROM images in a directory" which looks for common names of ROM images (e.g. atarixl.rom) - improved disabling of function keys and Alt+letter in User Interface on WinCE (now using MENU_ACCEL() macro); applied to PlayStation 2, too - changed items[] indexing to pointer access in BasicUISelect(); this is not a matter of optimization, since a smart compiler should generate same code for both - I'm 99% sure there's a bug in MSVC 6 that caused the disabled R: menu item to appear on screen - some code simplifications * devices.[ch], rt-config.[ch]: RtIsPrintCommandSafe() -> Device_SetPrintCommand() * atari.c, prompts.[ch], rt-config.[ch], Makefile.in, amiga/Makefile, win32/msc/Makefile: removed "-configure" command-line option and the questions that appeared in the console window when no configuration file was found; now a default configuration is written and you can modify it using User Interface; removed prompts.[ch] * atari.[ch], rt-config.[ch], Makefile.in, amiga/Makefile, win32/msc/Makefile: variables configured by the configuration file moved to the modules they actually belong to; config read/write moved to atari.[ch]; removed rt-config.[ch] 2005-10-12 Troy Ayers * configure.ac: For PS2 port removed check for libgcc, added check for libz. * atari_ps2.c: Changed keyboard input to "raw" mode, as "normal" mode will not read directional keys. Changed PS2 button assignments. 2005-10-09 Piotr Fusik * atari_x11.c: removed "Help" menu item disabling, because "Help" was removed recently * rdevice.c: improved Device_GetInetAddress: - all non-control ASCII characters except space allowed (dunno if correct) - memory wraps at 64K - prevented buffer overflow * binload.c, devices.c: use fgetc() instead of fread() for single bytes; start_binloading is a boolean, and should be set to TRUE or FALSE * devices.c, rt-config.[ch]: atari_h[1-4]_dir -> atari_h_dir[0..3]; hd_read_only -> h_read_only * devices.[ch]: numerous improvements in H: device emulation: - slash, backslash, colon and greater-than are allowed H: directory separators on all platforms - parent directory on H: is "<" or ".." - access via H: outside the specified directories is not possible (I hope so!) - HPath -> h_exe_path, and is not modified in-place - fixed match(): "F?" matched "F", "FOO?BAR" matched "FOO.BAR" - apostrophe is valid in filenames - MyDOS compatible H: commands: 0x22 = mkdir, 0x29 = cd - H: rename command no longer allows moving files to a different directory - command 0x30 is "ToAbsolutePath" rather than "CurrentDirectory" - mkdir and rmdir no longer work in H: read-only mode - mkdir no longer calls umask(), and now creates directory with default permissions - H5: is no longer valid (but H6:-H9: default to the current directory) - apply fseek(fp, 0, SEEK_CUR) between reads and writes of a file open in "rb+" mode (e.g. DJGPP needs that) - H: directories prefixed with ':' in directory listing on MyDOS - base names longer than 8 characters and extensions longer than 3 characters are truncated and terminated with '+' in directory listings - file size in long directory listing limited to 999999 - long directory listing uses (SpartaDOS-compatible) 12-hour format * ui_basic.c: silenced a warning * win32/atari_win32.c: implemented Atari 5200 keys; F11 and Scroll Lock no longer press L on Atari keyboard; Ctrl+arrows emulate Atari arrows without Control; adapted to Atari800 coding style * util/benchmark.pl: fixed program name in error messages * util/hdevtest.lst: automatic test of H: device. Usage instructions inside. 2005-09-27 Piotr Fusik * atari_curses.c, ui_basic.c: screencode -> curses char code conversion is now done in curses_display_line rather than Atari_DisplayScreen: avoided conversion from ASCII to screencode and back in UI (it was wrong for some characters), this fixes Alt+O menu in Self Test * memory.c, ui_basic.c: UI's charset is now in ATASCII order, so ascii_to_screen is not necessary * monitor.c: silenced MSVC warnings * util.h: fixed a warning about implicit declaration of unlink() in sio.c * atari_x11.c: fixed keyboard on Motif and XView * configure.ac: PlayStation 2 fixes; lots of small improvements 2005-09-24 Piotr Fusik * atari_ps2.c, configure.ac: added development version of the PlayStation 2 port I'm working on together with Troy Ayers; it is limited at the moment: no real speed synchronization, no sound, no file selector, no monitor 2005-09-18 Piotr Fusik * cpu.c, monitor.[ch]: major improvement of monitor: - new command "B" manages user-defined breakpoints (based on Atari800Win PLus 4.0 by Marcin Lewandowski) - monitor now displays registers and current instruction when invoked - "SHOW" additionally displays current instruction - disassembler displays bytes before the instruction, to avoid misalignment where long labels are present - disassembler no longer displays cycles (it was misleading, because the number of cycles is variable for some instructions) - removed memory contents display in single step mode (not useful) - "ESCAPE" and "ESCRTS" disassembled with their argument - "TRON", "TROFF" -> "TRACE" (output to file, not stdout; includes ypos, xpos and registers) - "BRKHERE" -> "BBRK" - "BREAK" -> "BPC" - "YBREAK" -> "BLINE" - "H" is an alias to "HISTORY" - "ROM", "RAM" work in PAGED_ATTRIB build - "DLIST" groups identical instructions and prints them in one line - assembler supports labels - assembler handles "JSR 0", "LDA 0,Y" etc. - improved branch range checking in assembler - error messages for invalid "SETx" arguments - unofficial "NOP" and "SBC #" are marked with "!" in disassembly - assembler generates the official "NOP" opcode * configure.ac: MONITOR_BREAKPOINTS ("B" command), MONITOR_PROFILE ("PROFILE" command), MONITOR_TRACE ("TRACE" command) * atari.c: size of auto-started XFD images must be multiple of 128 bytes. Corrupted images won't work, but we gain a better detection of Atari files. * atari.c, cpu.[ch], monitor.[ch]: break_cim -> cim_encountered (monitor displays "CIM encountered" not only in MONITOR_BREAK build) * antic.[ch], cpu.c, monitor.[ch]: ypos_break_addr -> break_ypos * cpu.c: support for Atari800Win PLus * rt-config.[ch], ui.c: don't exit emulator if "Update configuration file" failed * ui_basic.c: fixed file selector: last directory entry wasn't sorted * ui_basic.c: right arrow in last column of file selector jumps to the last entry * ui.c: improved "Extract ROM image from Cartridge": - allocates only as much memory as necessary rather than 1 MB - displays error message on write error * ui.h, ui_basic.c, wince/port/ui_wince.c: saved a few bytes per tMenuItem * wince/port/config.h: #undef HAVE_NANOSLEEP, #undef HAVE_STRDUP, #define SIZEOF_LONG 4 (this is for use with the preprocessor, so sizeof(long) was wrong), #define STDC_HEADERS (this means there are stdlib.h, stdarg.h and string.h) 2005-09-14 Piotr Fusik * atari.c, configure.ac: prefer nanosleep() (POSIX.1) to usleep() and select(); prefer Sleep() on WIN32 * atari_x11.c: handle Motif/XView events in Atari_Keyboard() rather than Atari_DisplayScreen() - F1 User Interface now works in these versions; TODO: key repeat does not work on Motif and is too fast on XView * pokey.c: can use Win32 API instead of time() * rtime.c: can use Win32 API; fixed Y2K bug * compfile.c, devices.c, sio.c, util.[ch]: Util_unlink(); use unlink() and not remove(), because remove() calls unlink() for files and we never remove() directories * util.c: fixed Util_splitpath on root directory path * ui_basic.c: ".." in Win32 API based file selector on WINCE * ui_basic.c: include B: in DOS_DRIVES; detect floppies on WIN32 2005-09-11 Piotr Fusik * ui_basic.c: fixed file selector which I broke yesterday * atari.c: fixed parse error in zlib-less compilation * atari.c, devices.c: removed unnecessary "Fatal Error" messages * memory.c, remez.c, screen.c: use Util_malloc() instead of malloc() * rdevice.c: avoid malloc() * ui_basic.c: use Util_realloc() instead of realloc() * ui.h, ui_basic.c: fixed warnings * rtime.c: replaced "-rtime " with "-rtime" / "-nortime" documented in "-help" * devices.c: replaced "-hdreadonly " with "-hreadonly" / "-hreadwrite" * devices.c, monitor.c, util.[ch]: Util_strupper() and Util_strlower() * pokey_resample.[ch]: removed dead code * act/fox.act: removed, use jakub.act instead (it is built-in) * monitor.c: extended labels (MONITOR_HINTS): - can be disabled with "LABELS OFF" - can be loaded with "LABELS LOAD" / "LABELS ADD" (supported are label tables generated by xasm, Mad-Assembler and HardCore Assembler) - can be defined with "LABELS SET" - you can use a label where a hex value is expected - binary search replaced with linear, for simplicity * devices.c, win32/msc/config.h: H: lock/unlock work on MSVC, using Win32 API directly; rename, mkdir, rmdir can be implemented using Win32 API; Win32 API implementation of directory listing is now the default and does not use stat(); fixed Y2100 bug :-) * ui_basic.c, util.[ch]: implemented file selector on MSVC * ui_basic.c: try to handle directories with ']' in their names * ui.c: removed an opendir() call (unnecessary, I think!) * compfile.[ch], sio.c: removed the unused diskno parameter from opendcm() and openzlib() * remez.[ch]: fprintf(stderr, ...) -> Aprint(); adapted to Atari800 coding style; added "static" to functions; added "const" to pointers * atari.h, devices.c: "defined(WIN32) || defined(__PLUS)" -> "defined(WIN32)" (Atari800Win PLus should define WIN32) * dos/dos_sb.c: fixed some of gcc -pedantic warnings; adapted to Atari800 coding style * win32/atari_win32.c: F6 = Help, F7 = Break; TODO: 5200 keys 2005-09-10 Piotr Fusik * configure.ac: #define our symbols to 1 (just like autoconf's own symbols); described basic and *curses targets * win32/screen_win32.c: improved error handling: - DirectX docs suggest using FAILED() instead of !=DD_OK - display the name of the failed function and the return code (unfortunately DXTrace() is available only in DirectX 8.0 and higher) - display a hint if SetDisplayMode fails with DDERR_INVALIDMODE (the default 320x240 doesn't work on my Win98SE / Radeon 9000, although it works on XP on the same machine) * ui.h, ui_basic.c: char * -> const char * * rt-config.c, ui_basic.c, util.[ch]: simplified code by introducing Util_splitpath() and Util_catpath() 2005-09-09 Piotr Fusik * DOC/HOWTO-DIRTYSPAN: an alternative to DIRTYRECT (just an idea) 2005-09-07 Piotr Fusik * sound_unix.c: set speed after stereo, because the allowed speed may be different for stereo * antic.c, atari.[ch], atari_falcon.c, atari_sdl.c, atari_x11.c, cartridge.c, cassette.c, colours.c, compfile.c, devices.c, input.c, monitor.c, rt-config.c, rtime.c, screen.c, sound_falcon.c, sound_unix.c, ui.c, ui_basic.c, util.[ch], dos/sound_dos.c, Makefile.in, amiga/makefile: "util" is a new useful module not related directly to the emulation * configure.ac, list.[ch], ui_basic.c, amiga/makefile: improved file selector: - sorts filenames case-insensitively - displays "Please wait..." while the directory is read - uses less memory (dynamic array instead of linked list, bye-bye list.[ch]) - faster (quicksort instead of bubblesort) * compfile.c: fixed 32 KB memory leak per open zlib-compressed disk image * sio.c: optimized SIO_ChkSum() * ui.c: improved "Create Cartridge from ROM image": - don't exit the emulator without any cleanup if the input file cannot be read, display an error message instead - display a message for files of non-standard sizes (including files that are already CARTs) - allocate only as much memory as necessary rather than 1 MB * ui.c: improved "Save Disk Set" and "Make blank ATR disk": - can be cancelled by pressing Esc while editing the filename - display a message on success - display an error message on failure - don't operate on NULL if fopen() fails * ui_basic.c: shorten the messages (especially the ones with long filenames) to fit on screen * antic.c, atari.c, colours.h, cpu.c, mzpokeysnd.c, pia.c, pokey.c, pokeysnd.c, win32/atari_win32.c, win32/joystick.c, win32/keyboard.c, win32/sound.c: silenced MSVC 6 /W3 warnings * win32/main.c, win32/screen_win32.c, win32/msc/config.h, win32/msc/Makefile, DOC/INSTALL: DirectX version can be compiled with Microsoft 32-bit C/C++ Compiler 6.0. Currently missing features: - file selector in ui_basic (one has to type the filename) - lock/unlock operations on H: devices - stereo (just haven't tested it yet) 2005-09-06 Perry McFarlane * antic.c: a fix for DMACTL written twice in the same scanline 2005-09-05 Kostas Nakos * wince/* : Updated the wince port to work with Smartphones. Several other improvements to the port. 2005-09-04 Piotr Fusik * monitor.c: initialize break_addr with 0xd000. Previously, Atari800 compiled with MONITOR_BREAK (the default) entered the monitor rather than executing the instruction at address 0x0000 (perfectly legal for 6502 code). * ui_basic.c: don't hide ATR/XFD file extensions in the file selector * atari_svgalib.c: Atari 5200 keys * sound_unix.c: fixed sound on Linux. This is black magic to me. I hope there will be some feedback from users. 2005-09-03 Piotr Fusik * atari.c, gtia.c: I broke the BASIC version recently, fixed * cpu.c: cycle-exact Read-Modify-Write instructions for NEW_CYCLE_EXACT * antic.c, configure.ac, gtia.c, util/benchmark.pl: removed CYCLE_EXACT (superseded by NEW_CYCLE_EXACT) * devices.c: improved "K:" input in BASIC version: use just the first character from the entered line and ignore the remaining characters (including EOL). This is because the input from the terminal is line-buffered, so we have to press Enter for the Atari emulation to continue - but we don't want this Enter to be delivered to the emulated Atari. * devices.c: BASIC version: Atari Clear Screen, Backspace, Tab and Bell converted to the corresponding ASCII codes * atari_x11.c, configure.ac: (x11-)xview(-shm) now compiles and works * atari_x11.c: fixed Shift+F5; F8 and (Shift+)F10 are now "Enter monitor" and "Save (interlaced) screenshot", respectively (just like in other versions of Atari800); don't clear key_shift when another key is pressed TODO: Alt+letter shortcuts * atari_svgalib.c: implemented F6 (Help) and F7 (Break) * amiga/config.h: updated for clib2-1.194 2005-08-31 Piotr Fusik * atari.[ch], ui.c: auto-starting any file supported by the emulator via the command line, User Interface or Alt+R * binload.c: a fix for BASIC loader that didn't work if drive 1 was enabled but contained no disk * cpu.c: CYCLES_PER_OPCODE, NO_V_FLAG_VARIABLE, PC_PTR, PREFETCH_CODE for better (?) performance (not enabled by default); WRAP_64K and WRAP_ZPAGE for very precise emulation; optimized CPU_GetStatus(), CPU_PutStatus(), BRANCH() * devices.c: created Device_OpenDir() and Device_ReadDir() that simplify searching directories. On Windows, if opendir() is not available, these functions are implemented using Win32 API. Changed behaviour: - directory listing and wildcard functions Rename, Delete, Lock, Unlock should now correctly handle the current directory, root directories and files with uppercase letters on case-sensitive filesystems - filenames in directory listing are no longer converted to uppercase - filename extension in the directory listing is now the filename part after the last dot and not the first one * devices.c: improved H5:-H9: - reading supports CR/LF and CR files in addition to LF - writing uses native EOLs rather than LFs * devices.c: Device_HHSPEC_Disk_Info(), Device_HHSPEC_Current_Dir() no longer use dPutByte(), so the result is wrapped at 64K, doesn't get written to ROM and may be written to hardware registers * gtia.c: optimized GTIA_GetByte() * log.c: fixed Aflushlog's bad behaviour when the log contained percents * memory.[ch]: added two extra bytes to memory[], because the CPU emulation can access them * cartridge.h, memory.[ch]: state files should now work with PAGED_ATTRIB * boot.h, ui.c: MakeBlankDisk() now writes a blank Single Density disk rather than a 3-sector disk with useless executable loader - removed boot.h * atari.[ch], colours.c, gtia.[ch], input.c, log.[ch], mzpokeysnd.[ch], pokey.[ch], pokeysnd.[ch], rt-config.[ch]: support for Atari800Win PLus * util/benchmark.pl: dropped "-run" so any Atari program may be used 2005-08-27 Piotr Fusik * atari_sdl.c, atari_x11.c: now compile with --disable-sound * cartridge.c, memory.c: cast the result of malloc() * cassette.h: declared CASSETTE_CreateFile() * compfile.[ch], sio.c: created compfile.h * cpu.c: restored that "continue" at the end of the main loop * devices.[ch]: DEFAULT_H_PATH moved to devices.h (for Atari800Win PLus) * input.c: corrected file description * memory.h: wrap macro arguments in parentheses, just in case * remez.c: fixed a memory leak (found by Marcin Lewandowski) * configure.ac, sound.c, sound_unix.c: renamed sound.c to sound_unix.c to avoid confusion * statesav.c, ui_basic.c: MSVC declares getcwd() in * atari.c, util/benchmark.pl: performance tests (some results posted to the mailing list) 2005-08-24 Piotr Fusik * atari.c: load state files from the command line using "-state" * sio.c: recognize disk image format by the header rather than filename extension (*.DC3 now work as DCM) * screen.h, ui.c: show_atari_speed, show_disk_led, show_sector_counter available in "Display Settings" * devices.c: H: and R: work with PAGED_ATTRIB * screen.c: fixed Screen_DrawAtariSpeed() not updating with refresh_rate > 1 * ui_basic.c: use stricmp() if there's no strcasecmp() * monitor.c: people may mean accumulator mode when they write "ASL A" in the assembler * atari_curses.c: keypad works on PDCurses * cpu.[ch]: changed remember_PC_curpos and remember_jmp_curpos to unsigned, because "x % POWER_OF_TWO" is much faster for unsigned x (1 instruction vs 6 on x86) * antic.c, monitor.[ch]: changed ypos_break_addr from UWORD to int (faster) * cpu.c, monitor.[ch]: PROFILE -> MONITOR_PROFILE, TRACE -> MONITOR_TRACE * monitor.c: combined consecutive printfs 2005-08-22 Piotr Fusik * cartridge.c: Atarimax cartridges can be bank-switched by reading $D5xx * atari.c, emuos.h: stripped 2k more from emuos (it has no Floating Point, obviously!) * atari.c, memory.c: don't try to load BASIC ROM in 400/800 emuos mode * devices.c, mkimg.c, monitor.c, prompts.c, rdevice.c, sio.c: avoid the potentially signed-char-unsafe functions (macros?) * configure.ac: good advice for those poor souls who run "configure" with just "--enable-veryslow" and expect a miracle ;-) * atari.h, ui.c: new "Display Settings" menu allows for changing the framerate and toggling sprite_collisions_in_skipped_frames 2005-08-21 Piotr Fusik * cartridge.[ch], ui.c: Atarimax cartridges * atari.c, statesav.c: fixed loading of non-verbose state files * atari.c: "--usage" and "--help" now work * memory.[ch], sio.c: CopyFromMem and CopyToMem (both used by SIO) now work with hardware registers * monitor.c: use fflush(stdout) where necessary; normalized all hex output to uppercase; improved "JUMPS": now displays the instructions; improved "PROFILE": now displays the instructions; accept "ASL @" in assembler * rt-config.c: default filename for the 5200 ROM; moved Atari_ConfigInit() to the end of RtPresetDefaults(), so the Smartphone port can override enable_new_pokey * screen.c: improved Screen_DrawAtariSpeed: updated every 0.5 sec or so * sio.c: removed unportable DEBUG code * configure.ac, statesav.c: use #ifdef HAVE_STRERROR * configure.ac, compfile.c, devices.c: use #ifdef HAVE_REWIND * ui.c: error messages for state load/save * atari.[ch], compfile.c, configure.ac, devices.c: use ANSI/POSIX tmpnam() for creating filenames of temporary files, rather than unportable mktemp/mkstemp. tmpnam() generates filenames in system's temporary directory. * antic.c, atari.c, atari_curses.c, gtia.c: Self Test menu highlighting on Curses * atari_curses.c: fixed display of '\x7f'; use KEY_HELP, KEY_SHELP, KEY_LHELP, KEY_BREAK, KEY_HOME, KEY_CLEAR, KEY_IC, KEY_IL, KEY_DC, KEY_DL, KEY_STAB, KEY_CTAB if available * atari_sdl.c: "-rotate90" now works correctly on little-endian machines; don't initialize sound with "-help"; 5200 keys; F6=Help, F7=Break; Shift/Control for Atari, Help, Space, Return, Tab, arrows; Alt+B isn't repeated at a crazy speed * atari_x11.c: MUCH faster screen display; 5200 keys; Caps can be released; Shift/Control for Help, Escape, Space, Return, Tab * configure.ac: fixed x11-motif * antic.[ch], compfile.c, input.c, screen.h, dos/atari_vga.c, ui.c: minor clean up 2005-08-19 Piotr Fusik * atari.c, screen.[ch]: Screen_Initialise(); support "-screenshots " on the command line: it defines a pattern for quick screenshots (i.e. the ones made with (Shift+)F10). For example "-screenshots /home/fred/foo##.pcx" means that /home/fred/foo00.pcx, /home/fred/foo01.pcx, ... should be used. Existing files are overwritten only if all the files defined by the pattern exist. Submitted as a feature request on sf.net. * atari_curses.c: Alt+letter work on PDCurses; Ctrl+letter should be Control+letter, not Shift+Control+letter; Always treat 0x08 and KEY_BACKSPACE as Backspace; F10 = Screenshot (must run configure with --disable-cursesbasic to make this one work) * atari.c, emuos.h: stripped 6k of zeros from emuos * ui.[ch], ui_basic.c: shortcut keys (Alt+letter, F9, ...) didn't work in UI (reported as a bug on sf.net) * monitor.c: addr defaults to regPC (handy for "D" and "LOOP"); new command "LOOP": disassemble from the beginning of a loop that contains the instruction at the specified address. The loop is detected by looking for a branch instruction after the specified address whose target is below (or equal to) the specified address. Unconditional (JMP) loops are not detected. 2005-08-17 Piotr Fusik * configure.ac, *.c: autoconf improvements for Playstation 2; include config.h before system headers as autoconf's manual suggests * configure.ac: don't use AC_FUNC_MALLOC because we never do malloc(0) * rt-config.c: check if print_command is safe for sprintf format * atari_x11.c, memory.[ch], ui.c: removed PILL (use cartridge images instead) 2005-08-15 Piotr Fusik * atari.c: corrected VOL_ONLY_SOUND in BASIC and CURSES_BASIC * binload.[ch], sio.c: BIN_loade_start -> BIN_loader_start * cpu.c: corrected cycles for unofficial opcodes 0xB3, 0xBB, 0xBF * cpu.c: auto-define NO_GOTO for non-gccs * cpu.[ch], monitor.c: HISTORY displays ypos xpos also with NEW_CYCLE_EXACT disabled * cpu.c, memory.h: changed some | to +: this gives better code on x86 due to the LEA instruction * monitor.c: "C", "M" and "S" support hardware registers * monitor.c: display correct value for ZP,Y instruction * monitor.c: PENL -> PENV * cartridge.c, memory.[ch]: code simplified by defining SetROM and SetRAM for PAGED_ATTRIB * devices.c: '!', '#', '$', '&', '(', ')', '-' and '@' are now valid in H: filenames * atari.c, binload.[ch], cartridge.c, cpu.[ch], devices.c, ui.c: direct loading of Atari Basic programs. Supported are: - SAVEd (*.BAS) programs - LISTed (*.LST) programs with auto-detected Atari, LF, CR/LF or CR line terminators From the user's point of view, loading of Atari Basic programs works exactly like loading binary executables: use "-run" from command line or "Run Atari program directly" from the User Interface. The inner workings are much more interesting: 0a. BIN_loader() detects file type: *.BAS programs start with two 0x00 bytes, *.LST programs must start with a digit. 0b. During coldstart Atari Basic is enabled, even if disable_basic is set. 0c. Device_PatchOS() installs a patch for E: write. 1. The "READY" prompt is expected on E:. This is not necessarily the first thing printed on E: - a DOS may print its messages before running Atari Basic. 2. RUN "E:" (for *.BAS) or ENTER "E:" (for *.LST) is passed to Atari Basic via E:. 3. A patched E: open handler installs handlers for read and close operations. 4. Reading bytes from the file. A conversion is applied to *.LST files: first 0x9b, (0x0d,0x0a), 0x0d or 0x0a found in the file becomes the line terminator and is converted to 0x9b. 5. Close file. Patches are removed. 6. (for *.LST) The "READY" prompt is expected on E:. If something different appears (probably "ERROR"), skip the step 7. 7. (for *.LST) "RUN" is passed to Atari Basic via E:. 2005-08-14 Piotr Fusik * dos/dos_sb.c, dos/sound_dos.c: stereo now works * dos/atari_vga.c, dos/sound_dos.h: sound_dos.h removed, use sound.h instead * rt-config.c: support 16, 576, 1088 RAM; skip non-working options * ui_basic.c: avoid negative array indexes with special keys pressed in UI 2005-08-13 Piotr Fusik * atari_curses.c: TAB is now TAB rather than CONTROL+I; F8 is "enter monitor" not coldstart; Start, Select, Option can now be released; fixed -wide2 mode * antic.c, atari.c, atari_curses.c: generate curses screen basing on the DL rather than OS screen - Self Test and halt screen of emuos are now visible * configure.ac: support --target x11-shm, x11-motif, x11-xview, x11-xview-shm; changed hints for symbols in config.h to full sentences, to be consistent with autoconf-generated hints; fixed hint for VOL_ONLY_SOUND; lack of zlib is no fatal error; check for signal.h, termios.h, memmove, signal, strspn; CURSES_BASIC; no sound objects if SOUND disabled * antic.c, atari.c, configure.ac, gtia.c, input.c, ui.c, ui_basic.c: CURSES version without bitmap screen generation (i.e. no screenshots) enabled with CURSES_BASIC - faster and smaller, enabled by default * cartridge.c, cassette.[ch], pokey.[ch], sio.c: fixed warnings * antic.[ch], gtia.c, pokey.c, statesav.[ch], ui_basic.c: fixed indentation * ui.c: not compiled-in features don't show in menus * cartridge.c, sio.c, statesav.[ch]: added functions for filename save/read * configure.ac, Makefile.in, ui.c: no sound emulation if sound is disabled 2005-08-10 Piotr Fusik * atari_basic.c: sound support; don't link with input.o * atari.c: BASIC and VERY_SLOW now generate all kinds of interrupts. This generally means that you can hear music and SIO works without a patch. Timing in these versions is now much more precise. * antic.[ch], monitor.c: "dlist" in monitor now supports Display Lists in extended memory with exclusive Antic access * devices.c: patching E: open doesn't make sense * cassette.c, ui.c: hold_start_on_reboot moved to cassette.c * antic.c, cartridge.c, gtia.c, memory.c, pia.c, pokey.c, sio.c: no state files in BASIC version * configure.ac, Makefile.in: link cycle_map.o only for NEW_CYCLE_EXACT; CYCLE_EXACT, NEW_CYCLE_EXACT, CRASH_MENU, VERY_SLOW not available in BASIC version; input.o, screen.o, colours.o, statesav.o, list.o, ui_basic.o, ui.o not linked in BASIC version * atari.c, cpu.c, gtia.c, pia.c, pokey.c: input.o and statesav.o not linked in BASIC version * Makefile.in: "make clean" now additionally cleans dos/, falcon/ and win32/ * mzpokeysnd.c, pokeysnd.[ch], sndsave.[ch]: Sound Recording was designed only for 8-bit unsigned samples mono on little-endian machines. Even in this configuration it didn't work, because the frequency wasn't written in the header (and you should have selected old pokeysnd in order to have any samples in the file). Now 8-bit unsigned samples mono/stereo old/new Pokey should work on all machines. 16-bit and signed samples are still TODO. * ui.c: Sound Recording to atari000.wav, atari001.wav, etc. rather than 0.raw, 1.raw. Doesn't overwrite existing files now. TODO: prompt for filename. * atari.c: close sound file at exit, so correct headers are written * antic.c, cartridge.[ch], cpu.c, emuos.h, gtia.c: added consts * antic.c: fixed code formatting * configure.ac: small fix for ncurses and support for pdcurses * atari_curses.c: backspace now works on DJGPP/pdcurses 2005-08-07 Piotr Fusik * mzpokeysnd.c: eschew traditional comments in log messages! * devices.c: MSVC headers have no S_IRUSR nor S_IWUSR * devices.c: empty Hx_DIR now refers to the current directory rather than the root * ui.c: display error messages for "Run BIN file", "Select tape", "Insert cartridge" and "Save screenshot" * compfile.c: fixed indentation; other minor improvements 2005-08-06 Piotr Fusik * configure.ac, devices.c: check for rename() and snprintf() * devices.c: fixed error codes; fixed "unused" warnings; other minor fixes * antic.[ch], atari_sdl.c, atari_x11.c, cassette.[ch], cycle_map.h, pokeysnd.[ch], screen.h, ui.[ch], ui_basic.c, dos/atari_vga.c, dos/vga_gfx.h: changed () function signatures to (void) * antic.c, atari_sdl.c, atari_x11.c, cassette.c, cycle_map.c, monitor.c, pokeysnd.c, ui_basic.c: fixed indentation * rtime.c: optimized RTIME_GetByte * mzpokeysnd.c, pokey.c, pokeysnd.h, pokey_resample.c, prompts.c: // comments changed to /* */ * emuos.lis, emuos.h, ui_basic.c: updated copyright year * atari.c: if no sleep-like function available, fall back to time polling * monitor.c: fixed a warning 2005-08-05 Piotr Fusik * configure.ac: added checks for some headers and functions used in devices.c and atari.c. VERY IMPORTANT: if you don't use Configure, make sure you define HAVE_* symbols (in config.h) for the header files and functions you have. * sio.c: getcwd() may be unavailable * devices.c, devices.h: fancy I/O functions may be unavailable; got rid of numerous #ifdef BACK_SLASH * statesav.c: ReadDisabledROMs wasn't actually called! Thank you GCC 4 for the warning. * atari.c: use best time functions available - now checked by Configure, not hard-coded for platforms (almost...) 2005-06-24 Piotr Fusik * sio.c: fixed PERCOM configuration (spotted by Erhard Puetz): - 1 track, 1 side for non-standard disk images (i.e. exactly 65535 sectors for 65535 sectors image) - 80 tracks for standard 720K, 1.44M and 2.88M disks - MFM byte is 0 for SD, 4 otherwise - unused bytes are set to 0 2005-05-20 Piotr Fusik * antic.c, sndsave.h, ui_basic.c: fixed an error and some warnings reported by GCC 4.0.0 2005-05-13 James Wilkinson * win32/atari_win32.c, win32/joystick.[ch], win32/main.c: added DirectX joystick support * win32/atari_win32.c: cleaned up initialization with nonexistent config file ** 1.3.6 released on 2005-04-30 2005-04-30 Petr Stehlik * ui.c, boot.h: "Make Blank Boot Disk" added to "Disk Management", inspired by LNG (lng.sourceforge.net). It creates a blank boot atr file. Before you can use this blank disk, you must format it. Patch by 'maddoxik' (whoever he is, didn't supply real name). 2005-03-24 Piotr Fusik * cpu.c: fixed incorrectly saved N flag when entering the monitor (bug found by Marcin Lewandowski) * devices.c: added "-help" 2005-03-15 Achim Haertel * casette.[ch], pokey.[ch], sio.[ch], pia.c: implemented cassette loading by hardware registers. Examples of now working games: - Ninja: (eof-)blocks pass on tape while the OS waits for a leader. - Elektraglide has a nonstandard format which is not readable by the SIO-patch but requires raw loading. 2005-03-11 Piotr Fusik * atari_x11.c: "-mouse" works. Set default clipping area to 336x240. x11-motif is now compilable, possibly also x11-xview. 2005-03-10 Piotr Fusik * atari_basic.c: updated for new Atari800_Frame() * atari_sdl.c: corrected Atari_TRIG() and don't initialize sound on "-help" * ui.c: "Extract ROM image from Cartridge" should skip the CART header, not just copy the whole file * ui_basic.c: fixed a memory leak * ui.[ch], atari.c, cpu.c: removed the unused "screen" parameter from ui() and SelectCartType() 2005-03-09 Petr Stehlik * atari_sdl.c: switched back to Atari800_Frame like all other ports do. So far everything looks OK. Why did Jacek abandon the Atari800_Frame way? Weird. Also finally disabled propagating of the KP0-KP9 keys to key_code. Without this the keyboard joystick emulation was mostly unusable. Needs a more general solution - masking out all keyboard joystick keys. Copy from atari_vga.c, it's solved properly there, IIRC. * atari_x11.c: disabled propagating of the KP0-KP9 keys to key_code. * configure.ac: enables linux joystick by default. The atari_x11.c needs a lot of cleanup: move the mouse emulation to input.c and make sure the keyboard joystick, mouse joystick and real joysticks do cope together. 2005-03-08 Piotr Fusik * antic.c: added missing combinations of ANTIC modes with GTIA modes. GTIA modes are correctly scrolled horizontally. * compfile.c, devices.c, gtia.c, monitor.c, mzpokeysnd.c, sio.c, ui_basic.c: killed gcc -W warnings. Remained only the warnings about unused parameters. * antic.c, input.c, dos/sound_dos.c: handle "-help" option 2005-03-05 Piotr Fusik * ui_basic.c: fixed "Error opening '' directory" * input.[ch]: support AKEY_BREAK * atari.[ch], atari_curses.c, atari_falcon.c, atari_svgalib.c, atari_x11.c, amiga/amiga.c, dos/atari_vga.c, win32/main.c, wince/port/atari_wince.c: support for special AKEY_*, refresh rate control and atari_sync() moved to Atari800_Frame() * atari_curses.c, atari_falcon.c, atari_x11.c: F6 is Atari HELP key 2005-03-03 Piotr Fusik * win32/*, configure.ac: renamed win32/screen.[ch] to win32/screen_win32.[ch] * wince/port/*, wince/PocketAtari.vcp: renamed wince/port/screen.* to wince/port/screen_wince.* * atari.[ch], screen.[ch], antic.c, cpu.c, input.c, ui_basic.c: moved screen-related variables to the new "screen" module * configure.ac, makefile, atari.[ch], screen.[ch], sio.[ch], atari_sdl.c, dos/atari_vga.c: deleted diskled.[ch], moved disk LEDs to the new "screen" module, added sector counter and speedometer 2005-02-23 Piotr Fusik * colours.[ch]: refactored, using jakub.act by default * log.c, configure.ac: use vsnprintf only if available * screen.[ch]: renamed from ataripcx.[ch] and added PNG screenshots * atari.c, atari_curses.c, atari_sdl.c, atari_svgalib.c, atari_x11.c, ui.c, Makefile.in, amiga/makefile, dos/atari_vga.c, win32/main.c, wince/port/atari_wince.c, wince/PocketAtari.vcp: PNG screenshots 2005-02-22 Piotr Fusik * cartridge.c: switch back on the main bank of switchable XEGS cartridges (bug found by Chris Hutt) 2005-01-06 Petr Stehlik * atari_sdl.c: F8 (enter monitor) was not implemented. Fixed. Also entering monitor now switches off the fullscreen mode which makes the monitor usable in X-Windows (not sure about framebuffer but I'd guess for that one we'd have to turn off the graphics completely). ** 1.3.5 released on 2004-12-30 2004-12-29 Petr Stehlik * atari_x11.c: Ken Zalewski contributed a patch for keyboard handling that fixes a segfault (XLookupString was called even if the event was not keyboard related). * atari_x11.c: after looking into the keyboard handling under X11 I realized that keyboard auto-repeat was not working at all. I tried to fix it by keeping the keycode status persistent. It seems to work in non-XVIEW/non-MOTIF version. 2004-12-28 Petr Stehlik * atari_sdl.c: Daniel Serpell contributed a patch for keyboard handling that makes the Atari800 keyboard working on non-US keyboard layouts simply by using the Unicode values of the keys (instead of scancodes). Also, keys Control-0 to 9 and Control-A to Z were added. The "Atari" key is mapped to the left Windows key, the Caps-toggle key is mapped to the right Windows key and the Atari Shift+F1 and Shift+F2 keys are mapped to host's PageUp and PageDown keys (as this is the function of those keys in the Atari-XL OS). ** 1.3.4 released on 2004-12-27 2004-11-26 Petr Stehlik * rt-config.c: fixed many possible buffer overflows that were dangerous if atari800 was installed suid root. Thanks for analysis go to Adam Zabrocki. * svgalib.c: fixes a compilation error when compiling with GCC 3.4.x (compiler chokes on label at end of block). Thank for patch to Andrew Church 2004-11-17 Perry McFarlane * antic.c: Fix for Timeslip game. Newcycleexact dmactl change bug. 2004-09-24 Sebastian Bauer * ui_basic.c: fixed NULL pointer access in file dialog which happened if there were no files in the selected directory. * amiga/*: updated ** 1.3.3 released 2004-08-08 Petr Stehlik * various files: updated for 1.3.3 release 2004-08-05 Christian Groessler * atari_x11.c: adds the left ctrl key as joystick button if "-keypad" is in use. Also cleans up mostly by adding ANSI C function headers. 2004-07-26 Sebastian Bauer * amiga/*: major update, cleanup, fixed console keys, upgraded sound support 2004-07-05 Petr Stehlik * configure.ac: Ken Ames sent a patch that supports OS/2 2004-06-06 Petr Stehlik * atari_x11.c: Christian Groessler's patch adds missing keyboard autorepeat when in the internal Atari800 debugger. * prompts.c: fixed RemoveSpaces() - should not remove space from within the string, only leading and trailing space chars should be removed. * rt-config.c, configure.ac: SUPPORTS_ATARI_CONFIG* now set in configure.ac for DOSVGA and SDL. This also fixes joystick definition not loaded in the DOSVGA port since the #ifdef VGA was changed to #ifdef DOSVGA. * atari_sdl.c: emulated joysticks configured in the atari800.cfg file thanks to patch from Benny (Fishy_PKAT151). This is incompatible with the DOS VGA port configuration so I expect this to change before 1.3.3 release. * rt-config.c: RemoveSpaces() called on both keyword and its value. * rt-config.c, atari_sdl.c: bunch of Aprint() cleaned up 2004-06-04 Petr Stehlik * config.{sub,guess}, debian/*: updated by the atari800 debian diff file 2004-06-03 Piotr Fusik * antic.c: ANTIC mode 2 + GTIA mode 10 should be shifted right by a half of a pixel [a fix for the upcoming demo :-) ] 2004-06-02 Petr Stehlik * atari_x11.c: Christian Groessler suggested to add XK_Break key check so that Ctrl+Pause on linux machine generates the AKEY_BREAK keypress. 2004-02-21 Petr Stehlik * rdevice.c: Martin Albert, our new Debian package maintainer, suggested to allow /dev/ttyS0 for all Linux archs, which is a good idea. This device should be runtime configurable, anyway. 2003-12-21 Petr Stehlik * ui_basic.c: Aprint warning that fileselector couldn't open a folder. The warning should be propagated to the UI and shown to user. Or better yet, the Fileselector should be able to modify the path until it could open it (example: /tmp/state_files/ -> /tmp/) ** 1.3.2 released 2003-12-20 Petr Stehlik * macosx/*: all old files removed and new up-to-date ones (from Mark Grebe) stored in a single macosx.tar.gz file for easier maintenance. * various files: increased version for new 1.3.2 release 2003-12-16 Piotr Fusik * cartridge.[ch], ui.c, DOC/cart.txt, DOC/README: new cartridge types: Phoenix and Blizzard * cassette.c: write cassette description, update tape position indicators when writing, changed C++ style comments to traditional * atari.c: check OS before applying C: patches 2003-12-17 Mark Grebe * compfile.c: Fixed serious bug in Type 41 decoding * mzpokeysnd.c: Added console and SIO Sound back in 2003-11-22 Achim Haertel * atari.c: when the snailmeter is enabled and the speed grown beyond 100% a negative amount of memory was tried to be filled. 2003-11-14 Achim Haertel Cassette handling greatly improved: * atari.[ch]: OS patched for tape leader recognition * cassette.[ch]: Loading improved, skips now blocks which pass on tape while the OS waits for a leader. Writing implemented. Some bugfixes (CAS format chunk header size is always 8, record checksum for raw files). * sio.c: Evaluates i/o-commands for cassette * ui.c: "Load tape image" renamed to "Select tape image" The remaining open points are: - State of cassette operation is not saved in state file - is the expense necessary? - Tape file selector (and disk too) would need 2 additional points at top: and (atm tape save is only possible if you create a file with 0 length and insert that). 2003-11-13 Perry McFarlane * antic.c: DMACTL NEW_CYCLE_EXACT width decrease fix for SERIOUS diskmag #8 2003-11-13 Petr Stehlik * log.c: corrected buffer overflow found by Laios Mircea 2003-10-26 Mark Grebe * cartridge.c, sio.c, statesav.c: saving disk and cartridge info in the state file. Bumped the state file version number, and then added save functions to the Cart and SIO files. It currently supports reading the current version (3) as well as the new version (4) state files. It writes only the new version (4). The filename information for cartridge and disk information is stored in two ways. It is stored as a relative path if the file is in the emulator's directory tree, and it is stored as an absolute path if it isn't. If it doesn't find the cartridge or disk, it does not refuse to load the state, but continues. New state file format works extremely well with the bank switched cartridges. 2003-10-25 Petr Stehlik * atari_falcon.c: disable compiling with stereo sound enabled * log.c: do MacOSX a favor and generally allow platform specific Aprint output * atari.c: wrong path to disk image is not a reason to quit with an error message * mzpokeysnd.c: simple fix for SERIO_SOUND (thanks to Mark Grebe) * pokey.c: some platforms (MacOSX) might need different SOUND_GAIN so it's possible to define it in configure/Makefile now. * atari_sdl.c: hatefully backported fix from input.c (see 2003-09-21) Somebody should inspect the atari_sdl.c why it doesn't use the Atari800_Frame system and possibly use it in the SDL port as well. * DOC/TODO: some items removed, some edited. 2003-10-24 Piotr Fusik * sio.c: "Overmind" runs with NEW_CYCLE_EXACT and SIO patch enabled. I implemented NO_SECTOR_DELAY in 0.9.9i to allow running the "Overmind" demo. Originally this hack relied on the xpos variable and thus wasn't NEW_CYCLE_EXACT compatible. Now the delay occurs only between successive reads of sector 1, not every time reading sector 2. This makes every disk image boot 0.2 sec. faster. * sio.h: NO_SECTOR_DELAY is internal to sio.c 2003-09-23 Piotr Fusik * ui.c, sio.h: added Rotate_Disks() to UI 2003-09-22 Perry McFarlane * antic.c: got sprite collisions working with NEW_CYCLE_EXACT (broken by mistake) * antic.c: a fix for "Sweet Illusions" part with wireframe vectors (sprites highlighting the scrolling text) 2003-09-21 Piotr Fusik * input.c: implemented bit 6 of SKSTAT - now you can exit from the "spinning camera" part of "Cool Emotion" * mkimg.c: general clean-up: int main, fixed #includes, etc. 2003-09-16 Perry McFarlane * antic.c: cycle-perfect CHACTL mid-scanline changes * DOC/BUGS: updated 2003-09-15 Chris Martin * DOC/rdevice_faq.txt: detailed documentation 2003-05-28 Chris Martin * rdevice.c: fixed several bugs with the sockets version, and it now includes a serial port mode as well. The R: device can now be emulated by network sockets or you can connect directly to the host serial ports (/dev/ttyS0, etc.) in order to talk to a real modem. There is a variable near the top of the rdevice.c file called 'r_serial'. When this is 0, network sockets are used; when it is 1, the RS232 port on the host is used. This variable should be moved to rt-config.h and the atari800 config file could have a line that says: R_SERIAL=1 2003-09-04 Petr Stehlik * compfile.c, devices.c: small fix for possibly undefined O_BINARY in the mkstemp emulation from Perry. This could help me compiling Atari800 on Falcon where I have an older version of MiNTlib. Also make sure "config.h" is included wherever you rely on configure defines.. * DOC/BUGS: some bugs removed as direct response on Perry's newest patches. Possibly many more bugs from this list could be removed now. * DOC/TODO: added three very important things to do at the top of this TO-DO list. Also added an item about configuring the R: device, this time at the bottom of the list. 2003-09-14 Perry McFarlane * win32/sound.c: round buffer to a sample pair if STEREO sound configured * compfile.c, devices.c, configure.ac: make sure mkstemp() is defined and if it's not, emulate it using mktemp(). Helps compiling in mingw32. * antic.c: CHBASE timing is cycle-exact now. Fixes Endless Dream (credits in the intro), among others. * gtia.c: DMACTL timing is now improved. Fixes Sweet Illusions (sprites highlighting the scroll) and surely also other games and demos. 2003-09-04 Petr Stehlik * configure.ac: forgot to increase version * util/export: added check for version in configure.ac * ChangeLog: some older entries about fixing bugs in Debian BTS corrected * debian/*: taken from fresh debian package of Atari800 1.3.1 ** tagged as ATARI800_1_3_1 2003-09-04 Petr Stehlik * configure.ac: svgalib target added * SVGAlib target dropped from Debian and RPM build scripts * -rc1 removed from everywhere, it was causing pain for the build scripts * sockets.txt renamed to r_device.txt * Makefile.in: rewritten a bit the install process. Now actually becoming usable - for example "make install DESTDIR=/tmp" now does something useful. There's a bit more work to do - install the rest of documentation and write 'uninstall' target. * atari800.spec: builds on the Makefile.in improvement. Now should finally install the man page everytime. ** tagged as ATARI800_1_3_1-RC1 2003-09-03 Petr Stehlik * dos/vga_gfx.h: wrong #endif fixed * dos/atari_vga.c: cleaned up a bit, added #ifdef SHOW_DISK_LED * configure_dos.bat: default target and bufferedlog pre-set * atari.h: version increased to 1.3.1-rc1 2003-08-31 Petr Stehlik * rdevice.c: GPL header added (hope that it actually was free source before Chris brought it to Atari800 project) * rt-config.c: R: patch is not enabled by default. It can be enabled in the UI * ui.c: R: patch named as "Atari850 emulation via network" (better description welcome) * DOC/sockets.txt: this is the explanation of R: - couple of excerpts from Atari800 mailing list mails. 2003-08-31 Ed Cogburn * Makefile.in, configure.ac: rdevice.o compiled and linked in only on linux or Unix and unless --disable-riodevice was used when configuring. * devices.c, atari.h: R: is compiled in only if R_IO_DEVICE is defined (see configure --enable-riodevice, note that it is defined by default) 2003-08-05 Petr Stehlik * atari.c: tried to fix a recent security issue known as CAN-2003-0630, found by Debian Security Audit Project, Debian BTS #203707. In order to provide a complex fix (better than the one suggested in BTS) I wrote code that is not looking very well but works correctly, hopefully. Nevertheless this fixes only the core module arguments parsing - the sound module and port specific modules do it on their own and that should be fixed as well. Best by going for GNU getopt! Also the osa/osb/xlxe/5200/basic rom loading options were not documented in the "-help" list. Fixed. * atari_sdl.c: refresh_rate unused, removed 2003-08-05 Achim Haertel * sio.c: fixed random timeout while sectorread at datatransfer with command frames. - added: xf551 hispeed commands (0xA1, 0xA2, 0xD0, 0xD2, 0xD7) - added: status command reports errors in last read/write operation caveat: the only commandframe which transfers in hispeed is sectorread, all other use normal speed in the emu * pokey.c: xf551 hispeed transfer uses SIO speed 0x10 2003-07-04 Piotr Fusik * mzpokeysnd.c: added key click * cpu.c: a fix for "CMC Demo" crashing NEW_CYCLE_EXACT emulator (the problem could probably exist in many other demos which play samples using IRQ) 2003-06-27 Perry McFarlane * cycle_map.[ch]: a fix that prevents "Cool Emotion" demo from crashing NEW_CYCLE_EXACT emulator if P: patch is disabled 2003-06-18 Petr Stehlik * config.{sub,guess}: upgraded to latest versions from autotools-dev package in order to fix the Debian BTS #193397 (problem supporting the Debian mips and mipsel architectures). 2003-06-15 Petr Stehlik * compfile.c: quick fix for non-zlib capable environments 2003-05-28 Petr Stehlik * cpu_m68k.asm: major update, brings it to the 1.3.0+ level of cpu.c Thanks Gerhard. * devices.c, atari.h, rdevice.[ch]: new R: device support (sockets). Originally written by Tom Hunt. Fixed, updated and prepared for Atari800 integration by Chris Martin . Thanks Chris! * atari.c, ui.c, rt-config.[ch], Makefile.in: updated to allow run-time configuration of the R: entry in HATABS. * DOC/sockets.txt: it's an excerpt from mails I got from Chris. It may explain some basic ideas about the R: device. 2003-03-07 Piotr Fusik * pia.[ch], memory.[ch], atari.c: fixed MultiJoy and PORTB: PORTA must be configured as output to select MultiJoy port. PORTB direction register can be read. PORTB lines stay high if configured as inputs ("Road Race" works in XL/XE mode - didn't since 1.2.4). Reset sets PORTB output (not 0xD301, which may be direction register at the moment) to 0xFF. * cartridge.c, cassette.c, input.c: copyright fix (I created these files) 2003-03-03 Mark Grebe * ui.c: Save/Load Disk Set implemented. Result of Save is a text file containing names of the disk images that are currently in the drives. On saving drives with no disks are marked as "Empty" and on loading no changes are made to such drives. This allows the user to load multiple disk sets sequentially. File extension is ".set". 2003-03-03 Ed Cogburn * mzpokeysnd.c: Initialize some uninitialized variables to fix gcc warning * devices.c, compfile.c: tmpnam() -> mkstemp() to fix gcc warning * atari_sdl.c: control key support added (how it could be compiled before?) * configure.ac: massive rewrite, new way of handling our options. Config summary added. * Makefile.in: a number of small changes, and OBJ is changed to OBJS for consistancy within configure.ac * atari.c, diskled.c, sio.c: diskled module is compiled in only if it's enabled in configure. 2003-02-27 Piotr Fusik * cartridge.[ch], ui.c, DOC/cart.txt, DOC/CREDITS, DOC/README: new cartridge type 2003-02-24 Ed Cogburn * added copyright headers to all *.c and *.asm files. Tried to collect as much info as possible from the various ChangeLogs but if the author in the header is incorrect please don't hesitate to send me a correction. * fixed all *.h files to use the same consistent format (#ifndef _FILE_H_ ) * reformatted DOC/CREDITS 2003-02-19 Ed Cogburn * configure process: cleans up some things, fixes a few little things, rewrote the message screen when nothing is typed, and reorganizes/changes the --enable options and the symbol names (defines) for those options. First, all options are now --enable-xxx, because I flipped all the inverse options. In other words, all symbol names declared for options here in configure now mean the feature is enabled if the symbol is defined, for consistancy, and to make it easier to figure out what options need to be set. The display when you use '--help' also puts those features which default to on at the top of the list, so its easy to look down the list and understand whats going on now. For those options that I flipped, I made the necessary fixes to the other source files, mainly changing #ifdef to #ifndef or vice-versa. I also changed symbol names where I thought it made sense. So for examples: 'NOSNDINTER' is flipped to "INTERPOLATE_SOUND". 'NO_VOL_ONLY' is flipped to 'VOL_ONLY_SOUND'. 'CLIP' is now 'CLIP_SOUND'. 'STEREO' is now 'STEREO_SOUND'. 'JOYMOUSE' is now 'SVGA_JOYMOUSE' 'USE_CURSORBLOCK' is now'SVGA_CURSORBLOCK' because these two options are only valid with the svgalib target, just like 'SVGA_SPEEDUP'. 'CPUASS' is now 'FALCON_CPUASM' since its only valid with the falcon target. Symbols that started with 'NO_' have been flipped, mostly to their original name without 'NO_'. 'SET_LED' is gone, and 'NO_LED_ON_SCREEN' has been flipped to 'SHOW_DISK_LED'. 2003-02-18 Petr Stehlik * atari_sdl.c: sends more Atari keys: SETTAB/CLRTAB, HELP, CAPSLOCK, INSERT_LINE/CHAR, DELETE_LINE/CHAR. Thanks to Mark for updating the file. 2003-02-17 Petr Stehlik * debian/ folder with deb scripts added (taken from official Atari800 debian package created by Dale Scheetz) * atari_sdl.c: window gets a title (thanks to Jozef for suggestion) 2003-02-11 Vasyl Tsvirkunov * antic.c: added missing guard around extern reference * mzpokeysnd.c: C standard compliance fix * wince\*: WinCE/PocketPC updated ** tagged as 1.3.0 2003-02-10 Petr Stehlik * pokey.c, monitor.c: added include. Interesting is that my compiler at home hasn't complained but the gcc-3.2.2 here at work was uncompromising. * atari.c: "--help", "--usage" and "--version" recognized now, though the former two just ask user to type "-help" again. * pokeysnd.[ch]: fixed typo errors * configure.in: alternate user and system-wide config file names for DOS and TOS ($HOME/atari800.cfg and C:\atari800.cfg) since their filesystem is still limited to 8+3 filenames. * win32/sound.c: restored original behaviour of "-quality" switch. * atari800.man: version increased, SDL option "-audio16" added. * win32/sound.c: "-bit16" renamed to "-audio16" to be in sync with SDL port * emuos.h: finally updated with proper URL * most files in DOC folder updated with minor fixes 2003-02-09 Petr Stehlik * pokey.[ch]: 'stereo_enabled' variable moved to rt-config.c * prompts.[ch]: YesNo() renamed to GetYesNo() and added GetYesNoAsInt() that allows user to enter Y/N in the RtConfigUpdate process * rt-config.c: added 'enable_new_pokey' * added "ENABLE_NEW_POKEY" and "STEREO_POKEY" config options * removed all the code for backward compatibility since it could cause confusion if both old and new option existed in one config file * updated for GetYesNoAsInt() prompt * completely reworked the way the config file is searched for on disk: now it first tries in user's $HOME folder file named ".atari800.cfg" (which is configurable at compile-time) and later it falls back to system wide "/etc/atari800.cfg" (also configurable at compile-time). * also saving to user defined config file (-config ) should work now (contrary to previous state where it saved to default file). * actual config filename is printed so users are sure which file was used (if their configured, or $HOME, or the system wide one) * ui.c: updated for 'enable_new_pokey' * pokeysnd.c: it wasn't clear to me how important the 'quality' parameter was so I added a function Pokey_set_quality(int). If it wasn't that important (was for testing only?) then let's remove this function. * pokeysnd.c: a new function "Pokey_DoInit()" does the actual initialization of the Pokey emulation. It's been separated from Pokey_sound_init to allow calling from UI. * atari_amiga.c, sound.c, sound_falcon.c, dos/sound_dos.c, win32/sound.c, wince/sound.c: updated for Pokey_sound_init()'s number of parameters. * atari_sdl.c: removed "-mzpokey", "-oldpokey" and "-stereo" command line switches. This job (cleaning up the bloated command line options) was actually one of the main reasons for all my today's changes. * configure.in: STEREO sound enabled by default. Shouldn't hurt since at the same time the 'enabled_stereo' is FALSE by default. So basically released binaries will be able to turn on stereo anytime users'll wish. Slower machines might want to disable this (as well as pixel-exact Antic emulation and a few more things) before building. Configure script could even take care of that if it knew which targets are running on slow machines. * atari.h, DOC/NEWS, DOC/INSTALL updated with info from above. ** tagged as 1.2.10 2003-02-09 Petr Stehlik * pokeysnd.[ch]: added Pokey_set/get_quality() that allows me to switch the Pokey routines (Ron Fries/Michael Borisov) on-the-fly from UI. * ui.c: Sound Settings submenu added. Allows changing the Pokey routines on-the-fly (automatically reboots) and also Mono/Stereo (if compiled in). * emuos.lis: updated URL 2003-02-08 Petr Stehlik * atari_sdl.c: signal keyboard interrupt only when it's enabled (bugfix copied from input.c where it was fixed by Piotr) * configure.in, acconfig.h: autoconf 2.5x required again. OS/2 and other platforms with old autoconf can use the pre-generated configure script found in released versions. * atari_curses.c: exit() was not defined so I replaced it by return. * atari_x11.c: some variables are used only if SHM is not defined * configure.in, ui_basic.c: "CURSES" replaced by "USE_CURSES" so that compiler doesn't complain about a redefined stuff * pokeysnd.c: null functions defined properly to avoid compiler warnings 2003-02-04 Petr Stehlik * configure.in, acconfig.h: after few days of autoconf 2.5x support I rolled back the changes since Ken Ames had a problem with upgrading autoconf on OS/2. ** tagged as 1.2.9 2003-01-27 Perry McFarlane I am going to send my cycle-exact patch now because I don't have any more time to work on it. Hopefully it will be useful. I hope it is not a problem to apply the patches. I tried to make them to the current version. They need more testing, though. In particular state saving is not tested. I have been working over the past few weeks on some improvements to the Atari800 emulator. I wanted to add support for mid-scanline changes to colours and players which are used by some (few) games and demos. I have written some code that does this, as a patch to the current code base. To avoid using the new code './configure --disable-cycleexact' This patch will fix display bugs in Master of the Lamps, Mail order monsters etc. However there were still a few bugs in some programs (see BUGS) and I haven't had time to fully test it. I also have run out of personal time to work on this code for a while so I won't have much time to maintain it. I think I should submit it now and hopefully it can be used to help improve the emulator. If I had more time I would have completed more of the changes I wanted, see TODO in the code for some future ideas. As for efficency, it is probably going to be slower than normal to use this code, but it seems OK on my (fast) machine, so since it is a #define to remove the new technique I hope this will not be a problem. There is also a test program called T7.bas which I was using to help find out how the real Atari's timing works, it might be of interest to someone. (probably not) I am going to include it anyways along with some brief documentation. There is asm code t7.asm and a c program bdata.c that converts asm to Atari basic data statements. T7.asm can be compiled with ATASM. * antic.c, gtia.c, cycle_map.c: Cycle-exact changes to colours, player horizontal positions, player graphics. Basic idea: arrays cpu2antic and antic2cpu are created in cycle_map.c Antic.c selects the correct cycle map based on the IR mode and scanline #, DMACTL screen width and HSCROL then cpu2antic_ptr and antic2cpu_ptr will convert the cpu's cycles to those of antic and vice-versa. xpos will now represent the cpu's perception of cycles and not the acutual xpos. font_cycles, DMAR etc are not used. When the cpu changes a display register, the display is updated partially to the point where the change occurs. A function draw_partial_scanline does this using the existing antic drawing code in a somewhat hackish way. cycle-exact GTIA11_DELAY for "Demonic laughter" demo. using ring buffer approach Improved handling of DMACTL changes in the middle of a scanline. Fixes: Decathlon, Mail order monsters. Emulation of a DMACTL width change bug. * cpu.c, monitor.c: The monitor remembers xpos and ypos in a buffer. A new command, YBREAK, can cause a breakpoint at a given scanline(ypos) setting YBREAK ypos+1000 causes a flickering line to appear at that point on the screen rather than breaking the cpu. This allows debugging what happens at that scanline more easily. The memmove approach for remember_JMP, remmeber_PC has been replaced with a more efficent ring buffer approach The HISTORY command now gives a disassembly of the last N instructions where N=64 by default, and if the new cycle-exact code is used, it also gives the xpos and ypos of those instructions. correction to SIZEP2 SIZEP3 equates * pokey.c: cycle-exact random number generator reads. ** tagged as 1.2.8 2003-01-27 Jason Duerstock * PAGED_ATTRIB support, removing the attrib[] array and replacing it with a map of 256 pointers (one for each page of memory. If the pointer is NULL, then the memory[] array will be accessed directly. This change is activated through './configure --enable-paged'. In my estimation, this should improve the performance of the emulator, removing 64K of cache usage, and short-circuiting some switch {} statements. Note that this will render old saved-state files incompatible. There are a few short bits not finished yet, one of which being the "H:" device patch, which is mapped into 0xd1xx (parallel bus space), the other being state saving. My idea on how to do this is through the following struct: map_save save_map[2] = { {0, NULL, NULL}, /* RAM */ {1, NULL, ROM_PutByte} /* ROM */ }; The readmap and writemap will be compared with the pair of pointers in the struct, and a byte (the first column) will be saved for each page. On restore, the byte will be used to reconstruct the readmap and writemap. * Several warnings have been cleaned up through inclusion of the proper headers. * 'make distclean' has been added, to remove all the files generated from autoconf and ./configure In the process, I removed the (admittedly ugly) memory.[ch] redirection to memory-[pd].[ch]. If the general consensus is that PAGED_ATTRIB is a step in the right direction, then I will look at tacking PAGED_MEM back on through PAGED_ATTRIB. Any comments, suggestions, critiques, etc are appreciated. joy> something has to be done regarding the saved-state files. Backward compatibility is a key thing in this area. ** tagged as 1.2.7 2003-01-27 Mark Grebe * devices.c: I've finally got around to finishing the upgrade to the hard disk emulation. It now fully support subdirectories. It supports CREDIR, RMDIR, CWD, ?DIR in SpartaDos and BW-DOS. It also supports their XIO equivelents, and subdirectories work in all the other DOS commands as well. It uses '>' and '>>' as directory seperators like SpartaDOS and BW-DOS. I've also added support for the binary load commands, and added a path string for use with the H: devices, as the standard path won't work for them. It really needs a documentation writeup, but I've been gettting swamped at work, so that will come as I get time, but thought I would get this to everyone now, as I released it in the last release of Atari800MacX. I've tested it on the Mac, as well as Windows and the Linux SDL port. The only other change that is needed, is that Device_HHINIT should be called during Coldstart(), so that the working directories get reset to the root directory. joy> Note that it may needs the same patches that were applied to devices.c in version 1.14. But I don't have an Amiga handy so I'll let someone else do it. ** tagged as 1.2.6 2003-01-27 Piotr Fusik * antic.c: swapped GTIA and CTIA artifacting modes (swapped by mistake in 0.9.9j) * input.c: signal keyboard interrupt only when it's enabled (fixes Atari crash after SHIFT and * in Super Pacman 5200) 2002-12-16 Krzysztof Nikiel * colours.c: corrected color/BW conversion (Vasyl was right) 2002-12-08 Krzysztof Nikiel * pokeysnd.c mzpokeysnd.c: Added 16bit and quality sound setting support. Added multiple sound engines support. 2002-12-04 Mark Grebe * devices.c: device H: now fully emulates the standard DOS functions Rename, Delete, Lock, Unlock, Note, Point, and Open for Update. Also changed the directory listing to look like the standard Atari DOS 2.0 listing. (The sector count is based on 256 byte sectors). ** released as 1.2.5 on 2002/12/02 2002-11-25 Piotr Fusik * DOC/cart.txt: fixed a few typos 2002-11-06 Petr Stehlik * ui.c: - applied patch from Ed Cogburn that fixes subsequent mounting of R/W disks in slot that was mounted R/O previously. - finally implemented the R/W <-> R/O mode switching using the Space Bar. Please note that this R/W <-> R/O switch is just temporary and does not change the writeprotect flag of ATR images. Besides, it cannot override this flag so you actually can't mount a writeprotected ATR image read/write using this Space Bar toggle. * atari.c: Ken Ames sent me a very simple patch that is supposed to allow compiling the Atari800 on OS/2 "using Hob X11, XFree86, or IBM's X11 server". 2002-09-16 Piotr Fusik * cartridge.[ch], ui.c, DOC/cart.txt: five new cartridge types (Nir Dary) 2002-09-05 Piotr Fusik * cartridge.[ch], ui.c, DOC/cart.txt, DOC/README: seven new cartridge types (by Nir Dary) 2002-08-26 Adam Bienias * pokeysnd.c: a fix for better quality of sound 2002-08-21 Piotr Fusik * antic.c: ANTIC mode E + GTIA mode 9 ("Unconventional 2k", "Ass Kisiel") 2002-08-15 Piotr Fusik * DOC/BUGS: "Numen" soundtrack * cartridge.[ch], ui.c, DOC/cart.txt: 1 MB XEGS cart * input.c: Amiga/ST mouse right button ("Bombdown") * input.h, input.c, pia.c: MultiJoy4 interface (4 joysticks for XL/XE) ** released as 1.2.4 2002-08-07 Petr Stehlik * atari_sdl.c: - added atexit(SDL_Quit) to clean up after unsuccessful initialization. - fixed "-help" so that it doesn't initialize graphics mode. - added "-sound" and "-nosound" support so you can disable sound if your sound card is not plugged in :) - added "-dsprate" support - added support for the configure option --disable-SOUND - added Aflushlog() to Atari_Exit() thus debug info is displayed now - when sound card init failed the application continues to run with sound disabled (previously it was exiting immediately) * atari_sdl.c, atari_falcon.c, cassette.c, atari.c, atari_vga.c: fixed "-help" formatting * atari_curses.c: added "-help" * atari.c, atari_curses.c, atari_x11.c: added Aflushlog() to Atari_Exit() * atari_x11.c: fixed the clean up code in Atari_Exit(), added help_only mode * sound.c: all printf's changed to Aprintf(). * atari.c: "-v" or "-version" displays the version correctly now * atari_vga.c: added help_only mode and made sure Atari_Exit is aware of that * sound_dos.c: removed EOL ("\n") from Aprint() (it adds the \n automatically) 2002-07-24 Piotr Fusik * cartridge.[ch], ui.c, DOC/cart.txt, DOC/README: 256K and 512K XEGS carts (thanks to Nir Dary) 2002-07-14 Piotr Fusik * atari.c, memory-d.c, ui.c: emulation of 576K and 1088K RAM machines * pia.c: removed a hack that affected 1088 XE * antic.c, memory-d.c, atari800.man: separate ANTIC access to extended memory for 130 XE and 320 Compy Shop * DOC/README: updated features 2002-07-11 Krzysztof Nikiel * configure.in: Freature processing redesigned to be more consistent. Correct enable/disable info is printed in help. ** released as 1.2.3 2002-07-04 Vasyl Tsvirkunov * ui.c,gtia.c,atari.h,cassette.h: cassette image loading is available from main menu. Also, main menu allows to persist "Hold Start" setting. Interlaced screenshot is commented out in main menu. * ui_wince.c: updated to reflect above changes (one port-specific item was piggyback on interlaced screenshot, had to move). 2002-07-04 Piotr Fusik * atari.c, memory-d.c, ui.c: emulation of 16K RAM machines: 400 and 600XL * cpu.c: cycle-exact LSR $D01A * input.c: after playing with real paddles changed mouse_pot_min to 1 * monitor.c: fixed optype6502[] to match unofficial instructions 2002-06-27 Petr Stehlik * atari_sdl.c: updated LPTjoy support to compile under Linux only. If there's another Unix flavor that can read parallel port using ioctl then it can be easily added. Just define LPTJOY for it (see the begining of atari_sdl.c). 2002-06-27 Piotr Wiszowaty * atari_sdl.c: added LPTjoy support for Linux 2002-06-23 Petr Stehlik * OK, the "-palette" patch from Andrew was completely wrong. I fixed it the right way and when I was at it I also moved the "-palette" command line option from main atari.c to colours.c. * I also decided to fix the command line options in general, so I made some changes to atari.c and atari_x11.c. * At last I corrected a bunch of things in atari_sdl.c so that now SDL port recognizes "-help". The other options now use single "-" to conform to the rest of Atari800 application. 2002-06-20 Petr Stehlik * atari.c: "unistd" header included - it should fix a start problem on FreeBSD 4.5 according to an anonymous patch on sf.net. * colours.c: loaded color palettes were ignored. Andrew Church posted a patch on sf.net that fixes it. * atari800.man: manual page updated by Rob McMullen 2002-04-11 Piotr Fusik * pokey.c: allow high-speed disk i/o (Alpha-Load works) 2002-04-07 Christian Groessler and Petr Stehlik * non-ANSI "t" parameter in fopen ("rt" and "wt" used for CR/LF files in DOS-like operating systems) removed since it was causing problems with KallistiOS Dreamcast library. Linux glibc could also be affected as it aborts scanning the mode parameter when it encounters an unknown char (consider "wt+"). Code was updated to take care of the possible extra \r before \n at end of fgets string. fputs() should be OK as the text mode is most probably the default mode. 2002-03-29 Vasyl Tsvirkunov * Dirty update scheme is completed 2002-03-18 Piotr Fusik * antic.c: NMIST bit 5 is external NMI (not reset) status in Antic, unused in Atari * input.c: second button in 5200 joystick generates "Break key" IRQ * monitor.c: "DLIST" now accepts address as an argument 2002-02-13 Petr Stehlik * atari_sdl.c: fixed screen offset in 32bpp (thanks to Suzanne Archibald) * atari_sdl.c: fixed sound initialisation (thanks to Tomas Mraz) * pokey.c: fixed sound channel 1 in stereo mode (thanks to Radek Sterba) 2002-02-04 Piotr Fusik * DOC/BUGS: updated list of games 2002-01-10 Jindrich Kubec * new cartridge type added * last #include "zlib.h" found and fixed. ** released as 1.2.2 2001-12-31 Petr Stehlik * renamed cpu_m68k.s to cpu_m68k.asm because it's not in gas format * renamed *.s files in falcon/ to *.asm (same as above) * updated Makefile.in to run xgen on *.asm files only 2001-12-29 Petr Stehlik * joysticks (both real and keyboard) in SDL port fixed. * configure now allows to --enable-CPUASS for m68k assembler CPU core. 2001-12-24 Jakub Bogusz * memory corruption in input.c (joystick checking) fixed. 2001-12-17 Petr Stehlik * configure.in changed so it doesn'ta ask any questions by default Use --enable-FEATURE or --disable-FEATURE. * configure.in updated for better Falcon support 2001-12-08 Krzysztof Nikiel * acconfig.h: unused symbol COMPILED_PALETTE removed * win32/atari1.ico: new windows icon (actually an old one but modified) * win32/atari.rc: new icon included 2001-12-07 Piotr Fusik * cpu.c: #include for exit() * rtime.c: #include for strcmp() 2001-12-04 Jacek Poplawski * log.c, log.h: fixed undefined Aflushlog * atari_sdl.c: cleanups for readability 2001-12-04 Petr Stehlik * util/sethdr, util/act2html.c: added Nathan's sethdr perl script and Piotr's act2html C code * SDL port now calls Aflushlog() before it exits * fixed win32 compile and runtime problems (thanks to Nathan) 2001-12-03 Petr Stehlik * configure.in: updated to support the Atari Falcon port * Falcon port' proprietary -DDMASOUND changed to general -DSOUND 2001-11-27 Krzysztof Nikiel * colours.c: default palette changed to the real palette created by Zdenek Eisenhammer. * colours.c: code to adjust palette properties improved and moved to separate function Palette_Format. 2001-11-26 Piotr Fusik * colours.c: #include for strcmp() 2001-11-22 Krzysztof Nikiel * DOC/INSTALL: added autoconf instructions * acconfig.h: added SVGALIB symbol 2001-11-18 Piotr Fusik * ui.c: fixed a bug: modification of string literals 2001-11-14 Vasyl Tsvirkunov * WinCE: Fixed a few keyboard issues * Linear filter applied to screen image in portrait mode (looks much better) 2001-11-09 Piotr Fusik * pbi.c, pbi.h, Makefile.in: removed pbi module (it did nothing useful and was out of date) 2001-11-04 Piotr Fusik * input.h, input.c: added Trak-Ball emulation ("Missile Command") and blocked opposite joystick directions (good for "Mario Bros.") * cartridge.h, cartridge.c, ui.c: right slot cartridge 2001-10-29 Piotr Fusik * monitor.c: "DLIST" didn't stopped on JVB if Display List had multiple of 15 instructions * cpu.c, gtia.h: removed i386 asm tricks - gcc 2.95.3 does it better :-) * atari.h, gtia.c: changed implementation of WSYNC/VCOUNT timing (previously it assumed that the instruction accessing VCOUNT had 4 cycles) * antic.c: corrected timing of DLISTL/H ("Spelunker" works) 2001-10-26 Piotr Fusik * atari_vga.c, configure.in: moved atari_vga.c from src to src/dos * configure.bat, configure_dos.bat: renamed configure.bat to configure_dos.bat (in bash 2.04.7 "./configure" runs configure.bat instead of configure) * atari.c, memory-d.c: made 130 XE state files compatible with previous versions * ui.c: current system is selected by default in SelectSystem() * input.h, antic.c, input.c: light gun emulation, "-mouse gun" is same as "-mouse pen", except that the button is inverted * input.c: set default light pen/gun offsets to (42, 2) - good for light gun games; a bigger light pen/gun cursor 2001-10-16 Krzysztof Nikiel * ui_basic.c: better keyboard autorepeat rate * configure.in: added AC_EXEEXT; removed A800_MAIN; used $target variable * Makefile.in: improved dep target; added EXEEXT * autogen.sh: new script to create 'configure' 2001-10-12 Piotr Fusik * cartridge.h, cartridge.c, ui.c: added 8 KB and 4 KB cartridges for 5200 2001-10-11 Piotr Fusik * atari_curses.c, ui_basic.c, ui.c: removed CURSES-specific code from ui.c, added curses_screen for UI 2001-10-11 Krzysztof Nikiel * ui_basic: added atari_sync() call in keyboard loop--keyboard is sampled at reasonable rate 2001-10-10 Piotr Fusik * atari_x11.c, atari_curses.c: compilable now * configure.in, ui.c: corrected typos 2001-10-10 Krzysztof Nikiel * sound.c: improved output space calculation--can work much better with some drivers 2001-10-09 Piotr Fusik * ui.c: OSS 'M019' -> 'M091' 2001-10-08 Piotr Fusik * input.c: removed CVS keywords * ui.c: corrected stack bug (thanks Vasyl) and renamed some cartridge types 2001-10-07 Piotr Fusik * input.c: smoother mouse pointer movement in Amiga/ST/joy modes * atari_basic.c: removed Atari_POT (unused) * pokey.c: fixed SEROUT (Sparta DOS X runs) 2001-10-05 Piotr Fusik * atari.c, cartridge.h, cartridge.c, ui.c: added Bounty Bob Strikes Back cartridge for 800/XL/XE (thanks Jindroush) * atari.c: H: didn't worked until a patch was toggled 2001-10-03 Piotr Fusik * input.h, input.c: finished mouse code * pokey.c: added INPUT_Scanline() call (to emulate Amiga and ST mice) * rt-config.c: fixed default TV mode in RtConfigUpdate * cpu.c: killed some warnings, AtariEscape -> Atari800_RunEsc * atari.h, atari.c, devices.c, devices.h, memory-d.c, binload.c: rewritten escape codes handling * devices.c: corrected Device_isvalid (isalnum((char) 0x9b) == 1 !) * binload.c: killed a warning, used dGetWord/dPutWord * diskled.h, diskled.c, sio.c, atari.c, atari_vga.c, platform.h: SET_LED and Atari_Set_LED are no longer used, Update_LED -> LED_Frame * atari.h, atari.c: added screen_visible_* variables * input.c, atari_vga.c, platform.h: removed Atari_POT: special handling of 5200 joysticks is in input.c * Makefile.in: updated 2001-10-03 Krzysztof Nikiel * win32/atari_win32.c, atari_svgalib.c: keyboard interface updated * win32/main.c: added mouse input 2001-10-01 Piotr Fusik * dos/vga_asm.s: corrected a bug in make_darker and commented whole routine out (it was used in ALLEGRO version only). * ui.h, devices.c, cpu.c, atari.c: #include "ui.h" for CRASH_MENU externs * memory-d.h: added a few useful macros (dGetWord, etc.) * sio.c, cpu.c, memory-d.c, atari.c, antic.c: updated for new macros in memory-d.h * cartridge.h, cartridge.c, ui.c: added new cartridge type: Atrax 128 KB (thanks Jindroush) * antic.h, antic.c, ui.c: renamed artif_init to ANTIC_UpdateArtifacting * ui.c: CURSES code cleanup (spaces, memory[], goto) 2001-09-27 Piotr Fusik * pia.c, pia.h: Atari_PORT -> PORT_input * pokey.c, pokey.h: Atari_POT -> POT_input * input.h: added INPUT_Initialise and a few mouse variables * input.c: added INPUT_Initialise, PORT_input, POT_input * atari_basic.c: removed Atari_CONSOL and Atari_PEN (not used anymore) * cpu.c: fixed nasty bug with extern int wsync_halt - there's UBYTE wsync_halt in antic.c (oooooppss!) * cpu_m68k.s: fixed wsync_halt bug, bounty_bob1/2 -> CART_BountyBob1/2, SupertCart_GetByte/PutByte -> CART_GetByte/PutByte * input.h: mouse_speed, INPUT_CenterMousePointer, INPUT_DrawMousePointer * input.c: emulation of Paddles, Atari Touch Tablet, Koala Pad and Light Pen/Light Gun * atari.c: called INPUT_Initialise and INPUT_DrawMousePointer * atari_vga.c: updated mouse code * Makefile.in: updated 2001-09-26 Piotr Fusik * input.c, input.h: added mouse_mode, mouse_port, 5200 key codes * antic.h, antic.c, platform.h, atari_vga.c: light_pen_enabled, Atari_PEN -> mouse_mode==MOUSE_PEN, PENH_input, PENV_input (direct mouse support for light pen emulation) 2001-09-22 Piotr Fusik * input.h, input.c: added key_consol, joy_autofire, AKEY_SHFT etc. * input.c: fixed key_break and key_code * atari.h: declared nframes and deltatime, AKEY_SHFT etc. moved to input.h * gtia.c, platform.h, atari_vga.c: Atari_CONSOL -> key_consol, TRIG_auto -> joy_autofire 2001-09-21 Piotr Fusik * antic.c: optimized character modes * devices.c: removed unused variable * atari.h, atari.c: Atari800_Frame(): new function that groups emulation of one Atari frame. The functions for individual modules will be called ANTIC_Frame(), GTIA_Frame(), etc. * input.h, input.c: new module, for keyboard/joystick/mouse * pokey.h: declared SKSTAT (for input) * atari_vga.c, ui.c: included input.h * atari.h: joystick positions and Atari key codes moved to input.h * atari.c: part of keyboard handling moved to INPUT_Frame() * Makefile.in: updated for the input module * antic.h, antic.c, ataripcx.c, ui.c: ANTIC_RunDisplayList -> ANTIC_Frame * gtia.h, gtia.c: GTIA_Triggers -> GTIA_Frame * atari.h: removed draw_display, added Atari800_Initialise * atari.c: main() is now in platform-dependent code, should call Atari800_Initialise and Atari800_Frame * input.c, input.h, pokey.c, atari_vga.c: SHIFT_KEY -> key_shift (consistent naming convention) * pokey.c, atari_vga.c: removed KEYPRESSED (not needed, since INPUT_Frame() can check if key_code!=AKEY_NONE) * atari_basic.c, atari_vga.c: added main() 2001-09-20 Piotr Fusik * gtia.c: optimized players in new_pm_scanline 2001-09-19 Piotr Fusik * pokey.c: corrected RANDOM 2001-09-17 Piotr Fusik * antic.c: optimized: memcpy in ANTIC_Load * memory-d.c, memory-d.h, atari.c: Initialise_Atari... functions moved to atari.c (they don't need to be memory-d/-p specific, it should simplify finishing PAGED_MEM code) * atari.c, atari.h, atari_vga.c, cartridge.c, gtia.c, memory-d.c, pia.c, rt-config.c, rt-config.h, statesav.c, ui.c: machine, mach_xlxe, Ram256, os, default_system -> machine_type, ram_size (removed lots of confusing variables, now it's easier to add new machines - 16,192,1088,... KB of RAM) * cartridge.c: killed a warning * rt-config.c, rt-config.c, ui.c, memory-d.c, atari.c: enable_c000_ram -> ram_size = 52 * memory-d.c: malloc/free atarixe_memory (don't waste 256 KB if not in XE mode) * atari.c: shortened state file of 130 XE 2001-09-16 Piotr Fusik * atari.c, rt-config.c, rt-config.h: removed default_tv_mode (not needed, since there's tv_mode) 2001-09-09 Piotr Fusik * pia.h: declared atari_basic and selftest_enabled * rt-config.h, rt-config.c, atari.c, ui.c: hold_option -> disable_basic * memory-d.h, memory-d.c, cartridge.c:o "-basic" and "-nobasic" work for Atari 800 (Atari BASIC is attached as a cartridge in Atari 800) 2001-09-08 Krzysztof Nikiel * compfile.c: unused definitions and inclusions removed * ui.c, rt-config.h, rt-config.c: used FILENAME_MAX instead of MAX_FILENAME_LEN * sio.c, sio.h: used FILENAME_MAX instead of FILENAME_LEN 2001-09-06 Piotr Fusik * atari.h: MENU_PATCHES -> MENU_SETTINGS 2001-09-04 Piotr Fusik * pokey.c: implemented SKRES and bit 5 of SKSTAT * cartridge.c: CART_Remove works in 5200 mode * ui.c: hold_option, enable_c000_ram and rtime_enabled available in menu 2001-09-03 Piotr Fusik * pokey.c: call SIO_GetByte() when triggering IRQ, not when reading SERIN ("Timeless Announcement" loads now) * sio.c: disk drive answers 'E' to an unknown command. 2001-08-29 Piotr Fusik * cassette.h, cassette.c: using FILENAME_MAX from stdio.h 2001-08-27 Piotr Fusik * pokey.c: RANDOM is 0xff if (SKCTLS&0x03)==0 (for stereo detection in "Sheol") 2001-08-27 Krzysztof Nikiel * acconfig.h, config.h.in: safer 'win32' definition * win32/main.c: used _endthread() call without parameter 2001-08-24 Piotr Fusik * pokey.h: declared stereo_enabled (for monitor.c) * pokey.c: initialize KBCODE to 0xff - for a stereo detection routine 2001-08-19 Krzysztof Nikiel * DOC/INSTALL: windows instructions 2001-08-16 Piotr Fusik * atari.c: selecting cartridge type didn't worked in 5200 mode * memory-d.c: deleted CART_Remove() in Initialise_Atari*, so auto-switching to 5200 mode when inserting a 5200 cartridge works * cartridge.c: fix for Bounty Bob 5200 cartridge (thanks Jindroush) 2001-08-06 Piotr Fusik * colours.c: -help bug fix * cassette.h, gtia.h, gtia.c, atari.c: hold_start support (emulator presses Start and Space to boot the tape) * cassette.c: CAS format support * Makefile.in: added cassette.[ch] 2001-08-03 Piotr Fusik * cassette.h, cassette.c: new module, for cassette recorder emulation * sio.h: declared SIO_ChkSum (for cassette.c) * atari.c, sio.c: cassette support 2001-07-25 Piotr Fusik * sio.h, compfile.c, atari.c, sio.c: added SIO_Exit(), code clean ups * sio.c: Format Disk rewritten. Now it can resize both ATR and XFD images. The ATR header is being updated. Double density formatting works. 2001-07-24 Piotr Fusik * antic.c: speeded up Vasyl's code 2001-07-23 Piotr Fusik * sio.c: corrected and added checks if drive number is in range 1-8 2001-07-21 Piotr Fusik * sio.c: made double density ATR images compatible with SIO2PC 2001-07-20 Piotr Fusik * monitor.c: "C 600 ABCD" does the same as "C 600 CD AB". "DLIST" - 1 KB boundary respected. "POKEY" command. "S" without parameters repeats last search. Corrected Petr's mistake in rev.1.4. * pia.c, pia.h: renamed atarixl_os to atari_os (this array may be used also for storing 800 and 5200 OSes) * rt-config.h, rt-config.c, atari.c, atari.h, memory-d.c, memory.d.h: removed enable_rom_patches, added: enable_h_patch, enable_p_patch and Atari800_UpdatePatches(). SIO, H: and P: patches are now independent and can be toggled at run-time (original OS is saved in atari_os). Removed SetSIOEsc() and RestoreSIO(). * atari.h, ui.c: added "Atari OS patches" menu item * cpu.c, devices.c, atari.h: removed ESC_BREAK (it wasn't really an escape code, it was used for entering the monitor - the monitor can be called directly) * devices.c: replaced K_Device with Device_KHREAD, replaced E_Device with Device_EHOPEN, Device_EHREAD and Device_EHWRITE (now K: and E: handlers are implemented in the same way as H: and P:) * rtime.h, rtime.c: new module, created from R-Time 8 emulation routines in supercart * cartridge.h, cartridge.c: new module, for inserting cartridges (previously in memory-d) and bank-switching (previously in memory-d and supercart) * monitor.c: not displaying rom_inserted in "PIA" command (because the new cartridge types can be disabled by software) * atari.h: added declarations of mach_xlxe and Ram256, removed cartridge types and Insert/Remove functions for cartridges * rt-config.c: removed #define TRUE/FALSE and extern int Ram256 (it's in atari.h) * memory-d.h, memory-d.c: rewritten to support the new cartridge module * pia.c: Ram256 moved to atari.c (it's not related with PIA) * gtia.h: declared TRIG and TRIG_latch (accessed by memory-d) * pia.c, gtia.c: cartA0BF_enabled is used instead of rom_inserted * ui.h: declared SelectCartType(), removed mach_xlxe and Ram256 (which are declared in atari.h) * atari.c: support for new rtime and cartridge modules * ui.c: inserting, removing and converting of new cartridge types * Makefile.in, common.mak: added cartridge and rtime, removed supercart * supercart.c, supercart.h: removed - routines moved to new modules cartridge and rtime 2001-07-19 Piotr Fusik * binload.c: 0x31 stored at 0x300 ("Studio Dream" loads now) * supercart.c: added "byte &= 0x0f" to prevent out of bounds accesses to regset[] * pokey.c: SKSTAT variable renamed to SKCTLS to avoid confusions (it's the write-only, not the read-only Pokey register) * devices.c: replaced "dGetByte(0x2e)" with "regX" in H: handler routines (fixes problems with Atari BASIC's GET/PUT/INPUT/PRINT) * cpu.c: on reset, the I flag is set (now reset works if stuck in interrupts) * pia.c: & 0x3f on read PACTL and PBCTL (bits 6 and 7 are read-only in real PIA) * antic.c: described cycle-exact Antic timing for a few modes (not implemented) * devices.c: added open mode 9 (append) for H: device * pokey.c: potentiometers emulation improved: POTGO and ALLPOT registers and bit 2 of SKCTLS implemented, "Tree Surgeon" no longer hangs * pokey.c, pokey.h, pokeysnd.c, pokeysnd.h: moved a few definitions from pokeysnd to pokey (the goal is not to duplicate the variables of same meaning in pokey and pokeysnd, e.g. AUDC/AUDF/AUDCTL) * pokey.c: blocked POTs, SERIN, SEROUT, KBCODE, IRQ, SKSTAT, SKCTLS in the second Pokey chip, second Pokey unaccesible until stereo_enabled set (helps some stereo detection routines) * pokey.c, pokey.h, pokeysnd.c: replaced bit17[] with poly9_lookup[] and poly17_lookup[]. bit17[] was initialized with rand(), while poly9/17_lookups use the original POKEY algorithms. Moreover, poly9/17_lookups are smaller, which saves ca. 100 KB of memory. * atari.h, pokey.h, antic.c, pokey.c: true RANDOM emulation (both 9- and 17-bit poly) ! Not using rand() anymore. POKEY_Frame() and cpu_clock are needed for it. Try the "Bank Bang!" game. * antic.c, gtia.c: the background color can be changed inside a scanline. Currently implemented only for blank lines without PMG. Try the "Partyland" part of the "Bitter Reality" demo. The feature can be disabled by defining NO_CYCLE_EXACT. * pokey.c: STIMER fixed (speech in "Mirax Force" is better, but still not perfect) * cpu.c: slight optimization of ROL and ROR * cpu.c: Read-Modify-Write (RMW) instructions (ASL, INC, etc.) store the unmodified value of $D01A before they store the modified value. Now you can see the white dots made with INC $D01A. * ui.h: removed declaration of atarixl_os (why was it declared here?) atari800-5.0.0/DOC/FAQ000066400000000000000000000040751425067567700140340ustar00rootroot00000000000000Frequently asked questions (with answers) ----------------------------------------- 0. Q: Where to get ROM files for the emulator? A: Download the xf25.zip from http://prdownloads.sf.net/atari800/xf25.zip You'll get three .ROM files - ATARIBAS.ROM, ATARIOSB.ROM and ATARIXL.ROM. We cannot distribute them due to licensing and copyright issues. Sorry. In Atari800 UI there is an option to locate these ROM images. 1. Q: I want Windows version of Atari800 with Windows GUI. A: Try Atari800Win PLus: http://atariarea.histeria.pl/PLus/index_us.htm 2. Q: If I use keyboard as the emulated joystick in the DOS version it often stops some games (e.g. Bruce Lee). What should I do? A: Press F7 to switch the keyboard into joy-only mode. Or better, use a real joystick (either PC or the old CX-40 Atari one). 3. Q: How about keyboard joysticks in the SDL version? A: Up to two keyboard joysticks can be freely defined and enabled/disabled on-the-fly in the UI (user interface). Press F1 to enter the UI, then enter "Controller Configuration" and then "Define layout of ...". There you can choose which keys will be used as joystick directions and the fire button. Don't forget to enable the joysticks before gaming and to disable it before using your keyboard in BASIC, DOS or a text editor. When you're satisfied with your keyboard joystick mapping you can save the settings. 4. Q: Sound problems in xxx A: We know about problems with volume-only sound (digitized sound effects). See the BUGS file. You can try disabling the new HIFI Pokey emulation (in the UI go to Sound Settings and disable the HIFI there). I also experienced sound problems in SDL on my Debian GNU/Linux with ESD (a sound daemon coming with GNOME) that were fixed by installing the libsdl1.2debian-alsa package (that is compiled to output sound directly to ALSA instead of going through the ESD (this is applicable only if you are using ALSA (http://alsa-project.org/) and have ESD running, of course). atari800-5.0.0/DOC/HOWTO-DIRTYRECT000066400000000000000000000126021425067567700156670ustar00rootroot00000000000000USING DIRTY UPDATE SCHEME 1. Why dirty updates? Most Atari 800 games and applications update only very small part of the screen every frame. Typical numbers range from 1% to 5%. On the other hand many ports have to convert screen image from internal emulator format to port native format and copy it to platform video memory. Both conversion and copy (or blit) are typically slow. 2. How to enable it? To enable dirty update tracking the symbol DIRTYRECT must be #defined globally (in CONFIG.H or in project settings). When it is defined the array screen_dirty[] gets allocated. This is UBYTE array of the size ATARI_HEIGHT*ATARI_WIDTH/8. In current implementation every element is either 0 or 1. Initially the entire array is initialized with 0. Each element in this array corresponds to eight consequtive pixels in atari_screen[]. When any of this pixels is being changed the element in screen_dirty[] is getting set to 1. Port's implementation of Atari_DisplayScreen() can use this information and draw only those pixels belonging to "changed" octets. Port must reset screen_dirty[] at the end of its Atari_DisplayScreen(). Emulator core _never_ resets screen_dirty[] elements. 3. How to use it? The simplest implementation would be this: every time your code is attempting to process pixel at pointer src (which must point somewhere _inside_ atari_screen[]) do a check: if(screen_dirty[((ULONG)src-(ULONG)atari_screen)/8]) ... If the condition succeeds, update the pixel. Otherwise, skip it. More advanced implementation would do a check only once per eight pixels but the check basically remains the same. The best use is to redesign the entire update loop so it moves through the array screen_dirty[] instead of typical loop through atari_screen[] or double loop through screen coordinates x and y. Essentially, if screen_dirty[m]==1 then eight pixels starting at atari_screen[m*8] needs to be refreshed. Or, if you want these in screen coordinates: y=m/ATARI_WIDTH, eight pixels starting at m%ATARI_WIDTH. Note that pixels are guaranteed to be at the same scanline. Properly written loop would not even use division there: for(m=0, x=0, y=0; m= ATARI_WIDTH) { x = 0; y ++; } } The code in that last example also resets screen_dirty[] as it goes and does it in very efficient way. If your code does not do that you can just use: memset(screen_dirty, 0, ATARI_HEIGHT * ATARI_WIDTH/8); at the end of Atari_DisplayScreen(). 4. Is it worth a trouble? Believe me, yes, unless your target platform is so fast that you don't care about the performance. I tested this implementation on PocketPC (WinCE) port on iPaq. Old implementation was too slow even with frameskip of 3 (anything higher tends to break PM graphics). With the new implementation I am getting better speed at frameskip 1 than I had with the old implementation at frameskip 3, and I finally got 100% speed at frameskip 2! At the same time I am using linear filtering with the new implemenation, something that was too expensive with the old one. On the top of this, I am not using the most efficient (described above) way to use the scheme. There are only a few little catches there. First, you should use compiler with at least semi-decent optimizer. Otherwise you will get a few extra memory moves every time you access video memory. It's not a big problem but it is something to be aware of. Second, there is slight performance hit in ANTIC.C: changed pixels are slightly more expensive (unchanged pixels stay the same, may be even cheaper than before depending on platform memory controller). That only means that if you #define DIRTYRECT you should definitely implement proper dirty update support in your port or you'll burn CPU cycles. Then again, the impact is not that big. 5. Changing core emulator code. If you need to draw anything on the screen from the emulator core you need to follow certain protocol. First of all, you cannot use atari_screen[] directly anymore. If your code resides in ANTIC.C you should use macros WRITE_VIDEO_BYTE(), WRITE_VIDEO() (writes a word), WRITE_VIDEO_LONG(), and FILL_VIDEO(). There is one case when code reads from atari_screen[], that one uses macro READ_VIDEO_LONG() but I would strongly discourage everybody from doing tricks like that. For code outside of ANTIC.C there are two simple functions: video_putbyte() and video_memset(). Those should suffice in most situations. 6. Other notes. With current set of macros the emulator core is shielded from actual atari_screen[] implementation. By all means, atari_screen can be fake pointer now. It is possible to create set of macros that will cause port code (outside of emulator core) to draw pixels directly to the screen as emulator generates them, potentially saving some CPU clocks (just replace screen_dirty[] changes with calls to client functions). It is also possible to move atari_screen[] allocation completely to the client side. Not sure if anybody needs these features, but they come free. Another interesting use of dirty update implementation would be very efficient way to record movies straight from the emulator: no need to calculate diff frames anymore. This is rather fancy feature but you never know. Vasyl 04/07/2002atari800-5.0.0/DOC/HOWTO-DIRTYSPAN000066400000000000000000000077521425067567700157050ustar00rootroot00000000000000DIRTY SPANS TECHNIQUE Please note: this is just an idea. I'll explain it in pseudo-code: /* in antic.c: */ int dirty_left[ATARI_HEIGHT]; int dirty_right[ATARI_HEIGHT]; static void draw_antic_*() { int x; for (x = left_margin; x < right_margin; x++) { UBYTE new_pixel = generate_pixel(x); if (new_pixel != scrn_ptr[x]) { dirty_left[ypos - 8] = x; x = right_margin; do { x--; new_pixel = generate_pixel(x); } while (new_pixel == scrn_ptr[x]); dirty_right[ypos - 8] = x + 1; for (x = dirty_left[ypos - 8]; x < dirty_right[ypos - 8]; x++) { scrn_ptr[x] = generate_pixel(x); } return; } } /* no pixels changed in this line */ dirty_left[ypos - 8] = dirty_right[ypos - 8] = 0; } /* Note: (ypos - 8) is because ypos ranges from 8 to 247 for the visible scanlines */ /* port-specific Atari_DisplayScreen(): */ void Atari_DisplayScreen(UBYTE *screen) { int y; for (y = 0; y < ATARI_HEIGHT; y++) { /* copy pixels dirty_left[y] <= x < dirty_right[y] from screen[] to the real screen */ blit_pixels(screen, dirty_left[y], dirty_right[y], y); } } Now some less formal explanation: The idea is to update only parts of scanlines that changed since last frame. We update one continuous sequence of pixels ("span") per scanline. dirty_left[y] and dirty_right[y] are the boundaries of the span in scanline y. In each scanline, we search for a first pixel that is different from the previous frame. If we don't find one, then the whole scanline is not dirty, which we mark with: dirty_left[y] = dirty_right[y] = 0; If we find left-most pixel that differs from the previous frame, we save its x coordinate in dirty_left[y]. Then we search starting from the right side for a pixel that changed since last frame. We know we'll find one. We save (x + 1) in dirty_right[y]. Now we normally generate pixels between dirty_left[y] and dirty_right[y]. The display routine doesn't need any additional comments, I think. Compared to the current approach (always display whole Atari screen), the DIRTY SPANS technique adds almost zero overhead in the worst case. In the best case we avoid screen updates completely. On average, we update just the areas that changed. There's one case when DIRTY SPANS perform worse than DIRTY RECT: if left and right sides of screen are changing while the center of screen remains static. This is however extremely rare (actually, I cannot recall any real Atari program that does such things). Compared to DIRTY RECT, DIRTY SPANS has nearly zero overhead in ANTIC code: while searching for boundaries there are comparisons but no writes to the screen; generating the changed part of the scanlines operates as fast as without DIRTY techniques. Displaying pixels is much faster: we immediately know which pixels to update, without stepping through 8K screen_dirty[]. It is also better for hardware architectures where continuous writes to the video memory are faster then random writes. It is possible to combine DIRTY SPANS with DIRTY RECT: in the first pass, find span boundaries using DIRTY SPANS. Then, in the display loop, update only the pixels that changed (compare current pixels to a backup copy of the screen). DIRTY SPANS should be straightforward to implement on most platforms: all we need is displaying 1-pixel-high bitmaps. The ANTIC code is what gets more complicated with DIRTY SPANS. Basically, we have to split each function that generates an Atari graphics mode into 3 parts: 1. Find dirty_left (similar to normal code, but compare instead of write pixels). 2. Find dirty_right (likewise, but *right-to-left*; it should be possible to implement it without a speed penalty). 3. Write pixels (same as the current code). This probably means more and more macros (antic.c is already full of them). As noted at the beginning of this document, these are all plans for the future. Piotr Fusik 2005-09-09 atari800-5.0.0/DOC/INSTALL000066400000000000000000000231511425067567700145270ustar00rootroot00000000000000Installation of the Atari800 Emulator -------------------------------------- Irrespective of whether you are going to compile the emulator yourself or install a pre-compiled binary version you must obtain a copy of the Operating System ROMs. The ROM images are distributed within the PC Xformer 2.5 package (other versions of this program do not contain the ROMs in a suitable format) which can be downloaded from:- http://prdownloads.sf.net/atari800/xf25.zip If you are creating the ROM images yourself they should be copied from the following locations:- 1. Atari BASIC (8192 bytes between $a000 and $bfff) Note: On a 400/800/1200XL system a BASIC cartridge must be inserted, and on other systems the built-in BASIC must be enabled by setting bit 1 of PORTB to 0. 2. Atari 400/800 OS (10240 bytes between $d800 and $ffff) 3. Atari XL/XE OS (16384 bytes between $c000 and $ffff) Note: If you are extracting the XL/XE OS you will find that the ROM area under the custom chip ($d000 to $d7ff) is mapped between $5000 and $57ff when bit 7 of PORTB is set to 1. I.e. you should set bit 7 of PORTB and then dump the memory out in the following order:- $c000 to $cfff, $5000 to $57ff and finally $d800 to $ffff. 4. Atari XEGS built-in game (8192 bytes between $a000 and $bfff) Note: the built-in game must be enabled by setting bit 1 of PORTB to 1 and bit 6 to 0. 5. Atari 5200 BIOS (2048 bytes between $f800 and $ffff) The first time you run the emulator it will scan the current directory for compatible ROMs and load them. At the same time, a new configuration file will be created, with the new paths stored so the next time you run the emulator the ROMs would be find automatically. Compiling the Emulator ---------------------- The emulator can be compiled for the following systems (and probably many others with a little work):- 1. X Window Version (including SUN OpenWindows) on a Unix Platform (prefer the SDL version) 2. CURSES version 3. Graphical Version for the Amiga (not maintained) 4. Graphical version for the Atari TT/Falcon and compatible computers 5. "simple" version (no graphics). Should be straightforward to configure for any 32-bit environment supporting ANSI C. 6. VGA Version for DOS 7. DirectX Version for Microsoft Windows (also try the SDL version) 8. SDL (Linux/Unix, Windows, BeOS) 9. WinCE 10. Java (various platforms) 11. Static library version: libatari800 Installed zlib (compression library) enables building the emulator with compressed statesave images support. Installed libpng makes the emulator capable of generating screenshots in the PNG format. Installed libmp3lame enables MP3 audio to be saved in video and audio files. Building the Emulator on most platforms --------------------------------------- 1. Change your working dir to the atari800 path 2. Check if "configure" script is there. If it is skip to step 4. 3. Run "./autogen.sh" (make sure you have autoconf >= 2.5x installed). 4. Type "./configure". 5. Type "make". 6. Change directory to atari800/src 7. Install the emulator by typing "make install". Please note it is also possible to build atari800 outside the source directory. Just follow steps 1-3 and then call `configure' from your build directory, i.e. ../atari800/configure if your build directory is located next to atari800 source directory. By default, the "configure" script attempts to auto-detect the best interfaces available to use for emulating video and sound. It is also possible to override autodetection and select a specific interface by appending the "--with-video=" and "--with-sound=" options to the command in step 4. Below is the list of available values for these options: a) Video interfaces (--with-video): - dosvga: use direct access to VGA card, only under DOS/DJGPP - sdl: use the Simple DirectMedia Library - curses: use the curses library - ncurses: use the ncurses library - pdcurses: use the pdcurses library - no: use only stdin/stdout for input/output. Supported on all platforms b) Sound interfaces (--with-sound): - win: use the WinMM library, only under Windows - falcon: use Atari Falcon native sound - dossb: use direct access to a Sound Blaster-compatible card, only under DOS/DJGPP - sdl: use the Simple DirectMedia Library - oss: use Open Sound System - no: disable sound altogether. Supported on all platforms Only the video and sound interfaces listed above are autodetected, but the emulator also supports other ones. To build for a platform that is not automatically detected, replace step 4 of the above instructions with: 4a. Type "./configure --target=help" for a list of supported platforms. 4b. Type "./configure --target=" (choose from the list above) Building the Emulator for Curses -------------------------------- Follow the instruction above but note that you must be using the System V Curses Library. BSD Curses is lacking a few functions and will not work (nodelay, attron, attroff, keypad and curs_set). Building the Emulator for DOS ----------------------------- To compile, use DJGPP the DOS port of gcc, which can be got from http://www.delorie.com/djgpp/. You will need complete environment in order to configure and build the executables. You may need zlib (compression library) to use compressed statesave images and libpng for PNG screenshots. To build curses (text mode) version install curses-compatible library (e.g. PDCurses) and add "--with-video=pdcurses" when invoking "./configure". Since the source code contains files with long file names, you must unpack and compile the source on a filesystem supporting long file names (for example VFAT of Windows95). An additional change of DJGPP setting is required: open the DJGPP.ENV file in editor and change the LFN= line to LFN=y 1. Run "configure_dos.bat". 2. Run "make" and "make joycfg". 3. If everything went good you should have atari800.exe and joycfg.exe - copy them to destination directory. Building the Emulator for Windows --------------------------------- See DOC/BUILD.windows. Building the Emulator for Falcon -------------------------------- You need a recent GCC, for example 4.6.4, running on a filesystem with long file names (either minixfs/ext2fs of MiNT, or VFAT of MagiC). 1. Type "./configure --target=falcon". 2. Type "make". 3. Copy atari800 to destination directory or try "make install". You also can build the default target (by omitting the "--target" option) with optional support for curses or SDL - see "Building the Emulator on most platforms". Building the Emulator for SDL ----------------------------- 1. Please install (and configure) SDL library (http://www.libsdl.org). 2. If you want to build an OpenGL-capable version, you'll need OpenGL headers installed. They should support OpenGL version 2.1 or later, ie. with support for the Pixel Buffer Object (PBO) extension. The result binary, however, will not require an OpenGL 2.1-capable video card - it will also support OpenGL 1.1 video cards (PBOs simply won't be used), and machines without OpenGL support aat all (only software modes will be available). 3. Follow the instructions in the "Building the Emulator on most platforms" section above. NOTE: To be sure, force using SDL by adding "--with-video-input=sdl --with-sound=sdl" when calling "./configure". Otherwise the configure script may autodetect and use other libraries for video and audio. 4. When building on Windows, see DOC/BUILD.windows for additional notes. Building the Emulator for Java using NestedVM --------------------------------------------- 1. Get and build NestedVM (nestedvm.ibex.org). make env.sh and unix_runtime.jar 2. source env.sh in the NestedVM directory. 3. Follow steps 1-5 of the "Building the Emulator on most platforms" section above, but when calling ./configure, add these two parameters: --host=mips-unknown-elf --disable-ide ie. ./configure --host=mips-unknown-elf --disable-ide You might want to add --enable-veryslow --disable-monitorbreak to the above. This should result in creation of the file named atari800.jar. 4. atari800.jar requires unix_runtime.jar in the same directory. Copy it from the NestedVM directory where you made it using "make unix_runtime.jar" as stated above. 5. To run use: java -jar atari800.jar Add -o UnixRuntime to the NestedVM compiler options to enable directory browsing. This requires changing Windows paths to the form: /c:/file in all configuration files and on the command line. It will look for .atari800.cfg in your Windows home directory. Applet version: You must compile with -o UnixRuntime Apply UnixRuntime.patch to NestedVM. To use: All files should have /resource/http:// in front of their names. Edit atari800_applet.cfg and add /resource/http:// to all rom files, even those you are not providing. Legal distribution of Atari800 as an applet cannot include the OS and BASIC ROM Files. You can run without BASIC by using -basic_rom none and Thomas Richter's Os++. Building the libatari800 static library --------------------------------------- The libatari800 target requires no external libraries and is platform independent. It also has no user interface, as it's designed to be embedded into another program that controls the operation of the emulator. The build procedure is much the same as on most platforms, except for step 4: 4. Type "./configure --target=libatari800". The resulting libatari800.a file can be linked with user programs to create an embedded atari800 emulator. atari800-5.0.0/DOC/INSTALL.dos000066400000000000000000000021241425067567700153100ustar00rootroot00000000000000Installation of the Atari800 emulator for MS-DOS ------------------------------------------------------ Irrespective of whether you are going to compile the emulator yourself or install a pre-compiled binary version you must obtain a copy of the Operating System ROMs. The ROM images are distributed within the PC Xformer 2.5 package (other versions of this program do not contain the ROMs in a suitable format) which can be downloaded from:- http://prdownloads.sf.net/atari800/xf25.zip PC-Xformer contains "ataribas.rom", "atariosb.rom" and "atarixl.rom". If have the original OS it should be called "atariosa.rom" and if you have the ROM for the 5200 Games System it should be called "atari5200.rom". Installation of the Emulator ---------------------------- 1. Create a toplevel directory called "atari800" mkdir c:\atari800 2. Copy the Atari800 ZIP file into the newly created "atari800" directory and unzip. copy *.zip c:\atari800 cd c:\atari800 pkunzip *.zip 3. Copy the Operating System ROMS into the same newly created "atari800" 4. Start the emulator by typing "atari800". atari800-5.0.0/DOC/INSTALL.falcon000066400000000000000000000106321425067567700157700ustar00rootroot00000000000000 Apr 2019 Hi all Atari users, this is the Atari 8-bit computer emulator for Atari TT/Falcon range of computers. It should run on any computer with 68030 or higher CPU and a graphics capable of resolution 320x240 (or higher) in 256 colors. Atari800 contains special routines for direct VIDEL programming (for achieving 336x240 resolution on RGB/VGA monitors) and also dedicated NOVA (ISA ATI Mach64) and SuperVidel graphics support. For proper sound output on the TT it requires installation of an XBIOS sound emulator like STFA or X-Sound. Atari800 had originally been developed by David Firth though it's been a community project for more than 15 years already. The Falcon port was initially done by Petr Stehlik and more or less updated up until 2008. Empty Head (= Karel Rous) and Gerhard Janka wrote the 65C02 emulation in pure MC68030 assembler. Douglas Little's assembler routines for VIDEL and IKBD from his game/demo Bad Mood (a DOOM clone) were used for achieving maximum possible speed and compatibility. I have been aware of Atari800 since its early 0.x versions, I still remember how fascinated I was to see it running on a friend's CT2 equipped Falcon. Since ever the CT60 had been released (2003) I wanted to recompile the latest sources and see this amazing piece of software on my Falcon as well! It took 14 long years to finally make this happen. One of the reasons was that everybody just assumed that all the new Atari800 features are simply too slow even for 68060 powered Falcons... and guess what, they are not! And then there's ARAnyM. ;-) And the FireBee. So I have cleaned up the source code, added a feature or two and here we are. Another common misbelief was that the new cycle exact CPU emulation has drifted from the original CPU implementation so much that it will be super hard to sync with our m68k assembler core. Wrong again! Right now, all the features from its C counter part are available for the assembler core as well. That is also the reason why all executables (except the FireBee, naturally) have the fast assembler core included! No more dilemmas about speed vs. compatibility. =========================================================================== All m68k versions are built with following switches: --host=m68k-atari-mint --enable-veryslow --disable-monitorbreak --disable-monitorhints --disable-crashmenu --disable-monitorasm --disable-eventrecording --disable-monitorutf8 --disable-monitoransi --disable-pbi_bb --disable-pbi_mio --disable-riodevice --with-readline=no Then specifically: ATARI800.GTP (XBIOS audio, GEM/Videl video, cycle exact 6502/ANTIC) --target=falcon --enable-falconcpuasm ATARIFST.GTP (XBIOS audio, GEM/Videl video, inexact 6502/ANTIC) --target=falcon --enable-falconcpuasm --disable-newcycleexact (fastest version, you can gain a few % by adding --without-sound) ATARISDL.GTP (XBIOS audio, SDL video, cycle exact 6502/ANTIC) # point to -m68020-60 aware `sdl-config` PATH=$HOME/gnu-tools/m68k-atari-mint/bin/m68020-60:$PATH --target=default --enable-falconcpuasm ATARI_CF.GTP (ATARISDL.GTP for the FireBee, without asm emulation core) # point to -mcpu=5475 aware `sdl-config` PATH=$HOME/gnu-tools/m68k-atari-mint/bin/m5475:$PATH --target=firebee --enable-pagedattrib --enable-cyclesperopcode Then for all versions: m68k-atari-mint-stack --fix=256k atari800 m68k-atari-mint-flags -S atari800 The `flags` command is needed to run properly on machines with memory protection enabled because atari800 hooks on the system keyboard vector and in case of the SDL version maybe also a few others. =========================================================================== Keyboard emulation works just like in other Atari800 flavors: F1 = Configuration menu F2 = Option key F3 = Select key F4 = Start key F5 = Reset key (warm start) Shift+F5 = Switch Atari off and on (cold start) F6 = Help key F7 = Break key F8 = Invoke monitor F9 = Exit emulator F10 = Save screenshot Shift+F10 = Save interlaced screenshot Help = Help key Joystick emulation works fine. Both real joysticks (CX-40 type) can be connected. Several special command line parameters were introduced in this Falcon port. Use "-help" to learn more. For bugreports of Falcon port please write to me (Miro Kropacek) e-mail miro.kropacek@gmail.com WWW http://atari800.github.io/ atari800-5.0.0/DOC/INSTALL.ps2000066400000000000000000000022131425067567700152260ustar00rootroot00000000000000PS2 Specific installation guide Build atari800.elf from source (see BUILD.ps2) if you do not already have the pre-built binary. From Read DOC/INSTALL: *** Irrespective of whether you are going to compile the emulator yourself or install a pre-compiled binary version you must obtain a copy of the Operating System ROMs. The ROM images are distributed within the PC Xformer 2.5 package (other versions of this program do not contain the ROMs in a suitable format) which can be downloaded from:- http://prdownloads.sf.net/atari800/xf25.zip *** Now, on the PS2: Create an ATARI directory on memcard. Copy atari800.elf,Atari roms, and some atari executables/images to the ATARI directory. launch atari800.elf. If your memcard is cramped for space, you should be able to run atari800.elf from HDD (via Ulaunch, etc) or other mass device. Note that currently atari800.elf only can look at MemCard for atari roms and executables/images, and is hard-coded to store the ATARI800.CFG file (the configuration file for atari800) there. Read README.ps2 Thanks Piotr of atari800! Thanks ps2dev.org! Esp NeoVanglist, author of gsKi, and Oopo for the ps2dev toolchain. atari800-5.0.0/DOC/INSTALL.wince000066400000000000000000000162131425067567700156340ustar00rootroot00000000000000 PocketAtari: The Windows CE Port of the Atari 800 Emulator. (Last Update of this File: 30 Oct 06) I. PURPOSE ------------------------------------------------------------------------------ This file describes the installation and compilation procedure for the Windows CE port of the Atari800 emulator [1]. The port currently supports Pocket PC and Smartphone devices deployed with the 2002 version of the OS, also known as WCE300. It has also been tested on devices featuring version 2003 and Windows Mobile 5 of the OS and runs just fine. Your mileage may vary. II. NEWS ------------------------------------------------------------------------------ The updated version of this port: o Adds support for Smartphone devices. - Now supporting QVGA Smartphone devices. - Supports QVGA Landcape Smartphone devices. [NEW in 2.0.3] - Adds a popup virtual keyboard. [NEW in 2.0.3] o Support for VGA displays. o Includes interpolating downsampling filter for Smartphone displays. o Keeps the backlight always on. III. INSTALLING ------------------------------------------------------------------------------ To intall PocketAtari on your PocketPC/Smartphone device: o Create a directory anywhere on your device (Smartphone users need a suitable file explorer application; else you can create it in the Start Menu folder). o Copy the pocketatari.exe file there. o (Optional) Older Windows CE devices also need GAPI from Microsoft [6]. Copy gx.dll into the folder as well. o Copy the Atari OS ROM files in the same folder (see the FAQ for the ROMs). o (Optional) Create a symbolic link to pocketatari.exe at (IPSM)\Windows\Start Menu. o You're good to go! NOTE: The PocketAtari binary does not support older Palm devices (eg. wince 2.11), but the source code should compile and run with no problems. If you can contribute a build for these devices contact me through [3]. IV. USING ------------------------------------------------------------------------------ Pocket Atari can operate in portrait, landscape and inverse landscape mode. Port-specific options in the Windows CE version are: o Virtual Joystick (in Controller Configuration, Pocket PC only) Enable joystick emulation with stylus. o Enable Linear Filtering (in Display Settings) Use filtering for better image quality. Controls for the different classes of devices: a. Pocket PC Use the displayed keyboard/menu to operate the emulator. In landscape modes tap the bottom right corner of the atari screen to display the keyboard/menu. b. Smartphone Due to the lack of proper keyboard and pointing device, the emulated Atari features are limited. You can play the majority of games though. Use the following keys: Directional keys : Simulate joystick 0 $ Softkey A, Softkey B, 4, 6 : Fire joystick 0 $ 0 : Return key 7 : Option key 8 : Select key 9 : Start key Softkey C (usually '*' key) : Show emulator menu $ Talk/Call/Green key : Switch between the 3 display modes For navigating the emulator menus use buttons marked with '$' above. Pressing and holding the Softkey C for more than one (1) second during emulation brings up the virtual Atari keyboard. Navigate with cursor keys to the desired key and press Softkey A or B to inject one keystroke into the emulator. TIP: In some demos, pressing the SHIFT key skips the current part. In the virtual keyboard the SHIFT key is a toggle, so select also another key. The SHIFT keycode will register just fine. NOTE 1 : Functionality of Softkey A, Softkey B and * keys may be attributed differently according to the drivers of your cellphone. NOTE 2 : Until we get a fully modifiable controller configuration option in Atari800, you have to live with the preassigned keys. As an exception, some smartphones have reported problems with the simultaneous use of the fire keys and the directional pad. I have included an option to exchange the functionality of the Softkey B and C keys. This should be considered as an UNSUPPORTED option which will go away in the future. To enable it include the following line in your atari800.cfg file: WCE_SMARTPHONE_KBHACK=1 Also note that this behavior is enabled by default for QVGA Landscape Smartphone devices, due to the possible lack of a Softkey C. V. COMPILING ------------------------------------------------------------------------------ You will need the following tools: o Microsoft Embedded Visual Tools 3.0 [7]. o GAPI emulation [4] for the emulators. o The zlibce library [5]. Create a folder named zlib inside the src/wince directory. Copy zconf.h and zlib.h in zlib/. Create two folders named arm and x86 (src/wince/zlib/arm and src/wince/zlib/x86). Copy the appropriate zlibce.lib files in these directories. Don't forget to upload gx.dll (if needed) and zlibce.dll to your emulator. Also for older Smartphones you'll have to compile yourself a version of the gx.dll using the GAPI emulator files. The Smartphone resolution is 176x220 pixels with 16bpp (either 565 or 555 RGB configurations). NOTE 1 : If you cannot open the project file "PocketAtari.vcp" from the source tarball or CVS checkout, make sure that it is in CR+LF format (and not just LF). A utility like unix2dos can do the trick. NOTE 2 : PocketAtari can also compile OK using evc4 or Visual Studio 2005. VI. HISTORY ------------------------------------------------------------------------------ The Pocket PC port was originally done by Vasyl Tsvirkunov [2]. Kostas Nakos [3] updated the port and added support for Smartphone devices. Many thanks to Vasyl for providing us with a stable codebase! VII. CONTACT ------------------------------------------------------------------------------ Please visit my Atari800 page [3] for fresh builds and news. To report bugs or request new features you can email me at: knakos@gmail.com Also visit Vasyl's Atari800 page [2] and check out the links for more of his work. For inquiries about the Pocket PC/Smartphone port or the emulator in general you can also take a look at the Atari800-users mailing list available at [1]. Enjoy! Kostas Nakos, 31/08/05 Athens, Greece VIII. REFERENCES ------------------------------------------------------------------------------ [1] Atari800 project homepage http://atari800.github.io/ [2] Vasyl Tsvirkunov's Atari800 page http://pocketatari.retrogames.com [3] Kostas Nakos' Atari800 page http://pocketatari.atari.org [4] GAPI emulation http://pocketfrog.droneship.com/ [5] zlib for Windows CE http://www.tenik.co.jp/~adachi/wince/ [6] Microsoft GAPI 1.2 http://www.microsoft.com/downloads/details.aspx?FamilyID=d9879b0e-4ef1-4049-9c61-e758933d84c4&displaylang=en [7] Microsoft eMbedded Visual Tools 3.0 http://msdn.microsoft.com/mobility/windowsmobile/downloads/default.aspx atari800-5.0.0/DOC/LPTjoy.txt000066400000000000000000000007641425067567700154250ustar00rootroot00000000000000LPTjoy interface (designed by Petr Sumbera) [ CANON 25 MALE ] [ CANON 9 M ] (acknowledge) 10 ........................... 4 (right) (busy) 11 ........................... 3 (left) (out of paper) 12 ........................... 2 (down) (select) 13 ........................... 1 (up) (error) 15 ........................... 6 (button) (strobe) 1 ........................... 7 (Ucc) (ground) 25 ........................... 8 (ground) atari800-5.0.0/DOC/Makefile.am000066400000000000000000000010501425067567700155240ustar00rootroot00000000000000doc_DATA = README INSTALL USAGE NEWS EXTRA_DIST = $(doc_DATA) \ BUGS \ BUILD.PS2 \ BUILD.RPI \ BUILD.windows \ CHANGES.OLD \ CHANGES.dc \ CREDITS \ ChangeLog \ FAQ \ HOWTO-DIRTYRECT \ HOWTO-DIRTYSPAN \ INSTALL.dos \ INSTALL.falcon \ INSTALL.ps2 \ INSTALL.wince \ LPTjoy.txt \ PORTING \ PortMaintainers \ README.RPI \ README.android \ README.dc \ README.ps2 \ TESTS.dc \ TODO \ cart.txt \ coverage.txt \ directx.txt \ emuos.txt \ pokeysnd.txt \ r_device.txt \ rdevice_faq.txt \ readme.html.in \ trainer.txt \ $(empty) atari800-5.0.0/DOC/Makefile.in000066400000000000000000000340411425067567700155430ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = DOC ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/sdl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in ChangeLog INSTALL NEWS README \ TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAGS_NOANSI = @CFLAGS_NOANSI@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAVACFLAGS = @JAVACFLAGS@ JAVAFLAGS = @JAVAFLAGS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NDK_BUILD = @NDK_BUILD@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_WINDRES = @ac_ct_WINDRES@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ doc_DATA = README INSTALL USAGE NEWS EXTRA_DIST = $(doc_DATA) \ BUGS \ BUILD.PS2 \ BUILD.RPI \ BUILD.windows \ CHANGES.OLD \ CHANGES.dc \ CREDITS \ ChangeLog \ FAQ \ HOWTO-DIRTYRECT \ HOWTO-DIRTYSPAN \ INSTALL.dos \ INSTALL.falcon \ INSTALL.ps2 \ INSTALL.wince \ LPTjoy.txt \ PORTING \ PortMaintainers \ README.RPI \ README.android \ README.dc \ README.ps2 \ TESTS.dc \ TODO \ cart.txt \ coverage.txt \ directx.txt \ emuos.txt \ pokeysnd.txt \ r_device.txt \ rdevice_faq.txt \ readme.html.in \ trainer.txt \ $(empty) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu DOC/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu DOC/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-docDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-docDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: atari800-5.0.0/DOC/NEWS000066400000000000000000001322401425067567700141750ustar00rootroot00000000000000Version 5.0.0 (2022/05/28) - released at Atariada.cz (yay!) ========================== Big thanks to all contributors (see git log for each commit author) New features: ------------- * AVI video recording (Alt+V hotkey) by Rob McMullen -vcodec command line arg can select video codec -aname and -vname CL args set patterns for sound and video recording -horiz-area & -vert-area command line args for controlling the image area -showstats (and -no-showstats) CL args and related config file param -compression-level for configuring PNG and ZMBV compression * MP3 audio and other audio codecs for audio recording (Alt+W hotkey) -acodec can select audio codec * New cartridge types supported: - 71: Super Cart 64 KB 5200 cartridge (32K banks) - 72: Super Cart 128 KB 5200 cartridge (32K banks) - 73: Super Cart 256 KB 5200 cartridge (32K banks) - 74: Super Cart 512 KB 5200 cartridge (32K banks) - 75: Atarimax 1 MB Flash cartridge (new) See DOC/cart.txt for details. * support for remapping of all function keys (START, SELECT, OPTION etc) * support for comments in config file * tool for creating cart files from ROM files * support for 64-512K Atari 5200 bank-switchable carts with Bryan's design * support for the alternate variant of MaxFlash 1 MB. * support for single RaspberryPi OS package with HW specific binaries Changes: -------- * video triple buffering changed to double buffering * fixed #74 by using proper getcwd() * gamma values in NTSC filter presets updated * MacOS build enables R: by default * fixed saving of config file * using zlib-provided crc32 if HAVE_LIBZ is defined (#72) * Altirra OS updated to v3.28 * renamed "Switchable 5200" cartridges to "Super Cart" * fixed segfault when a 5200 Super Cart cartridge is removed * avoided unnecessary memory copying of 5200 Super Carts * fixed #88 issue in opening a cartridge * BUILD instructions and new README for Android * fixed segfault when exiting monitor * fixed BBSB's lift not working * avoided unnecessary memory copying in Bounty Bob cartridges * allow configuring --with-audio=win in non-DirectX targets * allow configuring --with-audio=sdl and --with-video <> sdl * atari_x11.c: don't auto-repeat the 'screenshot' key * build compatible with dash Version 4.2.0 (2019/12/28) - released at SILK ========================== New Features: ------------- * raw Pokey registers recording by Ivo van Poorten * new platform supported: FireBee * optional hiding of hidden files/folders in the UI file selector * libatari800 (Atari800 as a library) by Rob McMullen * R: device (many years old feature) enabled by default Fixes: ------ * proper check if SDL joysticks are found (fixes #58) * Portrait mode for Android (related to #41) * RMW for Pokey * ROM OS path changes handled better * improved "Find ROM images" - now Atari800 reboots if necessary * fixed an old bug which caused freezing in the UI on Falcon New command line options: ------------------------- * -pokeyrec and its children * -atari_files * -saved_files * -kbdjoy0 -kbdjoy1 -nokbdjoy0 -nokbdjoy1 Plus many Atari Falcon specific fixes and improvements by Mikro. Version 4.1.0 (2019/04/13) - release cooked at Atariada.cz (again :-) ========================== New Features: ------------- * Atari800 now includes Altirra BIOS-es for all emulated systems: 400/800, XL/XE, and 5200; as well as Altirra BASIC. It is now possible to use the emulator without providing any ROM images. * The Altirra OS-es and Altirra BASIC can now be selected by users in the "System settings", if they want to use them. Previously Altirra OS was used automatically only when no other OS ROMs were found. * joyhat support for all four real joysticks, configurable in CLI/cfg/TUI Notable changes: ---------------- * All documentation specific to building Atari800 on Windows has been moved from DOC/INSTALL to a new file, DOC/BUILD.windows. This document has also been expanded with a new chapter covering building Atari800 using MSYS2. * Ability to use the built-in EmuOS firmware has been removed. Users wishing to run Atari800 without providing OS ROMs now have an option of using the built-in Altirra OS-es, which are compatible with much more Atari software than EmuOS. At the same time, it is still possible to compile a version of Atari800 without any OS ROMs built in, by means of the --disable-altirra_bios configure option. Port specific improvements: --------------------------- == Atari Falcon == * More Videl/screen handling fixes * Ability to run Atari800 in an AES-less environment * Replaced C2P with MMU friendly and faster code * Atari800 should run on all TOS clones with XBIOS Sound API == Android == * Fixed building of the Android target, broken in the previous release. * Fixed labels on console keys (unreadable on hi-res displays) * Fixed console keys press detection * Fixed "right-handed joystick" trigger press == Raspberry Pi == * updated build documentation * find proper Broadcom GLes libraries * fixed bug in GRAPHICS 9 (shifted colors) == MS Windows == * updated build documentation General Fixes: -------------- * updated build documentation * it is possible to build atari800 out of source tree * unconnected host joysticks initialized properly, fixes the MULE game Version 4.0.0 (2018/04/21) - release cooked at Atariada.cz ========================== This release brings four years of hard work of fellow Atari800 developers on improvements and bugfixes of our favorite Atari emulator. Ports to Atari ST/TT/Falcon, Android, Raspberry Pi and Sega Dreamcast have been improved (some of them greatly). CPU, SIO, ANTIC, GTIA, POKEY and PIA emulation has been corrected. Atari800 now includes Altirra BIOS so it is now possible to run *some* programs even without installing the original ROM files. The total number of changes is so huge that major version bump was necessary. Contrary to usual NEWS entries here follows a very incomplete list. It might be updated in later releases. In the meantime please read DOC/ChangeLog and the commit history in git for complete list of changes. This release contains breaking changes in color handling. Users updating from an earlier version should reset their color settings, or else the display might be unreadable. To reset the color settings, do one of these: * Select one of the presets available in the menu option "Display settings"-> "Color preset"; or * Run atari800 with the -color-preset command-line option, e.g.: atari800 -colors-preset standard; or * Delete the emulator's config file (.atari800.cfg). Caution: you'll lose all Atari800 settings! New features: ------------- * Support for loading of CAS images with "fsk" chunks - images of copy-protected tapes can now be loaded, with SIO patch being disabled. * Bit3 Full View 80 Column card emulation. * New cartridge type 68: "Atrax 128 KB cartridge". Previously existing cartridge type 17: "Atrax 128 KB cartridge" was based on a misconception - real Atrax cartridges have their address and data lines intermixed, so type 17 could not be used with actual ROM dumps. So, type 17 has been renamed to "Decoded Atrax 128 KB cartridge", and new type 68 has been added, whcih now can be used for Atrax ROM chip dumps. * New cartridge types supported: - aDawliah 32 KB cartridge - aDawliah 64 KB cartridge * new command line switch "-volume" (for 16bit sound output) that can set the output volume of the Atari 800 emulator with value from 0 to 100. Notable Changes: ---------------- * The Sound Settings option "Fragment size" has been renamed to less cryptic "Hardware buffer size". * Total emulator volume is lower now because the output has been shifted in order to fix a possible annoying humming sound in silence on some receivers (TV sets). Port specific improvements: --------------------------- == Atari ST/TT/Falcon == * CPU emulation fixes for the assembly target (now synchronised with the mainline code, incl. the cycle exact mode) * Stereo POKEY support * Video enhancements: flicker-less rendering & RGB monitors support * SuperVidel support (that means much faster direct rendering using its 8-bit chunky mode) * Many small fixes and optimisations == Android == * Built-in Planetary Defense 2012 by Tom Hudson, an enhanced version of the classic game with emulated touchscreen controls. * New feature: Native sound playback for post 2.3 devices, automatically enabled. Eliminates stuttering and inconsistent timing of previous implementation. General Fixes: -------------- * Fixed computation of gamma adjustment - now it is applied to each of the three RGB channels separately. * On systems that support synchronized sound: Fixed the emulator crashing when Dual POKEY was enabled while High Fidelity POKEY was turned off. * Improve screen update routines in the Dreamcast port. They don't use DIRTYRECT anymore but are faster than the old routines when the whole screen is dirty. Version 3.1.0 (2014/04/12) - release cooked at Atariada.cz ========================== Highlight of this release: Raspberry Pi port by Andrey Dj Hidden easter egg: on-screen keyboard in SDL by Christian Groessler All the following work has been done by Tomasz Krasuski: General new features: --------------------- * More accurate emulation of PAL colours (based on analysis of oscillograms of real PAL GTIA output) * Improved PAL blending, working on all grayscale pixels and is accurate now (can be enabled/disabled in "TV effect" display settings) * common sound layer implemented (SDL, JavaNVM, OSS, DOS) with synchro sound. * synchronized sound is now supported by both POKEY sound engines. * turbo mode (F12) is considerably faster * Added cartridge mapping used by "Turbo Hit"/"Atari Blizzard Hit". * Added MegaMax 2 MB cartridge mapping. * Added read-only support for the 4 MB Flash MegaCart mapping. * Added minimal support for The!Cart. General Fixes: -------------- * fixed possible unnecessary cartridge bank switching * fixes and clean up in Java port * fixed diagnostic cartridge cold start (doesn't send Start+Option) * fixed two old bugs in DOS sound (pitch being wrong and sound missing) * fixed keyboard not working for ncurses video and OSS sound Version 3.0.0 (2013/03/03) ========================== New features: ------------- * Option to automatically save configuration on exit * More settings saved in configuration: - currently attached tape file - cartridge settings, including currently attached cartridges - state of R-Time 8 - system settings, including Mosaic/Axlon RAM size * New Tape Management menu - can now create blank tape images, switch tape to read/write in order to save additional data at the end of the current tape image, rewind/fast forward the tape, and mark it as read-only. See DOC/USAGE for details. * Displaying tape position when "Show sector/block counter" is enabled. * Reworked Cartridge Management menu - now displays filename of the attached cartridge. * Option to disable restarting of the machine after cartridge change. * When attaching a cartridge from the command line, cartridge type can now be specified using the new -cart-type and -cart2-type options. * New cartridge types supported: - OSS 8 KB cartridge - OSS two chip 16 KB cartridge (043M) - Blizzard 4 KB cartridge - AST 32 KB cartridge - Atrax SDX 64 KB cartridge - Atrax SDX 128 KB cartridge - Turbosoft 64 KB cartridge - Turbosoft 128 KB cartridge - Ultracart 32 KB cartridge - Low bank 8 KB cartridge - SIC! 128 KB cartridge - SIC! 256 KB cartridge - SIC! 512 KB cartridge - Standard 2 KB cartridge - Standard 4 KB cartridge - Right slot 4 KB cartridge * The configure script can now auto-detect some of the available display and sound interfaces before compiling. * Option to enable XEP80 added to The Emulator Settings menu. * Emulation of the 1200XL, including console LEDs, no built-in BASIC, the F1-F4 keys (mapped to arrow keys in the SDL version) and the on-board J1 jumper. * Emulation of the XE Game System, including the built-in game and detachable keyboard. * Revamped the Select System menu (now called System Settings). Can now select many system settings, including RAM expansions, OS and BASIC revision, and more. * System ROM settings moved to a separate menu. Now it stores paths to all known official revisions of the Atari OS, the 5200 BIOS, all BASIC revisions, and the XEGS built-in game. The OS revision to use is chosen automatically when selecting a machine type (for example, the 400/800 OS PAL or NTSC version is chosen depending on the selected TV system). * 400/800: Emulation of all RAM sizes achievable with different combinations of the CX852 and CX853 modules - from 8 to 48 KB. * Emulation of 32/48KB memory sizes in the XL/XE mode, compatible with memory expansions for the 600XL manufactured by RC Systems. * Emulation of the MapRAM hardware hack. * Display settings: "Hue" renamed to "Tint". Tint now configurable also in PAL mode. New Android port features: -------------------------- * Renamed Atari800 Android port to "Colleen" * Implemented extended key remapping * Implemented the B: device (8-bit games can reach the web now) * Support for Xperia play keycodes added * Remapped dpad enter to break * Added paddle emulation * Optimized file selector, allow roaming outside of ext. storage dir * Added an exclusion border for paddle mode * Implemented state saving * Implemented Planetary Defense mode, a Koala Pad click-where-I-point mode * Natively supported UI on post-Honeycomb devices * Fixes for Jelly Bean (audio stuttering, keypad dialogs, soft keyboard) * Added new dialog for cartridge type selection * UI fine tuning General Fixes: -------------- * Bugfixes in cassette emulation - works reliably even for tape images with long (> 4096 B) blocks. * Fixes in save states - loading of save states works correctly even with an attached bank-switched cartridge or with an Axlon/Mosaic RAM expansion. Note 1: Format of the state files has changed. Old save states can still be opened, but newly-created ones cannot be opened in older versions of Atari800. Note 2: Tape position is not restored on loading of save states. Do not save state during tape loading/saving - it won't work as expected. * "Disable BASIC when booting Atari" no longer emulates pressing of the Option key when in the 400/800 mode. * Fixed a bug with BASIC sometimes disabling itself when switching system type to 400/800 * Minor bugfixes in file selector * Fixed emulation of SpartaDOS X piggyback cartridge functionality * "Save Screenshot" fixed - it saved an interlaced screenshot instead of a normal one. * SDL version: Swapped mapping of right and middle mouse buttons, to make it identical to the X11 and Win32 ports. * Monitor: fixed displaying/disassembling of memory area $D000-$D7FF - with the new supported cartridge types, code may reside on page $D5, and now it can be debugged. * SDL version: fixed a blue border when in OpenGL BGRA32 mode. * Minor fixes in parsing of command-line options. * Rewritten XEP80 emulation - now more accurate and supports switching between NTSC/PAL modes with correct aspect ratio. XEP80 emulation now requires a charset ROM image, path to which should be set in the XEP80_CHARSET line in the config file. * Fixed operating system patches not working with all official revisions of the OS. * Fixed emulation of separate ANTIC/CPU access to XE RAM when Self-Test is enabled. * Fixed the emulator menu sometimes being displayed incorrectly (missing font) when running without an OS ROM image. * Improved accuracy of generated colours in PAL mode. * Fixed emulation of the H: read operation - Turbo Basic's BLOAD now works on H: devices. Version 2.2.1 (2011/04/28) ========================== Quick update fixing some annoying bugs from the previous release and adding some new host screen optimizations and improvements: * X11 target can be compiled again * SDL sound on *BSD should work * older compilers (DOS/BeOS) should compile again * many SDL/OpenGL workarounds for Microsoft Windows libSDL bugs * IDE fix and CF emulation * some small Android fixes and new arrow key derotation workaround * UI sliders used for more settings (video area/shift options) * several command line options renamed to be more intuitive (see the USAGE) * automatic detection of host screen aspect ratio * added option for disabling OpenGL Pixel Buffer Objects * added option for enabling video synchronization with vertical retrace * added option for selecting pixel format in OpenGL * now saves the Show Speed/Disk Activity/Sector Counter in the settings Version 2.2.0 (2011/04/02) ========================== Another update after two long years. A lot of changes and major improvements: New features: ------------- * SDL features synchronized sound (GTIA+POKEY digisounds play properly now) * SDL display enhancements (hardware accelerated using OpenGL) * DirectX display enhancements (also hardware accelerated) * Improved NTSC and PAL colours (presets: Standard/Deep Black/Vibrant) * Austin Franklin 80 Column card * Emulate the Alien Group Voice Box I and II * Added support for F12 turbo mode. * IDE emulation (compatible with MyIDE) * New Android port by Kostas Nakos (available in the App Market already) * Auto frame skip for slower devices (currently enabled for Android only) Fixes: ------ * trak-ball (cx22) emulation fixed * SDL: leftmost column missing in 16/32bpp fixed * DirectX default for Win32 SDL SDL Display enhancements: ------------------------- 1. Fullscreen resolution - this gives a list of all available resolutions from which a user chooses one. The default resolution is the next-bigger-than 336x240. 2. Fullscreen: yes/no - obvious. Window size is independent from the chosen fullscreen resolution and can be changed by resizing the window. 3. Rotate sideways: yes/no - rotates the screen by 90 deg. Works as earlier, ie. only for "standard" display (no NTSC filter, no 80 column card). 4. Stretch - this option controls how display stretching (scaling) is performed. We can select one of: a) none - no stretching at all b) integer multiples (default) - width and height will be resized by 1x, 2x, 3x etc. c) full - stretching is unrestricted, display will cover the entire screen. 5. Keep aspect ratio - this option controls how the display's aspect ratio is corrected. 3 options available: a) disabled - no aspect ratio correction, display will fill entire screen/window, b) 1:1 (default) - width and height will be multipled by the same value c) like real TV - display will be resized to reflect pixel aspect ratio of a real Atari connected to a TV. Atari pixels are not square; pixel width-to- height ratio is about 0.857 for NTSC and 1.039 for PAL. This option reflects that. 6. Host display aspect ratio - here the user enters aspect ratio of his monitor. This value is used to properly compute display aspect ratio when "Keep aspect ratio" is set to "like real TV". Set it to 4:3 (default), 16:9, 1.78:1 etc. 7. Horizontal view area - this option sets the size of Atari screen area visible horizontally. Choose one of: a) narrow - 320 columns wide, b) normal (default) - 336 columns wide, c) full - 384 columns d) custom - lets the user enter any value between 160 and 384. 8. Vertical view area - similar to above: a) short - 200 lines high b) normal (default) - this setting is TV-system-dependent. In PAL this makes all 240 lines visible, while in NTSC top and bottom 8 lines are hidden, which leaves 224 lines visible. I've made this as such because apparently on NTSC TVs not all 240 lines are visible. The value of 224 was taken by taking full NTSC height (480, divided by 2) and cutting top and bottom 3.5% (different sources say 3.5% is the "action-safe" overscan area). c) full - 240 lines high d) custom - any value between 100 and 240. 9. Horizontal offset - when amount of columns displayed is less than 384, this option "shifts" the visible screen area. Setting to higher than 0 shows more of the right side, and lower than 0 shows more of the left side. 10. Vertical offset - similar to above. Additionally, the Alt+Shift+X shortcut that switches beetween standard<->80 column display is now also available as "Display settings->80 column display if available: yes/no". The Alt+B switch however has been removed - since setting black/white colours can be done in Display settings anyway. All new options are also available from command line and are saveable in configuration. New Android port features: ------------------------- - Efficient performance - Uses Opengl ES to handle scaling of the graphics - Runs on Android 1.6+ - Novel on screen touch joystick control for less hand cramps & intuitive control - Supports multi touch input - Supports hardware keyboard with key remapping for joystick input - Supports the Wii Controller for joystick input - Supports the "move to SD" feature - Sound emulation very good but not perfect yet - Bypasses the emulator UI menu completely - goes 'the android way' about it - Available in the App Market: market://details?id=name.nick.jubanka.atari800 Version 2.1.0 (2009/03/27) The promised completely new next-gen Atari800 was postponed so this is another incremental update of the good old Atari800. Let's see what we have added and improved in the last 20 months: New features: ------------- * added Axlon and Mosaic RAM expansions for Atari 400/800 * added emulation of 1400XL, 1450XLD, MIO and Black Box * added support of .PRO copy-protected disk images * implemented tape loading with variable bitrates * implemented cassette writing via hardware registers * added switching between NTSC and PAL color palettes * added emulation of XEP80 and a prototype 80 column card for the Atari 1090 (SDL only currently) * added emulation of CX85 numeric keyboard (Java and SDL only) * event recording added (-record, -playback): save your game walkthrough using the "-record mygame.dat" and later impress your friends by your game skills or highest score using the "-playback mygame.dat" * NTSC Filter option added to UI * -directmouse added to SDL and X11 (used for -mouse pad or koala) * monitor supports arrow keys - e.g. up-arrow for history * SDL: interpolated scanlines (use -scanlinesnoint to disable) * SDL: added -mouse, -mousespeed, -grabmouse (also Alt+M) * SDL: visual configuration of keyboard joysticks layout in the UI (F1 -> Controller Configuration -> Define layout) default mapping changed to 4,8,6,5 (joy0) and A,W,D,S (joy1) * R: device can be serial-only, network-only or both (selectable) * R: device now supported on MS Windows and Dreamcast as well * a completely new port to Java using NestedVM, running also as an applet * Falcon/TT: removed Devpac dependency in asm files (now gcc friendly) Fixes: ------ * fix for "Ilusia" demo * better GTIA bug mode emulation * POKEY sound: nonlinear mixing (not enabled by default), two-tone filter * fixed POKEY registers: ALLPOT, IRQEN and STIMER * various Atari5200 fixes * fixed Atrax cartridge bank switching * fixed sound recording to WAV * -showspeed fixed, now shows speed <= 100% correctly * major source code cleanup, compiles with -pedantic etc. * Save State: added support for Axlon and Mosaic (version increased to 5), fixed PBIM12 restoring, fixed PAGED_MEM error with POKEY, color palette restoring fixed * SDL: using DirectX driver on MS Windows (much faster), fixed stdout.txt on MS Windows, fixed broken Caps Lock key handling, -audio16 fixed * Dreamcast recognizes the TAB key * MS-Windows: Shift+Control fixes * dropped SVGAlib target - use SDL instead Thanks to Perry McFarlane and other developers for their contributions to this release. Enjoy Atari800! Version 2.0.3 (2007/07/11) This is probably the last release that is based on the source code written by David Firth back in previous century. A completely new Atari800, written from scratch, with even better portability and maintainability is being planned so stay tuned! Changes: -------- * new style of artifacting * corrected PMG in bizarre ANTIC/GTIA modes * added 128 KB SpartaDOS X cartridge type * added support for QVGA landscape smartphones, added the virtual keyboard * new command-line option "-win32keys" for keyboard layouts different from US * MS-Win: run the emulator in a window ("-windowed" on the command line) * middle button support for ST and Amiga mice in X11 and MS-Win targets Version 2.0.2 (2006/04/08) There is a new NTSC emulator available thanks to Blargg (Shay Green) (http://www.slack.net/~ant) and NewRisingSun who made the original algorithm. You can access it with -ntscemu in the SDL port only. Only 640x480x16 is supported and will be invoked automatically. You will need a fast processor (~700 MHz or so). This code should be considered experimental but I hope you will try it and report any problems. Please experiment with the many settings and compare them with a real NTSC Atari if you have one. If you come up with better settings than the current defaults please provide feedback. Try -ntsc_burst 0.70 in Drol, Choplifter and Ultima. Please read DOC/USAGE and check -help. Changes: -------- * Blargg's NTSC composite video emulator, based on NewRisingSun's Algorithm. * small fixes in ANTIC/GTIA emulation * fixed DCM image handling (broken in 2.0.0) * added emulation of Atari XL/XE with 192 KB RAM * integrated SEGA Dreamcast port * Atari Inverse key mapped also to "`" (backquote) in SDL port (MS Win users) * some minor improvements * much more DOC/TODO Version 2.0.1 (2006/01/02) Just a quick UI bugfixes release. Version 2.0.0 (2005/12/31) - celebrating decade of Atari800 development! This release brings major source code clean up, numerous bug fixes and many great new features and important improvements. 98% of changes since last release have been made by Piotr Fusik - admire his dedication to Atari800 project while you will be browsing through the impressive list of changes below. Run-time configuration (via the .atari800.cfg file) has been improved. All configuration options are now available in the User Interface. Remember to use "Save configuration file" when necessary. If you are new to Atari800, press F1 and select "Emulator Configuration" to configure the ROM images. This can be easily done with "Find ROM images in a directory". DISK_DIR, ROM_DIR, EXE_DIR and STATE_DIR configuration options are no longer supported in this version. You need to re-select your directories using "Emulator Configuration" -> "Configure directories". Changes: -------- * auto-starting any file supported by the emulator via the command line, User Interface or Alt+R * direct loading of Atari Basic programs: - SAVEd (*.BAS) programs - LISTed (*.LST) programs with auto-detected Atari, LF, CR/LF or CR line terminators * numerous fixes and improvements in H: device emulation * fixed a bug in DMACTL emulation * cycle-exact Read-Modify-Write instructions for all GTIA registers * Atarimax cartridges * correct emulation of the RESET key in 400/800 (it generates RNMI) * improved DCM format support * improved PERCOM emulation (helps non-standard disk images) * removed questions that appeared in the console window when no configuration file was found; now a default configuration is written and you can modify it using User Interface; the easiest way to configure ROMs is "Find ROM images in a directory" which looks for common names of ROM images * DISK_DIR, ROM_DIR, EXE_DIR and STATE_DIR configuration options replaced with ATARI_FILES_DIR and SAVED_FILES_DIR * sound recording now works (was completely broken) * new in User Interface: "Emulator Configuration", "Controller Configuration", "Save Interlaced Screenshot", "Uncompress Disk Image" * improved "open file" selector: - sorts case-insensitively - sorts directories whose name begins with a dot - starts on the previously selected file - you can move to a file by pressing its first letter (works in menus, too) - path of the listed directory is shown at the top of the screen * improved "save file" filename selection: - no longer limited to 32 characters - directory appears in the edit box - Tab invokes directory browser * "Make Blank ATR Disk" creates standard Single Density disk image * shortcut keys (Alt+letter, F9, ...) work in User Interface * new "-screenshots " command-line option * replaced "-rtime " with "-rtime" / "-nortime" * replaced "-hdreadonly " with "-hreadonly" / "-hreadwrite" * new monitor commands: "LABELS", "LOOP" * "C", "M" and "S" monitor commands support hardware registers * improved "SHOW", "DLIST", "D" and "A" monitor commands * fixed memory leaks, buffer overflows, Y2K and Y2100 bugs * fixed GCC 4 compilation error and warnings * fixed sound in X11 version (feedback is welcome) * much faster display in the X11 version * MOTIF and XVIEW versions are now compilable * standard key mappings for F6-F10 in DirectX, SDL, SVGALIB and X11 versions * implemented Atari 5200 keys in DirectX, SDL, SVGALIB and X11 versions * WinCE version ported to Smartphones * DirectX version can be compiled with MSVC 6 * stereo now works in DOS ports * fixed "-rotate90" and Alt+B in SDL version * greatly improved BASIC version: - supports sound - supports all interrupts - timing much closer to real Atari - Clear Screen, Backspace, Tab and Bell converted from ATASCII to ASCII - improved "K:" input - much smaller executable (does not include unused code) * greatly improved CURSES version: - support for PDCurses - small fix for NCurses - generates screen basing on the Display List - fixed Tab, Backspace, Insert, Delete, Home, F2, F3, F4, F8 and Ctrl+letter - fixed "-wide2" mode - Alt+letter shortcuts work on PDCurses - bitmap graphics emulation is now disabled by default (smaller and faster executable), but can be enabled with "configure" * new experimental PlayStation 2 port * improved "configure" script * SDL keyboard joysticks can be enabled/disabled in the UI (Controller Config) * many small fixes and major source code clean up Version 1.3.6 (2005/04/30) Changes: -------- * different color palette used by default * PNG screenshots added * added sector counter and speedometer * F6 is Atari HELP key on Curses, Falcon and in X11 * added missing combinations of ANTIC modes with GTIA modes * keyboard joystick works in more games (doesn't pause the game) in SDL * mouse joystick emulation works in X11 * cassette loading by hardware registers (Ninja and Elektraglide are examples of games that load correctly now) * blank boot ATR disk image can be created in the Disk Management menu * many small fixes and major source code clean up Version 1.3.5 (2004/12/30) Changes: -------- * keyboard handling improved in SDL (working on non-US layouts, more keys recognized) * keyboard handling improved in X11 (crash fixed, auto-repeat working) Version 1.3.4 (2004/12/27) Changes: -------- * security fixes (buffer overflows) and compilation errors (GCC 3.4) * ANTIC timing fix for Timeslip game * fix in UI fileselector (crashed if there were no files) * Amiga port updated Version 1.3.3 (2004/08/08) Changes: -------- * ANTIC mode 2 + GTIA mode 10 - half pixel shift fix * Amiga port updated * OS/2 port updated * DOSVGA port updated - joystick definition read again * X11 port has improved keyboard support (Ctrl+Pause, left Ctrl for joy button) * SDL port updated: joysticks emulated on keyboard can be freely edited now with SDL_JOY_0_ and SDL_TRIG_0 (same for JOY_1/TRIG_1) config file parameters that expect values from SDL keySyms. Version 1.3.2 (2003/12/20) Highlights since previous release: ---------------------------------- * R: can now be hooked to a real serial port (no runtime config yet) * various ANTIC and POKEY fixes for perfect software compatibility * disk and cartridge info saved in the state files * casette handling greatly improved * even more cartridges supported (40 now!) * some rare buffer overflows fixed Version 1.3.1 (2003/09/04) Highlights since last 1.3.0 release: ------------------------------------ * rewritten and much improved configure script * new cartridge types supported (38 types now!) - see DOC/cart.txt * Disk Sets - loading and saving of D1-D8 set is possible in the UI * R: as the Atari850 serial port emulation added - see DOC/r_device.txt * updated and improved m68k assembler emulation of the CPU * XF551 HighSpeed transfer emulation added Version 1.3.0 (2003/02/10) Highlights since last 1.2.5 release: ------------------------------------ * new HiFi sound (you may en/disable it in the UI) * new cycle-exact Antic emulation * "H:" emulation complete (including subfolders) * Paged memory implementation (fast XE bank-switching) * new configuration file name and location ($HOME/.atari800.cfg) Detailed list of changes follows: * configuration file ("atari800.cfg") related changes: 1) configuration file is renamed to ".atari800.cfg" by default (note the leading dot in the name, similarly to most other configuration files of programs on Unix platforms). On DOS/TOS (FS 8+3 limitation) the old "atari800.cfg" will be supported. 2) RT-Config (the module in Atari800) tries to search the configuration file in user's home folder first (environment variable HOME should point there). If it's found then it's used. If it's not there then RT-Config tries to open system wide configuration file (by default it's "/etc/atari800.cfg"). Please note that the system wide file is not updated by Save function of RT-Config because it's expected that this file is read-only for regular user. 3) RT-Config can also be told where your configuration file is by using the "-config " command line parameter. If the file is not there yet it's created. So it's quite easy to let Atari800 create a test config file and compare it with your current config or to have several config files for various game/demo/application uses of the Atari800 emulator. 4) Some config file options were renamed or otherwise changed some time ago already but they were still recognized. This is no longer true so better create a new config file from scratch. 5) There are two new important switches - "ENABLE_NEW_POKEY" and "STEREO_POKEY" so better create new config file so you get these options configured properly. * new Sound: The new MZ POKEY emulation is now enabled by default on all ports. Also the STEREO sound (Dual POKEY) is compiled in by default but is not enabled (so there's a single POKEY by default but you can enable the second one very easily in the User Interface (press F1). Both can be en/disabled in the configuration file (call atari800 with the "-configure" parameter to reconfigure these and other options). Win32 and SDL ports also recognize a new cmdline switch "-audio16" that switches to 16-bit sound. Unreleased version 1.2.10 (2003/02/09) * autoconf 2.5x required for building the source fetched from CVS. However, released source code comes with prebuilt configure script so you shouldn't even notice this change. * SDL version contains the same keyboard IRQ fix that was recently done in the general input core. In human language: Super Pacman 5200 will not crash after SHIFT and * keypress. * On-the-fly change of POKEY emulation core (old Ron Fries' or new Michael Borisov's). Compare the new HiFi sound with the previous one. Unreleased version 1.2.9 (2003/01/27) * New cycle-exact ANTIC/GTIA emulation. Enabled by default, disable by ./configure --disable-cycleexact Unreleased version 1.2.8 (2003/01/27) * Paged memory implementation finished. Disabled by default, enable by ./configure --enable-paged Unreleased version 1.2.7 (2003/01/27) * Harddisk emulation now complete including support for subdirectories. Unreleased version 1.2.6 (2003/01/27) * New sound core and 16 bit sound support -- high sound quality but slower. Use -audio16 option to enable 16 bit sound and -quality to set sound quality (level > 0 enables new sound core) on the win32 port. Consult port specific doc for command line details. Version 1.2.5 (2002/12/02) * UI - the SpaceBar in disk management switches between the RW and RO flags (this didn't work for a long time, now fixed). Please note that this RW/RO switch is just temporary and does not change the writeprotect flag of ATR images. Besides, it cannot override this flag so you actually can't mount a writeprotected ATR image read/write using this Space Bar toggle. * Atari800 compilable under OS/2 * MultiJoy4 interface and Amiga/AtariST right mouse button supported * 13 new cartridge types supported * ANTIC mode E + GTIA mode 9 added (used in "Unconventional 2k", "Ass Kisiel") Version 1.2.4 (2002/08/07) * 576 and 1088 kB RAM supported (selection available in the UI) * separate Antic access to extended memory for 130 XE and 320 Compy Shop * 256K and 512K XEGS carts * SDL version now - cleans up after unsuccessful initialization - supports "-nosound" and "-dsprate" - continues to run even if sound initialization failed * command line options "-help" and "-v" ("-version") now work better in most supported ports. Version 1.2.3 (2002/07/08) * 16 kB RAM machines (Atari 400/600XL) emulated * LPTjoy support added to the SDL port * SDL port is generally much improved. To get list of SDL specific options start the SDL version of Atari800 with -help. * casette image loading accessible from UI * -palette option (for loading an alternate ACT color palette file) fixed. * channel 1 in stereo mode fixed * antic: NMIST bit 5 fixed (is always zero) * input: second button in 5200 joystick generates "Break key" IRQ (you can now jump in "Moon Patrol" - use Shift) * monitor: "DLIST" now accepts address as an argument * antic: Dirty update scheme that allows slower machines to run Atari800 at full speed now! See DOC/HOWTO-DIRTYRECT for more information. * pokey: allow high-speed disk i/o (Alpha-Load works, thanks to Paul Irvine) Version 1.2.2 (2001/12/31) * Falcon .s files had to be renamed to .asm, otherwise the vga port could not be built. Version 1.2.1 (2001/12/31) * serious memory overflow bug fixed (caused crashing of X11 port and probably also other unexpected bugs or problems) * joysticks in SDL port fixed and improved. * RPM's .spec file fixed. Version 1.2.1pre0 (2001/12/17) * Falcon port configurable and buildable again * SDL support for 32-bit display, screen width switching (LALT+g) * documentation updated (still can be much improved :) * util/ folder contains new sethdr and act2html utilities * configure process is non-interactive (doesn't ask any questions) * RPM .spec file for easy building of Atari800 from source .tar.gz Version 1.2.0 (2001/11/29) * completely new SDL port (use ./configure --target=sdl) that should run on most/all platforms/OSes SDL supports (http://www.libsdl.org/) * completely new WinCE port *** New features: * support for Express, Diamond, SpartaDOS X, XEGS, Action!, BASIC XL and other cartridge types (see cart.txt for complete list). The "-cart" option runs CART files and all types of raw images. "-rtime 0" disables emulation of R-Time 8. Thanks to: - Jindroush, who described most of the cartridge types - Nir Dary, for information on 8*8 KB D50x and OSS 'M091' cartridges * mouse can emulate following devices (in parentheses the option that enables emulation): - paddles (-mouse pad) - Atari Touch Tablet (-mouse touch) - Koala Pad (-mouse koala) - Light Pen (-mouse pen) - Light Gun (-mouse gun) - Amiga mouse (-mouse amiga) - Atari ST mouse (-mouse st) - Atari Trak-Ball (-mouse trak) - joystick (-mouse joy) For Atari 5200 you can use "-mouse pad" (good for Gorf and Kaboom) or "-mouse joy" (good for Missile Command and Super Breakout). Use "-mouseport <1-4>" to select the Atari port. Use "-mousespeed <1-9>" to select speed (default is 3). * cassette recorder emulation! (experimental) Currently only reading works and only with SIO patch. Supported are: - CAS files - the digital cassette image format by Ernest Schreurs. The format handles different lengths of blocks, gaps, non-standard blocks, baud rates and more. See http://home.planet.nl/~ernest/home.html for the excellent WAV2CAS converter, which includes detailed description of the format. Atari800 supports the format only partially at the moment. - raw files - any file can be attached, as if it has been written to the C: device (standard Atari OS format). No UI available yet. Attach a file with "-tape filename" or "-boottape filename" (emulator presses Start and Space to boot the tape). * SIO, H: and P: patches are now independent and can be toggled at run-time * the H: device no longer replaces C:. The H: device is now added to HATABS in RAM, and the escape codes are put in 0xd100-0xd1ff, so H: doesn't modify Atari OS at all. * "-basic" and "-nobasic" work for Atari 800 (Atari BASIC is attached as a cartridge in Atari 800) * devices: added open mode 9 (append) for H: device * input: the illegal joystick positions (e.g. left+right) are not passed to the emulated Atari (good for "Mario Bros.") * monitor: - "C 600 ABCD" does the same as "C 600 CD AB" - 1 KB boundary is respected by "DLIST" - "POKEY" command - "S" without parameters repeats last search * ui: added Atari Settings (enable/disable BASIC, R-Time 8, SIO patch, H:, P:) *** Compatibility improvements: * antic,gtia: the background color can be changed inside a scanline. Currently implemented only for blank lines without PMG. Try the "Partyland" part of the "Bitter Reality" demo. * antic: corrected timing of DLISTL/H ("Spelunker" works) * binload: 0x31 stored at 0x300 ("Studio Dream" loads now) * cpu: Read-Modify-Write (RMW) instructions (ASL, INC, etc.) store the unmodified value of $D01A before they store the modified value. Now you can see the white dots made with INC $D01A. * cpu: on reset, the I flag is set (now reset works if stuck in interrupts) * devices: replaced "dGetByte(0x2e)" with "regX" in H: handler routines (fixes problems with Atari BASIC's GET/PUT/INPUT/PRINT) * pia: & 0x3f on read PACTL and PBCTL * pokey: potentiometers emulation improved: POTGO and ALLPOT registers and bit 2 of SKCTLS implemented, "Tree Surgeon" no longer hangs * pokey: true RANDOM emulation (both 9- and 17-bit poly) ! Not using rand() anymore. Try the "Bank Bang!" game. * pokey: fixed STIMER (speech in "Mirax Force" is better, but still not perfect) * pokey: a few fixes for stereo detection routines (helps "Sheol", "Total Daze", "Crockett's Theme"...) * pokey: fixed SERIN ("Timeless Announcement" loads now) * pokeysnd: added exact poly9_lookup and poly17_lookup, removed bit17 (which was initialised with rand()) saving ca. 100 KB of memory. Do you hear any difference? * sio: made double density ATR images compatible with SIO2PC *** Bug fixes: * cpu: fixed wrong extern * devices: fixed Device_isvalid (problems with trailing 0x9b) * rtime: added "byte &= 0x0f" to prevent out of bounds accesses to regset[] * sio: corrected and added checks if drive number is in range 1-8 * sio: Format Disk rewritten. Now it can resize both ATR and XFD images. The ATR header is being updated. Double density format works. *** Optimizations: * antic: optimized ANTIC_Load and character modes * atari_vga: no unnecessary Atari_DisplayScreen() calls if "-refresh" is used * cpu: slight optimization of ROL and ROR * gtia: optimized players in new_pm_scanline *** Clean-ups in sources (for programmers): * created cartridge.[ch] and rtime.[ch], removed supercart.[ch] * created input.[ch] to handle keyboard, joysticks and mouse * removed enable_rom_patches, added enable_h_patch and enable_p_patch. Original OS is saved in atari_os. Removed SetSIOEsc() and RestoreSIO(). After changing enable_*_patch call Atari800_UpdatePatches(). * replaced following variables: machine, mach_xlxe, Ram256, os, default_system and enable_c000_ram with only two: machine_type and ram_size (ram_size is in kilobytes, and there're #define's for 320 Rambo/Compy). There are no more Initialise_Atari... routines. Instead, set machine_type and ram_size and call Atari800_InitialiseMachine(). * moved main() to platform-dependent code, created Atari800_Initialise and Atari800_Frame * removed i386 asm tricks * diskled: rewritten to be cleaner and more flexible * pokey: SKSTAT variable renamed to SKCTLS to avoid confusions (it's the write-only, not the read-only Pokey register) * pokeysnd: removed duplicates of Pokey constant definitions and AUDC/AUDF/AUDCTL variables, included pokey.h Previous changes (pre 1.2.0) are in the CHANGES.OLD file. atari800-5.0.0/DOC/PORTING000066400000000000000000000211331425067567700145410ustar00rootroot00000000000000How to port Atari800 to new platforms ===================================== This is a guide for people who intend to create a new version of Atari800 for their computer or operating system (called "target system" throughout this document). Prerequisites ------------- The target system must have a raw computing power at least comparable to a Pentium 100, otherwise the emulator will run slower than the original 8-bit Atari. Other hardware requirements are usually easier to fulfill: a few megs RAM, a few megs disk space, a display, some keys and an audio output. You should have a working compiler of the C programming language for the target system. The compiler, however, can run on another system (such as PC), which is called cross-compiling and is common when developing for small devices. You should understand at least the basics of programming in C. The more you know, the better. Getting started --------------- Try compiling an existing version of Atari800 for a system different from your target system, just to learn how this works. See the INSTALL file for instructions. Try compiling something for your target system: a "Hello world" program or (preferrably) a game. In case of problems, ask people who develop for your target system. If you are not an expert of programming the target system, get in touch with more experienced developers, as you may need their advice sooner or later. Compile-time configuration -------------------------- Before you start feeding your C compiler with *.c files, you need a file named "config.h". This file specifies the system to compile for, the C library functions that are available and features to include. There are two methods of creating this file: manually and using the configure script. Using the configure script is recommended, because it makes your port easier to maintain for people who have never seen your target system. Yet if you find it too hard to use the configure script, go on with editing config.h by hand and consider using the configure script later. The configure script is works well on Unix and GNU/Linux systems, but can be awkward to use on Windows, especially if you use an Integrated Development Environment and not command-line tools. The configure script is the file named "configure" that should be run by a Unix shell program such as "bash". The file is hardly human-readable. It is generated from the source file "configure.ac" by a tool called "autoconf". Another tool "autoheader" turns "configure.ac" into "config.h.in", which is a template for "config.h" used by "configure". "autogen.sh" is a shortcut that simply runs "autoheader" and "autoconf". If you opt to edit "config.h" by hand, make a copy of "config.h.in" under the name "config.h" and edit it changing some #undef's into #define's. Consult the comments and other config.h files created this way, in "dc", "win32/msc" and "wince/port" directories. Compiling for the first time ---------------------------- Try starting with something simple. Disable sound emulation, either by passing "--without-sound" to the configure script or by #undef'ing sound items in "config.h". The easiest way to start is to compile a "simple" version of the emulator, that does not use any external libraries/interfaces for emulation of video, audio and input, and uses only standard C library functions. With the configure script you specify "--without-video --without-sound". If editing "config.h", "#define BASIC 1" and figure out which files to compile. The "simple" version does not support graphics or joysticks and has a very limited keyboard input. Most likely it will appear as a blank screen when run. That's fine. Edit the runtime configuration file providing paths to Atari ROM images and change "DISABLE_BASIC" to "0". If you're lucky, you'll see the "READY" prompt of Atari BASIC. Implementing platform-specific part ----------------------------------- Create a new source file with your platform-specific code. You have several examples to copy-and-paste from. The entry point to the program normally looks like this: int main(int argc, char **argv) { /* initialise Atari800 core */ if (!Atari800_Initialise(&argc, argv)) return 3; /* main loop */ for (;;) { key_code = Atari_Keyboard(); Atari800_Frame(); if (display_screen) Atari_DisplayScreen(); } } You need to implement functions specified in "platform.h". These functions should display graphics on screen and read keyboard and joysticks/mouse in a platform-specific way. Graphics -------- Atari_Initialise() is the function that does platform-specific initialization. You may need to switch the graphics mode in this function. Atari_DisplayScreen() should update the screen with the contents of the atari_screen array. atari_screen is declared in screen.h as (ULONG *), but it is really a pointer to a rectangular array of bytes. There are 240 (ATARI_HEIGHT) rows, 384 (ATARI_WIDTH) bytes each. While there are exactly 240 rows to display, only 336 middle columns of the 384 are meaningful. Do never display more than 336 middle columns! Although the remaining columns may appear black when you start the emulator, there's no such guarantee when the emulator is running. It is fine to display only 320 middle columns if that's easier for you than 336. You can also crop the Atari graphics from the top and the bottom, because most programs use just the 192 middle lines. If your display has considerably lower resolution, you need to provide your own bitmap rescaling. Bytes in atari_screen[] are Atari color codes (0-15 = shades of gray, 16-31 = shades of brown/yellow, etc). 8-bit Ataris have a fixed palette of 256 colors. You can get 8-bit RGB components of Atari colors with the macros Palette_GetR(code), Palette_GetG(code) and Palette_GetB(code), defined in "colours.h". Keyboard input -------------- There are three variables that are read by the emulation core and should be set by your platform-specific code: int key_code; int key_shift; int key_consol; key_code is the Atari scancode of the currently pressed keystroke, or one of the emulator-defined special values, such as AKEY_NONE, AKEY_COLDSTART, AKEY_BREAK, etc. Atari scancodes are 8-bit values with 6 low bits containing the code of a regular key and two high bits reflecting the status of Shift and Control modifiers. See input.h or some Atari documentation for details. Codes that are special to the emulator are AKEY_NONE (which means no key pressed, or just the Shift or the Control) and AKEY_* values defined in "atari.h". key_shift should be TRUE when any Shift key is pressed, FALSE otherwise. In 8-bit Atari world the term "console keys" refers to the three function keys (Start, Select and Option) commonly used in games. The keys are independent of each other and of all other keys. The state of each console key should be reflected by one bit in key_consol (cleared if the key is pressed). See "input.h". Joystick input -------------- Four Atari joysticks are emulated, but few Atari games support more than two. Each joystick has one fire button. Your Atari_TRIG() is passed the joystick number (0-3) and should return 0 if the corresponding fire button is pressed and 1 if it's not. The joysticks are "digital", that is, they can be moved in one of 8 directions from the center position. Joystick positions are passed in a bit obscure way. Atari_PORT(0) should return the position of joysticks 0 and 1, Atari_PORT(1) - the position of joysticks 2 and 3. The returned values are 8-bit, four bits per joystick. The acceptable values of the four bits are defined as STICK_* constants in "input.h". Mouse input ----------- Nearly all Atari programs are controlled by keyboard or joysticks. Other controllers were much less popular. However, it is easy to support them in your version of Atari800. Paddles, touch tablet, light pen and other devices can be emulated by a pointing device such as mouse. In the main emulation loop your code should update the variables mouse_delta_x, mouse_delta_y and mouse_butons. mouse_delta_x and mouse_delta_y are *relative* positions, that is, how far the mouse was moved since last time. mouse_buttons is composed of 3 bits that represent left, right and middle mouse button (1 = pressed). To test mouse input, select "Light pen" as the emulated device and press right mouse button to enable the mouse pointer maintained by the emulator. Final words ----------- That's the end of this guide. I hope it's useful for developers new to Atari800. Suggestions about what to add or improve are welcome. If you are serious about porting Atari800, please join our mailing list. See the documentation or the web page for details. Happy hacking! Piotr Fusik November 5, 2006 atari800-5.0.0/DOC/PortMaintainers000066400000000000000000000024551425067567700165440ustar00rootroot00000000000000Who does build the binaries for Atari800 releases? ================================================== The regular binaries for Linux (curses, SDL and X11) distributed in RPM and Debian packages and available at Sourceforge.net for download are built by me (Petr Stehlik). Official Debian package is built by Martin Albert The following guys should build the binary for the other port/platform/OS: Port (platform, OS): Maintainer: ----------------------+----------------------------------------- DOS James Wilkinson BeOS James Wilkinson Win32 James Wilkinson WinCE, Android Kostas Nakos Mac OS X Mark Grebe Atari Falcon/TT Petr Stehlik OS/2 *BSD Amiga Sebastian Bauer Sega Dreamcast Christian Groessler JVM Perry McFarlane If there is a volunteer for any of the above listed ports or if there is another port working that I didn't list then please contact me at . This document was created on 2003/02/11 and last updated on 2011/02/06. atari800-5.0.0/DOC/README000066400000000000000000000132561425067567700143630ustar00rootroot00000000000000 Free and portable Atari 800 Emulator for everybody, Version 5.0.0 ----------------------------------------------------------------- Copyright (C) 1995 David Firth. E-Mail: david@signus.demon.co.uk Copyright (C) 1998-2022 Atari800 Development Team. http://atari800.github.io/ 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, or (at your option) any later version. This is the emulator of Atari 8-bit computer systems and the 5200 console for Unix, Linux, Amiga, MS-DOS, Atari TT/Falcon, MS Windows, MS WinCE, Sega Dreamcast, Android and systems running the SDL library. Our main objective is to create a freely distributable portable emulator (i.e. with source code available). It can be configured to run in the following ways :- 1. "simple" version (many platforms) - uses only the standard C library 2. curses (many platforms) 3. X Window + Optional XVIEW or MOTIF User Interface 4. CBM Amiga 5. MS-DOS (DJGPP) 6. Atari Falcon/TT and compatible machines 7. MS Windows (DirectX) 8. SDL (running on _many_ platforms) 9. WinCE 10. Sega Dreamcast 11. JVM (Java applet) 12. Android 13. Raspberry Pi 14. libatari800 (platform independent) - the emulator core as a library The "simple" version is only useful for running programs such as MAC65, Atari BASIC etc. I have had this version running on Linux, SunOS 4.1.3, Solaris 2.4, Silicon Graphics, VAX/VMS, CBM Amiga (Dice C and GNU C), DOS/DJGPP and the HP-UX 9000/380. When using curses, the emulator is similar to the "simple" version, but it also enables full screen editing capability. Some computer don't seem to support curses fully - SunOS 4.1.3, VAX/VMS, LINUX (but ncurses is OK). The X Window version supports graphics and has an optional XVIEW or MOTIF user interface. The Linux X Window version can be built with joystick and mouse support. The Amiga version supports graphics but currently lacks Paddle support. The MS-DOS version supports 320x200, 320x240 and even 320x480 interlaced graphics, sound (SoundBlaster compatible sound cards, 8bit), keyboard, one joystick connected to game port and up to three additional digital joysticks connected to parallel (printer) ports and mouse. The Atari Falcon030/040 version supports 320x240 and 336x240 Falcon/TT 8-bit planes graphics modes, NOVA graphics cards, DMA sound and both joysticks (old CX-40, Atari800 compatible - not the new paddle-like ones). The SDL version should compile on Unix, Win32, BeOS, etc... It's optimized for 8, 16 and 32 color depth. Of course it will work fastest in 8bit. If you use it in XFree86 - please set "Depth=8" in XF86Config to gain maximum speed. Includes support for joystick and mouse. All versions supporting bitmapped graphics have a User Interface implemented on the emulator's "screen". The User Interface is enter by pressing F1 at any time. ESC is used to return to the previous screen. The libatari800 target is designed for embedding in other programs, depends on no external libraries, and has no user interface. It allows the user to calculate successive video frames of emulation, and instead of displaying anything by itself, it provides the ability to access the raw graphics screen and main memory that the user can process as desired. --------------------------------------------------------------------------- Features -------- Note: Not all features are supported on all platforms. o Emulated machines: Atari 400, 800, 1200XL, 600XL, 800XL, 65XE, 130XE, 800XE, XE Game System, 5200 SuperSystem. o Configurable 400/800 RAM size, between 8 and 48 KB. o Optional 4K RAM between 0xc000 and 0xcfff in 400/800 mode. o Axlon and Mosaic memory expansions for the 400/800. o 600XL memory expansions to 32 or 48 KB. o 130XE compatible memory expansions: 192K, 320K, 576K, 1088K. o MapRAM memory enhancement for the XL/XE. o Cycle-exact 6502 emulation, all unofficial instructions. o Cycle-exact NMI interrupts, scanline-based POKEY interrupts. o Cycle-exact ANTIC and GTIA emulation, all display modes. o Player/Missile Graphics, exact priority control and collision detection. o Exact POKEY shift registers (sound and random number generator). o 8 disk drives, emulated at computer-to-drive communication and fast patched SIO levels. o ATR, XFD, DCM, ATR.GZ, XFD.GZ and .PRO disk images. o Direct loading of Atari executable files and Atari BASIC programs. o 59 cartridge types, raw and CART format. o Cassette recorder, raw and CAS images. o Printer support. o Files can be stored directly on your host computer via the H: device. o Current emulation state can be saved in a state file. o Sound support on Unix using "/dev/dsp". o Stereo (two POKEYs) emulation. o Joystick controller using numeric keypad. o Real joystick support. o Paddles, Atari touch tablet, Koala pad, light pen, light gun, ST/Amiga mouse, Atari trak-ball, joystick and Atari 5200 analog controller emulated using mouse. o R-Time 8 emulation using host computer clock. o Atari palette read from a file or calculated basing on user-defined parameters. o Screen snapshots (normal and interlaced) to PCX and PNG files. o Sound output may be written to WAV or MP3 files. o MP3 sound support if libmp3lame is available. o Emulator video and audio may be recorded to AVI files for playback in video players or uploading to YouTube or other online platforms. o User interface on all versions supporting bitmapped graphics. o R: device (the Atari850 serial ports) mapped to net or real serial port. o Recording input events to a file and playing them back o MIO and Black Box emulation o 1400XL and 1450XLD emulation atari800-5.0.0/DOC/README.RPI000066400000000000000000000033061425067567700150070ustar00rootroot00000000000000SYSTEM SPECIFICATION ==================== Atari800 version 4 runs on the following systems: Pi Zero, 2 or 3, running Raspbian or Pi OS Full or Lite, Stretch or Buster. Pi 4 or 400 running Pi OS Full or Lite, Buster. Note that the Pi Zero has only one USB port, so it is necessary to use a hub to provide ports for the keyboard and joystick (and mouse if you are running Pi OS Full). Also, it has no separate audio output, so a monitor capable of playing sound via the HDMI port is required. VIDEO MODE ON PI ZERO, 2 or 3 ============================= You may obtain proper video/audio sync and vsync for PAL/NTSC machines by setting particular video modes. To do this, edit /boot/config.txt For PAL version (50 Hz) you can supply these values: 720p mode: hdmi_group=1 hdmi_mode=19 1080p mode: hdmi_group=1 hdmi_mode=31 For NTSC version (60 Hz): 720p mode: hdmi_group=1 hdmi_mode=4 1080p mode: hdmi_group=1 hdmi_mode=16 See http://elinux.org/RPiconfig for more info. These modes always improve synchronisation but the effect may not be immediately obvious, depending on what you are using the emulator for. The benefit is most clearly seen on scrolling games like Boulderdash where the whole background moves with no hint of flicker. Best results are obtained with widescreen monitors. A narrow monitor such as 1280x1024 will distort the aspect ratio and there are no emulator settings that can be adjusted to bring it back. VIDEO GROUP =========== If you are not logged on as the default user (pi), atari800 may crash on startup and report: * failed to open vchiq instance. To fix this, add yourself to the video group: sudo usermod -a -G video $(whoami) and reboot. atari800-5.0.0/DOC/README.android000066400000000000000000000032731425067567700160000ustar00rootroot00000000000000The Android port of Atari800 is called "Colleen". It is available on Google Play: https://play.google.com/store/apps/details?id=name.nick.jubanka.colleen Kostas Nakos, the principal maintainer of the Android port, has also set up a website with a user manual for Colleen: http://pocketatari.atari.org/android The version on Google Play, and the manual website, are unfortunately rarely updated. Because of that, the maintainers of Atari800 also provide a "debug" APK package of Colleen for Android. The APK package can be downloaded and installed on an Android device manually, after enabling the "Install unknown apps" setting in the device. Search for the APK at the Atari800 downloads page: https://atari800.github.io/download.html Note: If you had installed Colleen from Google Play and want to install the APK from the Atari800 website, you will need to uninstall the app first, otherwise it would not install successfully. Same if you have installed the APK from the Atari800 website and now want to switch to the Google Play version. CAUTION: The APK package provided by the Atari800 website is not signed, and therefore cannot be considered secure. (Also sideloading, i.e. installing apps from outside Google Play, should be generally considered insecure.) Install it on your device only if you really trust the Atari800 team not to put malware in the application. The Atari800 team disclaims any responsibility for any issues caused by Colleen. INSTALL IT ONLY ON YOUR OWN RISK. For instructions on how to build the Colleen APK yourself, see DOC/BUILD.android. "Google", "Google Play" and "Android" are trademarks of Google, LLC, which is not affiliated in any way with this software and its developers. atari800-5.0.0/DOC/README.dc000066400000000000000000000112241425067567700147410ustar00rootroot00000000000000Atari800 for SEGA Dreamcast =========================== Usage ----- The mapping of the connected DC controllers to the Atari joysticks is as follows: The leftmost controller is joystick #1. Then, while going to the right, the next controller is joystick #2. The next one is joystick #3. Joystick #4 is the rightmost controller if all 4 controller jacks are in use. The 1st (leftmost) controller is used to provide the console keys (start, select, etc). The mapping for the 1st controller is as follows (for computers, not 5200): B - START (maps to ESC key while being in the emulator menu) Y - SELECT X - OPTION A - joystick button L - emulator menu R - enter keyboard emulation screen Start - warm boot (reset key) Start + X - cold boot (power cycle) joypad - joystick directions On the other controllers only the joypad and A are used. L and R are mapped to Z and C buttons on the Arcade Stick. While in the emulator menu, pressing Start causes the Dreamcast to reboot. The Dreamcast keyboard is also supported: F1 - emulator menu ESC - leave menu/go back F2 - OPTION F3 - SELECT F4 - START F5 - cold boot (power cycle) F12 - Dreamcast reboot End - HELP Pause - break S3 - Atari key In 5200 mode the A, B, X, and Y buttons of the controllers are redefined: Y - Start key (only the 1st controller) B - 4 (starts some games, " " " " ) X - joystick button #2 A - joystick button #1 In 800 mode up to 4 paddles are supported (only 2 tested by me). A is the paddle trigger. Also in 800 mode, X, Y, and B can be redefined to generate keys from the keyboard. If this is enabled, Option, Select, and Start keys can be entered in the keyboard emulation screen. In order to use paddles, you have to switch on the "Emulate paddles" setting in the "AtariDC Settings" menu. Compiling --------- You will need a SH4 cross compiler and the KallistiOS library (http://cadcdev.sourceforge.net). See the README included in KallistiOS for information on how to build the cross compiler and library. After you have installed the cross compiler and compiled KOS, adapt src/dc/Makefile.dc to your environment. You'll probably have to change the SHBASE and KOS variables in dc/Makefile.dc to point to your compiler and KOS locations, respectively. Then you can build the executable, "atari800.elf". In the atari800 src directory type make -f dc/Makefile.dc to compile it. Use GNU make. CD setup -------- After you have compiled the atari800.elf file, you may want to make a CD image which contains the a8 binary files and disk images you'd like to use. If you don't want to burn a CD, but have a serial, broadband, or lan adapter, then you can use the dc-load tool to transfer the ELF executable to the Dreamcast and run it. The dc-load tool is included in the KOS library. You need to create a CD ISO image, as described below, and use the -i switch to dc-load, to emulate this image over the the dc-load connection. If you create a real CD, there is one more step needed additionally to the steps described below: You need to put the atari800 executable file as boot file onto the CD. For information to create Dreamcast bootable CDs see http://mc.pp.se/dc/cdr.html. Convert the atari800.elf to a plain binary file with something like "sh-elf-objcopy -R .stack -R .comment -R .bss -R .sbss -O binary atari800.elf atari800.bin" and then scramble it. The CD must contain the atari800.cfg file in the root directory. If you use the supplied demo atari800.cfg file, the Atari BIOS ROMS also have to be in the CD root directory. If you don't like this layout, change it and adapt the atari800.cfg file accordingly. Please note that paths in the atari800.cfg must start with /cd to reference the CD, so for a /roms directory on the CD the atari800.cfg entry must be ROM_DIR=/cd/roms. If you like to have a .com/.exe/.atr to be started automatically, copy it into the CD root directory and name it autorun.com / autorun.exe / autorun.atr, respectively. Bugs/ToDos ---------- * There are still sound glitches on some games. * There might be display jitter in scrolling games in NTSC mode. * Run ATRs read-write from vmu. * More than 2 controllers are not well tested. * Improve keyboard support * Mouse support? Help/Problems/Bugs/Suggestions ------------------------------ Please contact me at chris@groessler.org or groessler_christian@yahoo.de. I'm also monitoring the official Atari800 mailing list (atari800-users@lists.sourceforge.net). The newest version is at ftp://ftp.groessler.org/pub/chris/dreamcast/atari800dc Have fun with it, Christian Groessler Last change: 27-Apr-2015. atari800-5.0.0/DOC/README.libatari800000066400000000000000000000440761425067567700164050ustar00rootroot00000000000000ATARI800 AS A LIBRARY ===================== Libatari800 is a build target of the atari800 emulator that produces a static library suitable for embedding in other programs. See the INSTALL file for complete build instructions, but in most cases it can be compiled from the top level source directory using: ./configure --target=libatari800 make This target requires no external libraries and is platform independent. It is also not useful by itself; instead it is designed for developers to embed the emulator into another program. Two sample programs are also compiled (but not installed) that demonstrate the usage of the library: guess_settings and libatari800_test. Using libatari800 to guess emulator settings -------------------------------------------- The demo program guess_settings (source in util/guess_settings.c) attempts to guess the major emulator settings (parameters like machine type, operating system type, and PAL/NTSC) by running the emulator as fast as possible. If a failure is detected (like hitting a BRK instruction, crashing the computer, or entering the memo pad/self-test mode) the failure is noted and the next permutation is checked. If the source image is a cartridge and the cartridge type is unknown, all cartridge types that match the source size are checked in turn. This can greatly increase the number of permutations. A success is determined by the absence of failure conditions in a specified number of frames (default of 1000). The program is built automatically (but not installed) when the compile target is libatari800. It is built in the src directory and can be run from there with: src/guess_settings [options] [name_of_image] For example: $ src/guess_settings test.xex test.xex: 400/800 NTSC OS/B status: OK through 1000 frames test.xex: 400/800 PAL OS/B status: OK through 1000 frames test.xex: 400/800 NTSC Altirra status: FAIL (CPU crash) test.xex: 400/800 PAL Altirra status: FAIL (CPU crash) test.xex: 64k XL NTSC XL ROM status: FAIL (CPU crash) test.xex: 64k XL PAL XL ROM status: FAIL (CPU crash) test.xex: 64k XL NTSC Altirra status: FAIL (CPU crash) test.xex: 64k XL PAL Altirra status: FAIL (CPU crash) test.xex: 128k XE NTSC XL ROM status: FAIL (CPU crash) test.xex: 128k XE PAL XL ROM status: FAIL (CPU crash) test.xex: 128k XE NTSC Altirra status: FAIL (CPU crash) test.xex: 128k XE PAL Altirra status: FAIL (CPU crash) test.xex: 5200 NTSC Atari status: FAIL (CPU crash) test.xex: 5200 NTSC Altirra status: FAIL (CPU crash) Here's an example with an 8k cartridge image, using additional command line arguments to limit the testing to only NTSC XL machines: $ src/guess_settings -xl -ntsc test.rom test.rom: 64k XL NTSC XL ROM status: OK through 1000 frames (cart=1 'Standard 8 KB') test.rom: 64k XL NTSC XL ROM status: FAIL (self test) (cart=21 'Right slot 8 KB') test.rom: 64k XL NTSC XL ROM status: OK through 1000 frames (cart=39 'Phoenix 8 KB') test.rom: 64k XL NTSC XL ROM status: FAIL (self test) (cart=44 'OSS 8 KB') test.rom: 64k XL NTSC XL ROM status: FAIL (BRK instruction) (cart=53 'Low bank 8 KB') test.rom: 64k XL NTSC XL ROM status: FAIL (unidentified cartridge) test.rom: 64k XL NTSC Altirra status: OK through 1000 frames (cart=1 'Standard 8 KB') test.rom: 64k XL NTSC Altirra status: FAIL (self test) (cart=21 'Right slot 8 KB') test.rom: 64k XL NTSC Altirra status: OK through 1000 frames (cart=39 'Phoenix 8 KB') test.rom: 64k XL NTSC Altirra status: FAIL (self test) (cart=44 'OSS 8 KB') test.rom: 64k XL NTSC Altirra status: FAIL (self test) (cart=53 'Low bank 8 KB') test.rom: 64k XL NTSC Altirra status: FAIL (unidentified cartridge) Using libatari800 to generate video frames ------------------------------------------ The test program libatari800_test (source in util/libatari800_test.c) is also built but not installed with the libatari800 compile target. It can be run using: src/libatari800_test It is a very simple example. It boots the emulator into Memo Pad, and after 100 frames of emulation, simulates the 'A' key being pressed and held down to print a bunch of "A" characters on the screen. A simple representation of the screen is displayed as text output to the terminal. LIBRARY OVERVIEW ================ The basic operation of the library is to generate one video frame of emulation, which is equivalent to about 30,000 machine cycles on a 60 Hz NTSC system. The library provides access to the raw screen buffer and other internals like the user memory, but produces no output itself. Any video display, sound output, or for that matter any user interface is left up to the calling program. The library will calculate each video frame as fast as it can, with no delay and no synchronization to any 50/60 Hz signal at all. It is up to the user program to delay the processing of the next frame if real-time operation is desired. This also means that each frame can be calculated much much faster than the real hardware, so for example: simulation tasks may be performed very quickly and the results can be displayed only after all the processing has been completed. Usage ----- The call to libatari800_next_frame is the basic interface to the emulator. It accepts a pointer to a structure input_template_t, which describes user input like the keyboard and joystick state. It performs one full frame's worth of emulation, and returns control to the calling function. The screen array and audio buffer are available at the end of every frame for the calling function to present to the user. The example program libatari800_test shows very simple usage of the library. The basic usage to generate emulator frames is shown in this code snippet:: input_template_t input; char *test_args[] = { "-atari", NULL, }; libatari800_init(-1, test_args); libatari800_clear_input_array(&input); while (libatari800_get_frame_number() < 200) { libatari800_next_frame(&input); if (libatari800_get_frame_number() > 100) { input.keychar = 'A'; } } libatari800_exit(); Note the usage of the test_args array that mimics command line arguments. In the future, libatari800 may provide more direct specification of configuration parameters, but this is not yet implemented. So, currently, libatari800 relies on a valid configuration file to specify the location of the ROM files. By default, libatari800 will scan in the same directories as the normal atari800 program. To provide an alternate location, add the "-config" argument and a path to the file, as in the following:: char *test_args[] = { "-atari", "-config", "/path/to/.atari800.cfg", NULL, }; Advanced usage -------------- In addition to the screen and audio, the entire internal state of the emulator can be examined and even changed between frames. The state save format is used to facilitate this, so it is even possible restore the state of the emulator from save files generated from another atari800 instance. State save files are difficult to parse as the size of the file (and indeed offsets to elements within the file) can change from frame to frame depending on the current state of the emulator or features currently being used. For example, changing the number of disk drives in use or even changing the disk image to point to a different file on the host file system will alter the size of the state save file. To simplify access and prevent the need for parsing the state save file, some offsets into the state save file are created and saved into the statesav_tags_t structure. Each entry in the structure points to the first byte in that section of the state save buffer. For instance, access to the current program counter can be found by: unsigned char state[STATESAV_MAX_SIZE]; statesav_tags_t tags; pc_state_t *pc; libatari800_get_current_state(state, &tags); pc = (pc_state_t *)&state.state[state.tags.pc]; printf("CPU PC=%04x\n", pc->PC); Overview of source code changes ------------------------------- The port-specific code lives in the src/libatari800 directory, but some changes were needed in the main source code directory. The libatari800 port differences include: * the PNG and LIBZ libraries are deliberately excluded for maximal portability; only the system math library is needed * the system monitor is excluded, so any ability stop the 6502 other than at the end of a frame is not available. * the text-based UI to configure the emulator, select cartridges, debug with the monitor, etc. is not included. Everything is left to the calling program. * the crash menu is excluded * some instrumentation of the state save file has been added LIBRARY FUNCTIONS ================= int libatari800_init (int argc, char ** argv) Initialize emulator configuration Sets emulator configuration using the supplied argument list. The arguments correspond to command line arguments for the atari800 program, see its manual page for more information on arguments and their functions. Parameters argc number of arguments in argv, or -1 if argv contains a NULL terminated list. argv list of arguments. Return values FALSE if error in argument list TRUE if successful const char* libatari800_error_message () Get text description of latest error message If the libatari800_next_frame return value indicates an error condition, this function will return an error message suitable for display to the user. Returns text description of error void libatari800_clear_input_array (input_template_t * input) Clears input array structure Clears any user input (keystrokes, joysticks, paddles) in the input array structure to indicate that no user input is taking place. This should be called to initialize the input array before the first call to libatari800_next_frame. Parameters input pointer to input array structure int libatari800_next_frame (input_template_t * input) Perform one video frame's worth of emulation This is the main driver for libatari800. This function runs the emulator for enough CPU cycles to produce one video frame's worth of emulation. Results of the frame can be retrieved using the libatari800_get_* functions. Parameters input input template structure defining the user input for the frame Return values 0 successfully emulated frame 1 unidentified cartridge type 2 CPU crash 3 BRK instruction encountered 4 display list error 5 entered self-test mode 6 entered Memo Pad 7 encountered invalid escape opcode int libatari800_mount_disk_image (int diskno, const char * filename, int readonly) Use disk image in a disk drive Insert a virtual floppy image into one of the emulated disk drives. Currently supported formats include ATR, ATX, DCM, PRO, XFD. Parameters diskno disk drive number (1 - 8) filename path to disk image readonly if TRUE will be mounted as read-only Return values FALSE if error TRUE if successful int libatari800_reboot_with_file (const char * filename) Restart emulation using file Perform a cold start with a disk image, executable file, cartridge, cassette image, BASIC file, or atari800 state save file. This is currently the only way to load and have the emulator run an executable file or BASIC program without a boot disk image. The atari800 emulator includes a built-in bootloader for these files but is only available at machine start. Parameters path to file Returns file type, or 0 for error UBYTE* libatari800_get_main_memory_ptr () Return pointer to main memory This is actual array containing the emulator's main bank of 64k of RAM. Changes made here will be reflected in the state of the emulator, potentially causing the emulated CPU to halt if it encounters an illegal instruction. Accessing memory through this pointer will not return hardware register information, this provides access to the RAM only. Returns pointer to the beginning of the 64k block of main memory UBYTE* libatari800_get_screen_ptr () Return pointer to screen data The emulated screen is an array of 384x240 bytes in scan line order with the top of the screen at the beginning of the array. Each byte represents the color index of a pixel in the usual Atari palette (high 4 bits are the hue and low 4 bits are the luminance). The large size of the screen includes the overscan areas not usually displayed. Typical margins will be 24 on each the right and left, and 16 each on the top and bottom, leaving an 8 pixel margin on all sides for the normal 320x192 addressable pixels. Note that the screen is output only, and changes to this array will have no effect on the emulation. Returns pointer to the beginning of the 92160 bytes of data holding the emulated screen. UBYTE* libatari800_get_sound_buffer () Return pointer to sound data If sound is used, each emulated frame will fill the sound buffer with samples at the configured audio sample rate. Because the emulation runs at a non-integer frame rate (approximately 59.923 frames per second in NTSC, 49.861 fps in PAL), the number of samples is not a constant for all frames -- it can vary by one sample per frame. For example, in NTSC with a sample rate of 44.1KHz, most frames will contain 736 samples, but one out of about every 19 frames will contain 735 samples. Use the function libatari800_get_sound_buffer_len to determine usable size of the sound buffer. Returns pointer to the beginning of the sound sample buffer int libatari800_get_sound_buffer_len () Return the usable size of the sound buffer. Returns number of bytes of valid data in the sound buffer int libatari800_get_sound_buffer_allocated_size () Return the maximum size of the sound buffer. Returns number of bytes allocated in sound buffer int libatari800_get_sound_frequency () Return the audio sample rate in samples per second Returns the audio sample rate, typically 44100 or 48000 int libatari800_get_num_sound_channels () Return the number of audio channels Return values 1 mono 2 stereo int libatari800_get_sound_sample_size () Return the sample size in bytes of each audio sample Return values 1 8-bit audio 2 16-bit audio float libatari800_get_fps () Return the video frame rate It is important to note that libatari800 can run as fast as the host computer will allow, but simulates operation as if it were running at NTSC or PAL frame rates. It is up to the calling program to display frames at the correct rate. The NTSC frame rate is 59.9227434 frames per second, and PAL is 49.8607597 fps. Returns floating point number representing the frame rate. int libatari800_get_frame_number () Return the number of frames of emulation in the current state of the emulator This is also equivalent to the number of times libatari800_next_frame has been called since the initialization of libatarii800. Calls to libatari800_init, cold starts, and warm starts do not reset this number; it will continue to grow after these events. This value can get reset, however, if the emulator state is restored from a previously saved state. In this case, the number of frames will be restored to the value from the saved state. Returns number of frames that have been generated, or zero if no libatari800_next_frame has not been called yet. void libatari800_get_current_state (emulator_state_t * state) Save the state of the emulator Save the state of the emulator into a data structure that can later be used to restore the emulator to this state using a call to libatari800_restore_state. The emulator state structure can be examined by using the structure member tags as an offset to locate the subsystem of interest, and casting the resulting offset into its own struct. E.g. to find the value of the CPU registers and the current program counter, this code: emulator_state_t state; cpu_state_t *cpu; pc_state_t *pc; libatari800_get_current_state(&state); cpu = (cpu_state_t *)&state.state[state.tags.cpu]; pc = (pc_state_t *)&state.state[state.tags.pc]; printf("CPU A=%02x X=%02x Y=%02x PC=%04x0, cpu->A, cpu->X, cpu->Y, pc->PC); gets the current state of the emulator, locates the cpu_state_t and the pc_state_t structures within it, and prints the values of interest. Parameters state pointer to an already allocated emulator_state_t structure void libatari800_restore_state (emulator_state_t * state) Restore the state of the emulator Return the emulator to a previous state as defined by a previous call to libatari800_get_current_state. Minimal error checking is performed on the data in state, so if the data in state has been altered it is possible that the emulator will be returned to an invalid state and further emulation will fail. Parameters state pointer to an already allocated emulator_state_t structure void libatari800_exit () Free resources used by the emulator. Release any memory or other resources used by the emulator. Further calls to libatari800_* functions are not permitted after a call to this function, and attempting to do so will have undefined behavior and likely crash the program. atari800-5.0.0/DOC/README.ps2000066400000000000000000000011671425067567700150640ustar00rootroot00000000000000This document assumes you are already familiar with the standard atari documentation. INSTALL Information is in DOC/INSTALL.ps2 The following ps2 controller keys are mapped thus: During Emulation: Circle=Enter Cross=Fire Square=spacebar Triangle=UI (user interface) L1=Cold Start R1=Warm Start pad=Joystick start=Atari Start select=Atari Select While in UI: Circle=cancel/back Cross=select/enter Square=spacebar L1=Cold Start R1=Warm Start USB Keyboard is supported. TODO is located in src/atari_ps2.c itself. Thanks Piotr of atari800! Thanks ps2dev.org! Esp NeoVanglist, author of gsKi, and Oopo for the ps2dev toolchain. atari800-5.0.0/DOC/TESTS.dc000066400000000000000000000163411425067567700147130ustar00rootroot00000000000000Tests to be performed prior to a new release of Atari800DC ========================================================== General: -------- - Before burning a CD it's advisable to run most of the tests by other means (e.g. loading the new version with 'dc-tool'). After all tests are passing, burn a CD and run at least all the tests which require access to the host file system again, and run the CD-only tests. - Unless otherwise stated, the tests assume "computer mode", not "5200 mode". - Run the new version, play around in the menus, and run your favourite Atari programs. If something is strange, compare with the PC version of Atari800 and/or a real Atari. - Check new features and/or bug fixes since the previous version. - Check "about" menus ("About the Emulator", "About AtariDC") for correct information (typically copyright year and version) and layout. - Check that Atari800DC specific menu entries are present and working: main menu: -> "About AtariDC" "Display settings": -> "Double buffer video data" -> "Emulator video mode" -> "Display video mode" -> "Screen position configuration" "Controller configuration": -> "Joystick/D-Pad configuration" -> "Button configuration" - Check "autorun" feature For each of "autorun.com", "autorun.exe", "autorun.atr" have it as the only 'autorun.*' file in the root directory of the CD(-image). Check that each of them is automatically started at boot. ("autorun.com" and "autorun.exe" are just regular AtariDOS program files, the extension doesn't/shouldn't make any difference. "autorun.atr" is a bootable disk image.) On-screen keyboard: ------------------- - Check that if leaving emulator menu or on-screen keyboard UI by pressing 'B' doesn't insert a 'START' console button press (use e.g. Berzerk or ROM self test). - leave emulator menu - leave onscreen keyboard - Check that the keyboard emulation works within the emulator menu ("Load State" or "Save State" and enter a file name). - Test button overrides ("Controller Configuration"->"Button Configuration"). Assign keys to all controller buttons (B, X, Y). - check that the keys are generated on button presses (e.g. in the BASIC editor) - check that the now inaccessible "START", "SELECT", or "OPTION" keys can be injected via the on-screen keyboard (e.g. in the ROM self test or River Raid) - try more than one injection (for each of "SELECT" and "OPTION" and "START") - check that the injected key gets released (e.g. River Raid) Emulator menu: -------------- - Check auto-repeat (up/down/left/right on d-pad) in emulator menu. (Currently there is no auto-repeat when using a keyboard, that's a KOS problem.) Controllers: ------------ - Check that the controller D-Pad works. - Check that the controller Joystick works. - Check that reverting X and Y axes both work ("Controller configuration"->"Joystick/D-Pad configuration"->"Reverse ... axis"). - Check that disabling D-Pad and disabling Joystick works ("Controller configuration"->"Joystick/D-Pad configuration"->...). - Check unplugging/replugging controllers: - there shouldn't be a crash/reboot - try in the emulation, in the emulator menu, and in the on-screen keyboard - disconnecting and reconnecting the leftmost controller to a different port (still being the leftmost controller) should keep it accessible and the "main" controller/port #1 (in emulation, emulator menu, and on-screen keyboard) - Check paddle emulation ("Controller configuration"->"Emulate Paddles") with e.g. "Super Breakout" - Keyboard - boot with keyboard connected and check if it works (BASIC and emulator menu) - disconnect and reconnect (to a different port) and check if it still works (BASIC and emulator menu) - boot with keyboard disconnected, then connect, and see if it works - disconnect and reconnect (to a different port) and check if it still works (BASIC and emulator menu) Config file: ------------ - Add/modify DC specific entries to atari800.cfg (DISPLAY_X_ADJUST and DISPLAY_Y_ADJUST) - check that they are used after bootup - Check that double buffering ("Display Settings"->"Double buffer video data") is enabled/disabled according to the config file setting (DOUBLE_BUFFERING). Load/Save state: ---------------- VMU: - Start a game and play it for some time and then enter emulator menu and select "Save State". - enter "TAB" (via the on-screen keyboard or a connected keyboard controller) and select the VMU ('/vmu') - enter a new file name (again via the on-screen or a real keyboard) and press "return" (on-screen or real keyboard) - select a VMU with enough free space (currently a "save file" requires ~ 76 blocks) - check that a "please wait" message appears while saving - reboot DC and and enter VMU menu - check that the state file is present - the description should be " saved state" - the icon should show the Atari "fuji" logo - the file name should be the same as the one entered - reboot DC into Atari800DC - enter emulator menu and load the just saved state - check that a "please wait" message appears while loading - exit emulator menu and check that the game continues at the point where it was saved - select a VMU with not enough free space - check that an error message appears - reboot DC and and enter VMU menu - check that the state file is not present and the free space on the VMU hasn't decreased RAMDISK: - Start a game and play it for some time and then enter emulator menu and select "Save State". - enter "TAB" (via the on-screen keyboard or a connected keyboard controller) and select the ramdisk ('/ram') - enter file name (e.g '/ram/saved') and press "return" - load a different program - enter emulator menu and load the just saved state - check that the game continues at the point where it was saved R: device emulation: -------------------- - Connect DC to peer with serial ("Coder's Cable") cable. - Check that R: device emulation is enabled in Atari800DC ("Emulator Configuration"->"R: device ..."). - Check that the serial connection is working (e.g. by using terminal programs on both sides). Sound: ------ - Check sound synchronization/speed - Use "MULE" and watch the title screen. The third voice should start when the mule is just beneath the "L". Video: ------ - Check VGA and composite monitor. Screen should be centered and "good". - Check speed (no jitter): - Enable double buffering if it isn't enabled. - Load "Boulder Dash" and run through the first screen as fast as possible. - There shouldn't be any jitter in PAL mode. NTSC mode will have some jitter. - Check both composite and VGA. CD-only tests: -------------- - Boot from CD and start some program/game - Open the CD tray - Emulator should enter the emulator menu - Insert a different CD - Check that the content of the new CD is there - Load program/disk image from new CD - Check that the file is loaded correctly (emulator runs the new file). - Open the CD tray at random times - There should never be a crash/hang. - If not in any emulator menu, the emulator menu should be entered. atari800-5.0.0/DOC/TODO000066400000000000000000000244141425067567700141710ustar00rootroot00000000000000Plans for future versions ========================= Keyboard and controllers ------------------------ * map host joysticks to Atari ports in the emulation core in order to make the configuration available in UI and config file * pass the state of all host keys to the emulation core in order to configure keysticks in UI and config file * standardize key mappings in all ports (making host and Atari layouts available everywhere) * emulate POKEY keyboard scanning (with optional debouncing) * enhance support for pointing devices, including touch screens; "directmouse" should work in more ports, support light pen/gun and correct mirroring of pad/touch/koala * Atari Keyboard Interface (AKI) emulation Emulation core -------------- * Java midlet * cycle-exact POKEY interrupts (timers, serial I/O, keyboard) * precisely emulate serial I/O rates * emulate POKEY reset (via SKCTL) * more accurate frame rates (for example 49.8607456 instead of 50 Hz in PAL) * improve VAPI and .PRO support * emulate POKEY SIO shift register * emulate SIO bus lines, and SIO cable data/audio cross-talk "feep" sound * redirection of specific Dn: devices to Hn: (for software that supports only the D: device) * log POKEY audio writes, SIO commands (hardware level or DCB level), executed Display List commands, all activity to a defined range of adressess etc. in a way similar to the 6502 trace * log events that affect software compatibility: undocumented 6502 opcodes, unofficial system calls (including the 5200), extended memory access * emulate drives at the hardware level (810, 1050, XF551.) use code from other emulators which does this. (drive rotation, FM/MFM raw bits). WDCxxxx controller. RIOT chip. 6507. Intel 8048-line chip for the XFD551. Use emulated SIO line for bit-banging. Emulate Drive upgrades (Happy etc.) Emulate 3rd party drives (Rana, Karin Maxi etc.) * sound effects. Drive retracking noise (BlueMSX has.) Motor whine. On/off switch sound. Physical key-press sounds. Cartridge slot sounds. Drive door sounds. Floppy rotation flap sound. * Atari vapourware emulation. XEM (see below). 1090. 1060 CP/M (sweet-pea.) * emulate the 850 interface at the hardware level. * ATR-8000 emulation. ATR-8500. Adapt an existing CPM emulator. * 6502 BRK bug * try to understand 6502's "unstable" opcodes (0x93, 0x9b, 0x9f) that seem to have unpredictable (at least not easily predictable) results, preferrably by studying 6502 schematics * an option to emulate the variant of 6502 used in new XE machines (which lacks most of the undocumented opcodes of the classic 6502) * fully emulate executing 6502 code from Hardware, cycle-exact ANTIC_load from hardware, cycle-exact PMG flickering bus data * CPU upgrades (65816, etc) * emulate printer graphics (on screen or bitmap/PDF output): 1029, 1020, etc. The Mac OS X port of Atari800 has lots of printer emulation routines. * RAM Carts (cartridges with battery-powered RAM), writes to flash carts * serial "network" interfaces (e.g. 8 Ataris connected, is it GameLink?) * ability to play multi-player games across network * generate hard disk images or write directly to media that the 8-bit Ataris can use, like CompactFlash or MyIDE/SmartIDE/BB * "Turbo" cassette upgrades (Turbo 2000 etc.) * cassette emulation of WAV files. Load a WAV file like WAV2CAS does. Save to a WAV file or real cassette like CAS2WAV does. Load voice-and-data combined programmed audio tape images from WAV files. Support compressed (lossless? lossy even?) tape sound images. * disk auto-flip. Examine screen data for text string "Insert Side B and press any key/fire/return." Flip disk, print on-screen message and optionally press key. More a core feature than UI. Requires a database. * support physical floppy media (hard, port-specific and not very useful) * support physical Atari drives (hard, port-specific and not very useful) * improve the event recording. Avoid cycle-exact RANDOM? Graphics -------- * investigate different palettes for different models such as GTIA vs CTIA or 400/800, 1200XL, 800XL, XE, 5200, hardware modifications to the colour circuts etc. * SECAM palette and video emulation. * "flicker fixer": display average pixel values of last two Atari frames * use YUV output if available. Will it help? * PAL emulation. VICE has it, but it's not as complete as Blargg's emulation of NTSC. PAL luma/chroma artifacts are missing (it is like S-Video). Blargg's optimization technique won't work so easily for PAL. (perry: I have a hack of Blargg's slow version of the NTSC emulator that I tried to make work for PAL. But it isn't quite right and is way too slow. Ask me if you are interested.) * the NTSC emulator should support other resolutions. It should be supported in all possible ports. * fix the remaining bugs in the NTSC emulation. Artificating colours are not quite right. odd-even and even-odd combined artifacts (light red and light green) do not show unless Gaussian factor is changed a lot, which causes even worse artifacts. Fully document the Atari's video output signal (might require a scope.) Fully document NTSC decoding of late 70's and 80's era TVs. * document CTIA and emulate properly. Emulate the players not aligning with playfield bug/feature of CTIA which is said to exist. Need at least screenshots of a CTIA Atari showing all possible artifacts. * an option to emulate the buggy GTIA chip found in new XE machines. * fix all remaining collision bugs in the ANTIC and GTIA code (border+scroll, player HPOS and GRAF changes, partial_scanline changes.) Use the technique of saving data that might generate false collisions, drawing, and then restoring the data (pm_scanline). * cycle-exact DMACTL and HSCROL including all glitches * ANTIC glitch: POKE 39974,18:POKE 39975,8:POKE 54276,15 or POKE 39974,18:POKE 39975,40:POKE 54276,15:POKE 54277,15 * Video Board XE emulation Sound ----- * correctly emulate serial I/O sound * one POKEY sound engine * include sound settings in the emulation core (command line options, config file, UI) and make it possible to change them at runtime * support WAV files in configurations with no live sound * an option to auto-enable stereo when an Atari program uses it * Covox emulation * 2 POKEY mono, 4 POKEY stereo, 4 POKEY quad * MIDI <> serial port interface. In it's simplest form there's only MIDI output from the Atari. The more complicated version is enabled by the motor control line and includes two MIDI outputs selected by the command control line and one MIDI input. There is a MIDI composer program for Atari. * A/D Converter - 4-bit sampler that returns 0xf0-0xff in the 0xd500-0xd5ff address space. * XEM AMY-1 Chip. This is a huge project. Schematics (netlist) are said to exist. Prototyping software for the PC (connected to parallel port) is available online. Datasheet is online. Need netlist for AMY-1, schematics for XEM and any software. * SID chip User Interface -------------- * make sure all command-line options are available in UI and config file * error messages should appear on screen and not in the log * on screen display, like a TV remote, for the NTSC (or other) screen filter. * support pointing devices (mouse, touch screen) in UI * a database to identify programs and choose appropriate settings. OS version. Memory size. Memory expansion type. Peripherals. Machine type. Joystick/Trackball/Paddle etc. controller type. Artifacting mode. SIO patch compatibility. Even if compatible with SIO patch, loading screen graphics are often interesting to watch, so give the user an option to view or ignore them if present. If not SIO patch compatible, optional warp-speed through the loading. Keyboard layout. Advisories as to bad dump/bad image/special considerations Provide documentation, box scan, label scan for the program PAL/NTSC mode. Database should indicate PAL/NTSC compatibility, and which system the program was originally designed for. Allow PAL users to prefer PAL for NTSC-designed programs, but NTSC users to prefer NTSC. NTSC users get PAL (or fake NTSC-upgraded-to-PAL) for all PAL-designed programs (Except perhaps very old ones like English Software titles that NTSC users might remember.) PAL users get NTSC video only for artifacting programs. Clean up -------- * make port-specific features available in other ports - now many features work only in SDL, Mac OS X or Win PLus * clean up the "util" directory - remove obsolete files, write one-file documentation for all utils * make documentation consistent across systems (HTML?) * further clean up in the directory structure - port specific files should be hidden in their subfolders (falcon, amiga, ...) Speed optimizations ------------------- * use a boolean variable to disable 6502 history tracking and breakpoints (even with MONITOR_BREAKPOINTS and MONITOR_TRACE it should be faster than currently with just the default MONITOR_BREAK) * use function pointer table for hardware registers (like PAGED_ATTRIB does) * 6502 emulation optimizations: limit number of CPU_GO() calls (call ANTIC/GTIA routines from 6502 and not vice-versa), use ints instead of UWORD and UBYTE, merge N and Z flags into one variable, put 6502 flags into local variables so they can be stored in registers; see http://asap.sourceforge.net for a 6502 emulator which includes these optimizations * use patches for common routines such as OS interrupt handlers * make some hardware registers directly available in memory[] * write versions of draw_antic_* functions for the common case when there are no sprites in the current scanline * update color lookup tables only when color registers change * automatic framedrop * fast bank switching (without memcpy) * implement Dirty Spans (see HOWTO-DIRTYSPAN) * an option to detect popular lengthy Atari decompression routines and run equivalent C routines instead R: device --------- * clean up and comment the code * improve portability * documentation * automatic test (similar to hdevtest.lst for H:) * identify security problems * TCP port should be configurable (currently hardwired to 9000). The switch between real serial port and TCP port should be put there. Something along the following lines: R_SERIAL = 1 R_SERPORT = /dev/ttyS0 R_NETPORT = 9000 atari800-5.0.0/DOC/USAGE000066400000000000000000000620761425067567700142760ustar00rootroot00000000000000Up-to-date list of command line parameters and key mappings =========================================================== Usage: atari800 [options] [filenames] where: "filenames" are names of files supported by the emulator. The following file types are currently supported: - disk images: ATR, XFD, ATR.GZ/ATZ, XFD.GZ/XFZ, DCM, PRO, ATX - programs: COM/EXE/XEX, BAS, LST - cartridge images: CAR/CART, ROM (raw) - tape images: CAS, raw bootable programs - Atari800 state files: compressed and not compressed Disk images are mounted in order, i.e. the first file is mounted to the drive 1, next one to the drive 2, etc. Cassette operation ================== There is support for loading and saving from/to CAS tape images. It is also possible to select raw files (DOS binaries, bootable programs, BASIC programs etc.) as tape images, but only for loading. Upon attaching a tape image, the emulator acts as if the tape recorder's "Play" button was permanently pressed, so that a tape rolls automatically when an Atari program turns the tape motor on. Turning the SIO patch on speeds up the tape load and save operations. Some tapes, however, are copy-protected an will load correctly only with the SIO patch being disabled. Note that toggling the SIO patch during any tape operation will cause it to fail. A tape image can be rewound to a specific part (block), to allow loading from tape images which contain multiple programs one-after-another. After rewinding the "Record" option is automatically turned off. Rewinding will cause any tape operation being in progress to fail. When a tape image is attached to Atari800, only loading from it is possible. Before saving data on the tape, a user has to manually switch the "Record" option to "yes", in the same way as one would manually press/release the "Record" button on a physical tape recorder. Remember to disable the "Record" option before loading from tape. Note that switching the "Record" option on/off during any tape operation will cause it to fail and may cause random data to be saved to a tape image. With the SIO patch active, the emulator automatically recognises whether a load or save operation is requested. and it is not necessary to touch the "Record" option. This can lead to unwanted changes in a tape file. To avoid the problem, a user can mark the attached cassette image as read-only to disallow any write operations. Saving to tape always casues the new blocks to be appended at the end of the tape image, regardless of the tape's current position. It is not possible to overwrite existing data on the tape. A user can create a new empty CAS tape image with the "Make blank tape" option. The user then provides the image's filename and its description (stored in the CAS image's header; may be left empty). The created image is automatically attached to Atari800 with the "Record" option turned on, which allows to go straight to saving the data. Creating an image with the filename pointing to an existing file will cause that file to be cleared. Only standard blocks can be loaded or saved. Any copy protection that relies on non-standard signals is not supported. Additionally, saving is only supported with the standard speed of 600 baud. Saving the emulator's state during a tape loading/saving is not supported. The current tape operation is not stored in the savestate and it will not be restored properly when that savestate is later loaded. MIO and Black Box ================== You need ROM images (not provided.) Make a blank SCSI disk image (using dd for instance.) Set MIO_SCSI_DISK or BB_SCSI_DISK to the disk image name. Use 256 byte sectors for the Black Box. Don't use SASI. Use ALT-Backslash for the Black Box menu. Don't use the OS patches, use -nopatchall. The patches conflict with D1xx 1400XL/1450XLD ================== You need ROM images (not provided.) Don't use the OS patches, use -nopatchall. The patches conflict with D1xx The Self test can talk. You can use the V: device to talk. If you set the drives to empty, then a message appears on the 1450XLD screen asking you to insert a disk. If you press select when booting, the behavior of the 1450XLD disks is changed. I believe it slows down for compability. Command line options ==================== -help Display list of options and terminate -v Display version number and terminate -verbose Display framerate when exiting -config Use specified configuration file instead of default -autosave-config Automatically save the current configuration on emulator exit -no-autosave-config Don't save the current configuration on emulator exit (the default) -osa_rom Use specified OS/A ROM image -osb_rom Use specified OS/B ROM image -xlxe_rom Use specified XL/XE OS ROM image -5200_rom Use specified 5200 OS ROM image -basic_rom Use specified Atari BASIC ROM image -800-rev auto|a-ntsc|a-pal|b-ntsc|custom|altirra Select OS revision for Atari 400/800 -xl-rev auto|10|11|1|2|3a|3b|5|3|4|59|59a|custom|altirra Select OS revision for Atari XL/XE -5200-rev auto|orig|a|custom|altirra Select OS revision for Atari 5200 -basic-rev auto|a|b|c|custom|altirra Select BASIC revision -xegame-rev auto|orig|custom Select XEGS builtin game version -atari Emulate Atari 800 -1200 Emulate Atari 1200XL -xl Emulate Atari 800XL -xe Emulate Atari 130XE -320xe Emulate Atari 320XE (Compy Shop) -rambo Emulate Atari 320XE (Rambo) -576xe Emulate Atari 576XE -1088xe Emulate Atari 1088XE -xegs Emulate Atari XEGS -5200 Emulate Atari 5200 -c Enable RAM between 0xc000 and 0xcfff in Atari 800 -axlon Use Atari 800 Axlon memory expansion: k total RAM -axlon0f Use Axlon shadow at 0x0fc0-0x0fff -mosaic Use 400/800 Mosaic memory expansion: k total RAM -mapram Enable MapRAM enhancement for Atari XL/XE -no-mapram Disable MapRAM -pal Emulate PAL TV mode -ntsc Emulate NTSC TV mode -nobasic Turn off Atari BASIC ROM -basic Turn on Atari BASIC ROM -cart Insert cartridge (CART or raw format) -cart-type <0..75> Select type of cartridge inserted with -cart. 0 means no cartridge, and other values indicate a specific cartridge type as in cart.txt. -cart2 Insert second cartridge (CART or raw format) Only if first cartridge is SpartaDOS X (64 or 128) -cart2-type <0..75> Similar to -cart-type. Select type of cartridge inserted with -cart2. -cart-autoreboot Automatically reboot after cartridge inserting/removing (doesn't affect the piggyback cartridge) -no-cart-autoreboot Don't reboot after cartridge inserting/removing -run Run Atari program (EXE, COM, XEX, BAS, LST) -state Load saved-state file -tape Attach cassette image (CAS format or raw file) -boottape Attach cassette image and boot it -tape-readonly Set the attached cassette image as read-only -1400 Emulate the Atari 1400XL -xld Emulate the Atari 1450XLD -bb Emulate the CSS Black Box -mio Emulate the ICD MIO board -voicebox Emulate the Alien Group Voice Box I -voiceboxii Emulate the Alien Group Voice Box II -nopatch Don't patch SIO routine in OS -nopatchall Don't patch OS at all, H:, P: and R: devices won't work -H1 Set path for H1: device -H2 Set path for H2: device -H3 Set path for H3: device -H4 Set path for H4: device -hreadonly Enable read-only mode for H: device -hreadwrite Disable read-only mode for H: device -devbug Put debugging messages for H: and P: devices in log file -rtime Enable R-Time 8 emulation -nortime Disable R-Time 8 emulation -rdevice [] Enable R: device ( can be host serial device name) -mouse off Do not use mouse -mouse pad Emulate paddles -mouse touch Emulate Atari Touch Tablet -mouse koala Emulate Koala Pad -mouse pen Emulate Light Pen -mouse gun Emulate Light Gun -mouse amiga Emulate Amiga mouse -mouse st Emulate Atari ST mouse -mouse trak Emulate Atari Trak-Ball -mouse joy Emulate joystick using mouse -mouseport Set mouse port 1-4 (default 1) -mousespeed Set mouse speed 1-9 (default 3) -multijoy Emulate MultiJoy4 interface -directmouse Use mouse's absolute position -cx85 Emulate CX85 numeric keypad on port -grabmouse SDL only, prevent mouse pointer from leaving the window -record Record input to -playback Playback input from -refresh Set screen refresh rate -ntsc-artif none|ntsc-old|ntsc-new|ntsc-full Set video artifacting emulation mode for NTSC. -pal-artif none|pal-simple|pal-blend Set video artifacting emulation mode for PAL. -artif Set artifacting mode 0-4 (0 = disable) - only for ntsc-old and ntsc-new -colors-preset standard|deep-black|vibrant Use one of predefined color adjustments -saturation Set screen color saturation (like TV Colour control) -contrast Set screen contrast (also called white level) -brightness Set screen brightness (also called black level) -gamma Set screen gamma correction -tint Set tint -1..1 -ntsc-saturation Set saturation only for NTSC -ntsc-contrast Set contrast only for NTSC -ntsc-brightness Set brightness only for NTSC -ntsc-gamma Set gamma adjustment only for NTSC -ntsc-tint Set tint only for NTSC -ntsc-colordelay Set GTIA color delay for NTSC (emulates the potentiometer at the bottom of Atari computers, that adjusts colors) -pal-saturation Set saturation only for PAL -pal-contrast Set contrast only for PAL -pal-brightness Set brightness only for PAL -pal-gamma Set gamma adjustment only for PAL -pal-tint Set tint only for PAL -pal-colordelay Set GTIA color delay for PAL -paletten Read Atari NTSC colors from ACT file -paletten-adjust Apply the colour adjustments to the loaded NTSC palette -palettep Read Atari PAL colors from ACT file -palettep-adjust Apply the colour adjustments to the loaded PAL palette -screenshots Set filename pattern for screenshots -showspeed Show percentage of actual speed -turbo Run at max speed (Turbo mode) -sound Enable sound -nosound Disable sound -dsprate Set sound output frequency in Hz -audio16 Set sound output format to 16-bit -audio8 Set sound output format to 8-bit -snd-buflen Set length of the hardware sound buffer in milliseconds -snddelay Set sound latency in milliseconds -ide Enable IDE emulation -ide_debug Enable IDE Debug output -ide_cf Enable CF emulation Curses version options ---------------------- -left Use columns 0 to 39 -central Use columns 20 to 59 -right Use columns 40 to 79 -wide1 Use columns 0 to 79 (spaces between characters) -wide2 Use columns 0 to 79 (as above but normal/reverse spaces) DOS/VGA version options ----------------------- -interlace Generate screen with interlace -video 0=320x200, 1=320x240, 2=320x480 interlaced with black lines, 3=320x480 interlaced with darker lines -novesa Do not use VESA 2 video modes -vretrace Use vertical retrace control -LPTjoy1 Read joystick connected to LPT1 -LPTjoy2 Read joystick connected to LPT2 -LPTjoy3 Read joystick connected to LPT3 -joyswap Swap joysticks -keyboard 0 PC keyboard layout -keyboard 1 Atari keyboard layout Falcon version options ---------------------- -interlace Generate Falcon screen only every x frame -videl Direct VIDEL programming (Falcon/VGA only) -double Double the screen size on NOVA -delta Delta screen output (differences only) -joyswap Swap joysticks Java NestedVM version options ---------------------- -scale Scale width and height by SDL version options ------------------- -fullscreen Start in fullscreen mode -windowed Start in windowed mode (the default) -rotate90 Rotate display (useful for devices with 240x320 screen) -no-rotate90 Don't rotate display (the default) -fs-width Set horizontal fullscreen resolution -fs-height Set vertical fullscreen resolution -win-width Set window's horizontal size -win-height Set window's vertical size -bpp Set mode bits per pixel, only if OpenGL is disabled (0=desktop depth, 8, 16, 32) -vsync Synchronize the display with monitor's vertical retrace to avoid image tearing. -no-vsync Don't synchronize the display with the monitor (the default). -horiz-area narrow|tv|full| Set visible horizontal area: narrow: 320 pixels, tv: similar to real tv - 336 pixels, full: full overscan - 384 pixels, or provide a number between 160 and 384. -vert-area short|tv|full| Set visible vertical area: short: 200 pixels, tv: similar to real tv - 224 or 240 pixels (depending on TV system), full: full overscan - 300 pixels, or provide a number between 100 and 300. -horiz-shift Set horizontal shift of the visible area (-384..384) -vert-shift Set vertical shift of the visible area (-300..300) -stretch none|integral|full| Set method for image stretching: none: no stretching at all, integral: fit to screen/window, but stretch only by integral multiplier full: stretch to fit screen/window, unrestricted or provide a custom multiplier (e.g. 2, 3, 2.5, ...) -fit-screen width|height|both Set method of fitting the display to screen/window. -image-aspect none|square-pixels|real How to maintain image aspect ratio when stretching: none: maintaining disabled, image stretches to fill the entire screen/window square-pixels: width and height stretched by the same multiplier real: real TV's aspect ratio (depending on TV system) -host-aspect-ratio auto|: Set host display's aspect ratio. Used to correctly compute aspect ratio when -image-aspect is "real". Can be set to values such as 4:3, 16:9, 1.25:1, etc. "auto" tries to autodetect the ratio. -80column Display output of 80 column hardware. Usable only in conjunction with one of -xep80, -proto80, -af80, -bit3. -bit3 uses software control and does not need this. -no-80column Display normal screen instead of 80 column output -nojoystick Do not initialize joysticks -joy0 Define the device for LPTjoy -joy1 --""-- only when LPTjoy support compiled in The following 7 items are only for -ntsc-artif set to ntsc-full: -ntsc-filter-preset composite|svideo|rgb|monochrome Use one of predefined NTSC filter adjustments -ntsc-sharpness Set sharpness -ntsc-resolution Set resolution -ntsc-artifacts Set artifacts -ntsc-fringing Set fringing -ntsc-bleed Set bleed -ntsc-burstphase Set burst phase. This changes colors of artifacts. The best values are 0, 0.5, 1, 1.5 -scanlines Set visibility of scanlines (0-100) -scanlinesint Enable scanlines interpolation -no-scanlinesint Disable scanlines interpolation -video-accel Use OpenGL hardware acceleration -no-video-accel Don't use OpenGL hardware acceleration -pixel-format bgr16|rgb16|bgra32|argb32 Choose OpenGL texture format -pbo With OpenGL, use Pixel Buffer Objects for performance -no-pbo Disable usage of Pixel Buffer Objects -bilinear-filter Enable OpenGL bilinear filtering -no-bilinear-filter Disable OpenGL bilinear filtering -opengl-lib Use a custom OpenGL shared library -proto80 Emulate a prototype 80 column board for the 1090 -xep80 Emulate the XEP80 -xep80port Use XEP80 on joystick port -af80 Emulate the Austin Franklin 80 column board -bit3 Emulate the Bit3 Full View 80 column board X11 options ----------- -small Single size window -large Double size window -huge Triple size window -clip_x Left offset for clipping -clip_y Top offset for clipping -clip_width Width of the clipping area -clip_height Height of the clipping area -private_cmap Use private colormap -sio Show SIO monitor -x11bug Enable debug code in atari_x11.c -keypad Keypad mode Keyboard, joystick and other controllers ======================================== Unlike PC Xformer, I have not tried to emulate the exact keyboard layout, instead, I have tried to make your native keyboard work as normal. F1 Built in user interface F2 Option key F3 Select key F4 Start key F5 Reset key ("warm reset") Shift+F5 Reboot ("cold reset") F6 Help key (XL/XE only) F7 Break key / Pause during DOS file booting (**) F8 Enter monitor F9 Exit emulator F10 Save screenshot Shift+F10 Save interlaced screenshot F12 Turbo mode Alt+R Run Atari program Alt+D Disk management Alt+C Cartridge management Alt+T Tape management Alt+Y Select system Alt+O Sound settings Alt+W Sound recording start/stop Alt+V Video recording start/stop Alt+S Save state file Alt+L Load state file Alt+A About the emulator Insert Insert line (Atari Shift+'>') Ctrl+Insert Insert character (Atari Ctrl+'>') Shift+Ctrl+Insert Shift+Ctrl+'>' Delete Delete line (Atari Shift+Backspace) Shift+Backspace Delete line (Atari Shift+Backspace) Ctrl+Delete Delete character (Atari Ctrl+Backspace) Ctrl+Backspace Delete character (Atari Ctrl+Backspace) Shift+Ctrl+Delete Shift+Ctrl+Backspace Shift+Ctrl+Backspace Shift+Ctrl+Backspace Home Clear (Atari Shift+'<') Ctrl+Home Ctrl+'<' (also clears screen) Shift+Ctrl+Home Shift+Ctrl+'<' ~ Inverse video Up Up (Atari Ctrl+'-') Down Down (Atari Ctrl+'=') Left Left (Atari ctrl+'+') Right Right (Atari ctrl+'*') Ctrl+Up - Ctrl+Down = Ctrl+Left + Ctrl+Right * Shift+Up _ (Atari Shift+'-') Shift+Down | (Atari Shift+'=') Shift+Left \ (Atari Shift+'+') Shift+Right ^ (Atari Shift+'*') Shift+Ctrl+Up Shift+Ctrl+- Shift+Ctrl+Down Shift+Ctrl+= Ctrl+'\' Ctrl+Esc (Workaround for Windows) Shift+Ctrl+'\' Shift+Ctrl+Esc (Workaround for Windows) CX85 Keypad (if enabled): host keypad 0123456789-. 0123456789-. host keypad / NO host keypad Ctrl+/ ESCAPE host keypad * DELETE host keypad + YES host keypad Enter +ENTER Paddles, Atari touch tablet, Koala pad, light pen, light gun, ST/Amiga mouse, Atari trak-ball, joystick and Atari 5200 analog controller are emulated using mouse on ports that support it. See the options above for how to enable mouse. (**) When Slow booting of DOS binary files is enabled, holding F7 during loading pauses the booting process. Amiga keyboard, joystick and other controllers ---------------------------------------------- Please look into the supplied Atari800.guide. BASIC keyboard, joystick and other controllers ---------------------------------------------- No function keys or Alt+letter shortcuts. Use Ctrl+C to enter the monitor. Controllers not supported in this version. Curses keyboard, joystick and other controllers ----------------------------------------------- F10 (Save screenshot) does not work in the default CURSES_BASIC build. Shift+F5 and Shift+F10 don't work at all. Avoid Ctrl + C, H, J, M, Q, S and Z. The remaining control characters can be typed. Control characters are displayed on the screen with the associated upper case character in bold. Controllers not supported in this version. DOS VGA keyboard, joystick and other controllers ------------------------------------------------ F7 Switch between Emulated joysticks mode and Normal keyboard ` Atari/Inverse key Joysticks can be either real one connected to game port, or old 8-bit digital CX-40 joysticks connected to parallel port or keyboard joysticks (try out JOYCFG.EXE). Falcon keyboard, joystick and other controllers ----------------------------------------------- Help Help key (XL/XE) Joystick 0 is operated by the numeric keypad (make sure that the numeric keypad has been enabled). 7 8 9 \|/ 4 5 6 /|\ 1 2 3 And 0 is the fire key. Mouse not supported in this version. SDL keyboard, joystick and other controllers -------------------------------------------- ` Atari/Inverse key LSUPER Atari/Inverse key (unusable under Windows) RSUPER CapsToggle (+Shift = CapsLock) LAlt+F Switch fullscreen LAlt+G Switch visible horizontal area. See -horiz-area. LAlt+J Swap joysticks 0 and 1 LAlt+M Grab mouse (prevents mouse pointer from leaving the window) LAlt+LShift+1 Decrease tint (also called hue) LAlt+1 Increase tint LAlt+LShift+2 Decrease saturation (like TV Colour control) LAlt+2 Increase saturation LAlt+LShift+3 Decrease contrast (also called white level) LAlt+3 Increase contrast LAlt+LShift+4 Decrease brightness (also called black level) LAlt+4 Increase brightness LAlt+LShift+5 Decrease gamma adjustment LAlt+5 Increase gamma adjustment LAlt+LShift+6 Decrease color delay (Atari color adjustment potentiometer) LAlt+6 Increase color delay The following keys work only when the NTSC filter is enabled (-ntsc-artif set to ntsc-full): LAlt+LShift+7 Decrease sharpness LAlt+7 Increase sharpness LAlt+LShift+8 Decrease resolution LAlt+8 Increase resolution LAlt+LShift+9 Decrease artifacts LAlt+9 Increase artifacts LAlt+LShift+0 Decrease fringing LAlt+0 Increase fringing LAlt+LShift+- Decrease bleed LAlt+- Increase bleed LAlt+LShift+= Decrease burst phase (use this to change artifacting colours) LAlt+= Increase burst phase LAlt+LShift+[ Decrease scanlines percentage LAlt+[ Increase scanlines percentage LAlt+] Toggle NTSC composite/S-Video/RGB/monochrome settings LAlt+Shift+X Enable/disable 80 column screen (for -xep80/-af80/-proto80/ -bit3) Apart from standard joysticks (handled by the SDL) up to two keyboard joysticks are supported. The keys used for joystick directions and the trigger can be freely defined in the config UI (Controller Config -> Define layout). Keyboard joystick emulation can be enabled/disabled in the Controller Config. By default, joy 0 is enabled and joy 1 is disabled (to not steal normal AWDS keys in the emulator). X11 keyboard, joystick and other controllers -------------------------------------------- Alt Atari/Inverse key (either Alt key will work) Joystick 0 is operated by the mouse position relative to the center of the screen. The mouse button acts as the trigger. On Linux, standard joysticks are also supported. atari800-5.0.0/DOC/cart.txt000066400000000000000000001717611425067567700152030ustar00rootroot00000000000000This file describes types of cartridge images supported by the Atari800 emulator. There are: - raw images - files that contain only dump of cartridge memory - CART files - images with additional 16-byte header, which contains type of the cartridge For raw images you usually have to select the cartridge type each time you insert an image. To make it easier, you only select from types of same image size. If there's only one supported type that matches file's length (currently only for 2 KB cartridges), that type is selected automatically. The advantage of using CART files is that you don't have to select the cartridge type, because it is stored inside the file. The CART format has been introduced in Atari800 0.8.0, when there were only 4 supported cartridge types. The format has not changed, only new types have been added. The format is: first 4 bytes containing 'C' 'A' 'R' 'T'. next 4 bytes containing cartridge type in MSB format (see the table below). next 4 bytes containing cartridge checksum in MSB format (ROM only). next 4 bytes are currently unused (zero). followed immediately with the ROM data: 2, 4, 8, 16, 32, 40, etc. kilobytes. The recommended file name extension for CART files is CAR. Currently supported cartridge types: +----+-----------+------+-----------------------------------------------+---+ | Id | Machine | Size | Name | E | |----+-----------+------+-----------------------------------------------+---+ | 1 | 800/XL/XE | 8 | Standard 8 KB cartridge | | | 2 | 800/XL/XE | 16 | Standard 16 KB cartridge | | | 3 | 800/XL/XE | 16 | OSS two chip 16 KB cartridge (034M) | | | 4 | 5200 | 32 | Standard 32 KB 5200 cartridge | | | 5 | 800/XL/XE | 32 | DB 32 KB cartridge | | | 6 | 5200 | 16 | Two chip 16 KB 5200 cartridge | | | 7 | 5200 | 40 | Bounty Bob Strikes Back 40 KB 5200 cartridge | | | 8 | 800/XL/XE | 64 | 64 KB Williams cartridge | | | 9 | 800/XL/XE | 64 | Express 64 KB cartridge | | | 10 | 800/XL/XE | 64 | Diamond 64 KB cartridge | | | 11 | 800/XL/XE | 64 | SpartaDOS X 64 KB cartridge | | | 12 | 800/XL/XE | 32 | XEGS 32 KB cartridge | | | 13 | 800/XL/XE | 64 | XEGS 64 KB cartridge (banks 0-7) | | | 14 | 800/XL/XE | 128 | XEGS 128 KB cartridge | | | 15 | 800/XL/XE | 16 | OSS one chip 16 KB cartridge | | | 16 | 5200 | 16 | One chip 16 KB 5200 cartridge | | | 17 | 800/XL/XE | 128 | Decoded Atrax 128 KB cartridge | | | 18 | 800/XL/XE | 40 | Bounty Bob Strikes Back 40 KB cartridge | | | 19 | 5200 | 8 | Standard 8 KB 5200 cartridge | | | 20 | 5200 | 4 | Standard 4 KB 5200 cartridge | | | 21 | 800 | 8 | Right slot 8 KB cartridge | | | 22 | 800/XL/XE | 32 | 32 KB Williams cartridge | | | 23 | 800/XL/XE | 256 | XEGS 256 KB cartridge | | | 24 | 800/XL/XE | 512 | XEGS 512 KB cartridge | | | 25 | 800/XL/XE | 1024 | XEGS 1 MB cartridge | | | 26 | 800/XL/XE | 16 | MegaCart 16 KB cartridge | | | 27 | 800/XL/XE | 32 | MegaCart 32 KB cartridge | | | 28 | 800/XL/XE | 64 | MegaCart 64 KB cartridge | | | 29 | 800/XL/XE | 128 | MegaCart 128 KB cartridge | | | 30 | 800/XL/XE | 256 | MegaCart 256 KB cartridge | | | 31 | 800/XL/XE | 512 | MegaCart 512 KB cartridge | | | 32 | 800/XL/XE | 1024 | MegaCart 1 MB cartridge | | | 33 | 800/XL/XE | 32 | Switchable XEGS 32 KB cartridge | | | 34 | 800/XL/XE | 64 | Switchable XEGS 64 KB cartridge | | | 35 | 800/XL/XE | 128 | Switchable XEGS 128 KB cartridge | | | 36 | 800/XL/XE | 256 | Switchable XEGS 256 KB cartridge | | | 37 | 800/XL/XE | 512 | Switchable XEGS 512 KB cartridge | | | 38 | 800/XL/XE | 1024 | Switchable XEGS 1 MB cartridge | | | 39 | 800/XL/XE | 8 | Phoenix 8 KB cartridge | | | 40 | 800/XL/XE | 16 | Blizzard 16 KB cartridge | | | 41 | 800/XL/XE | 128 | Atarimax 128 KB Flash cartridge | p | | 42 | 800/XL/XE | 1024 | Atarimax 1 MB Flash cartridge (old) | p | | 43 | 800/XL/XE | 128 | SpartaDOS X 128 KB cartridge | | | 44 | 800/XL/XE | 8 | OSS 8 KB cartridge | | | 45 | 800/XL/XE | 16 | OSS two chip 16 KB cartridge (043M) | | | 46 | 800/XL/XE | 4 | Blizzard 4 KB cartridge | | | 47 | 800/XL/XE | 32 | AST 32 KB cartridge | | | 48 | 800/XL/XE | 64 | Atrax SDX 64 KB cartridge | | | 49 | 800/XL/XE | 128 | Atrax SDX 128 KB cartridge | | | 50 | 800/XL/XE | 64 | Turbosoft 64 KB cartridge | | | 51 | 800/XL/XE | 128 | Turbosoft 128 KB cartridge | | | 52 | 800/XL/XE | 32 | Ultracart 32 KB cartridge | | | 53 | 800/XL/XE | 8 | Low bank 8 KB cartridge | | | 54 | 800/XL/XE | 128 | SIC! 128 KB cartridge | p | | 55 | 800/XL/XE | 256 | SIC! 256 KB cartridge | p | | 56 | 800/XL/XE | 512 | SIC! 512 KB cartridge | p | | 57 | 800/XL/XE | 2 | Standard 2 KB cartridge | | | 58 | 800/XL/XE | 4 | Standard 4 KB cartridge | | | 59 | 800 | 4 | Right slot 4 KB cartridge | | | 60 | 800/XL/XE | 32 | Blizzard 32 KB cartridge | | | 61 | 800/XL/XE | 2048 | MegaMax 2 MB cartridge | | | 62 | 800/XL/XE | 128M | The!Cart 128 MB cartridge | p | | 63 | 800/XL/XE | 4096 | Flash MegaCart 4 MB cartridge | p | | 64 | 800/XL/XE | 2048 | MegaCart 2 MB cartridge | | | 65 | 800/XL/XE | 32M | The!Cart 32 MB cartridge | p | | 66 | 800/XL/XE | 64M | The!Cart 64 MB cartridge | p | | 67 | 800/XL/XE | 64 | XEGS 64 KB cartridge (banks 8-15) | | | 68 | 800/XL/XE | 128 | Atrax 128 KB cartridge | | | 69 | 800/XL/XE | 32 | aDawliah 32 KB cartridge | | | 70 | 800/XL/XE | 64 | aDawliah 64 KB cartridge | | | 71 | 5200 | 64 | Super Cart 64 KB 5200 cartridge (32K banks) | | | 72 | 5200 | 128 | Super Cart 128 KB 5200 cartridge (32K banks) | | | 73 | 5200 | 256 | Super Cart 256 KB 5200 cartridge (32K banks) | | | 74 | 5200 | 512 | Super Cart 512 KB 5200 cartridge (32K banks) | | | 75 | 800/XL/XE | 1024 | Atarimax 1 MB Flash cartridge (new) | p | +----+-----------+------+-----------------------------------------------+---+ Id is the cartridge type code stored in the CART file. Machine indicates if the cartridge is for Atari 8-bit Home Computers (400/800 and XL/XE) or the Atari 5200 Game System. Size is length of image in kilobytes, unless the value ends with "M", which means it is in megabytes. E (for Emulation) describes state of emulation support of the cartridge in Atari800. "p" means the cartridge is emulated partially (some features missing), no value means emulation of all features. Below are descriptions of all types. For bank-switched cartridges banks are numbered in the order they appear in the image file, starting with 0. +---------------------------------------------------------------------------+ | Type 1: Standard 8 KB cartridge | +---------------------------------------------------------------------------+ Standard 8 KB cartridge, that occupies 8 KB of address space between $A000 and $BFFF. +---------------------------------------------------------------------------+ | Type 2: Standard 16 KB cartridge | +---------------------------------------------------------------------------+ Standard 16 KB cartridge, that occupies 16 KB of address space between $8000 and $BFFF. +---------------------------------------------------------------------------+ | Type 3: OSS two chip 16 KB cartridge (034M) | +---------------------------------------------------------------------------+ NOTE: This cartridge image format has been obsoleted by Type 45 because its order of banks is incorrect (i.e. the order in a physical cartridge's ROM chips is different). This format is still supported by the CART file format for backward compatibility. The cartridge occupies 8 KB of address space between $A000 and $BFFF. Its memory is divided into 4 banks, 4 KB each. Bank number 3 (the last one) is always mapped to $B000-$BFFF. Bank in $A000-$AFFF is selected by an access to $D500-$D5FF. Only 4 lowest bits of address are significant: - $D5x0 selects bank 0. - $D5x1 is not useful - it selects banks 0 and 1 (the bytes are binary AND of the corresponding bytes from banks 0 and 1). - $D5x3 or $D5x7 selects bank 1. - $D5x4 selects bank 2. - $D5x5 is not useful - it selects banks 1 and 2 (the bytes are binary AND of the corresponding bytes from banks 1 and 2). - $D5x2 or $D5x6 is not useful. It disables ROM (there are $FF bytes in $A000-$AFFF). - $D5x8-$D5xF disables whole cartridge (enables computer's memory in address space between $A000 and $BFFF). +---------------------------------------------------------------------------+ | Type 4: Standard 32 KB 5200 cartridge | +---------------------------------------------------------------------------+ Standard 32 KB cartridge for Atari 5200, that occupies 32 KB of address space between $4000 and $BFFF. +---------------------------------------------------------------------------+ | Type 5: DB 32 KB cartridge | +---------------------------------------------------------------------------+ A 32 KB bank-switched cartridge. There are 4 banks. Bank 3 is mapped to $A000-$BFFF. Bank in $8000-$9FFF is selected by an access to $D500-$D5FF. Two lowest bits of address select bank 0, 1, 2 or 3. +---------------------------------------------------------------------------+ | Type 6: Two chip 16 KB 5200 cartridge | +---------------------------------------------------------------------------+ In Atari 5200 there's 32 KB of address space reserved for the cartridge ($4000-$BFFF). A two chip 16 KB cartridge is mapped that way: - First 8 KB are mapped into lower 16 KB. Since an address line is not connected, $4000-$5FFF and $6000-$7FFF contain same data, which is first half of the cartridge image. - Similarly, second 8 KB are mapped into upper 16 KB. +---------------------------------------------------------------------------+ | Type 7: Bounty Bob Strikes Back 40 KB 5200 cartridge | +---------------------------------------------------------------------------+ The cartridge with "Bounty Bob Strikes Back" game uses very strange bank switching method: - Four 4 KB banks (0,1,2,3) are mapped into $4000-$4FFF. An access to $4FF6 selects bank 0, $4FF7 - bank 1, $4FF8 - bank 2, $4FF9 - bank 3. - Four 4 KB banks (4,5,6,7) are mapped into $5000-$5FFF. An access to $5FF6 selects bank 4, $5FF7 - bank 5, $5FF8 - bank 6, $5FF9 - bank 7. - The remaining 8 KB is mapped to upper 16 KB of cartridge address space in Atari 5200. That is, $8000-$9FFF and $A000-$BFFF contain same data. +---------------------------------------------------------------------------+ | Type 8: 64 KB Williams cartridge | +---------------------------------------------------------------------------+ The cartridge has 8 banks mapped to $A000-$BFFF. An access to $D500 selects bank 0, $D501 - bank 1, etc. An access to $D508-$D50F disables the cartridge. +---------------------------------------------------------------------------+ | Type 9: Express 64 KB cartridge | +---------------------------------------------------------------------------+ The cartridge has 8 banks mapped to $A000-$BFFF. An access to $D577 selects bank 0, $D576 - bank 1, etc. An access to $D578-$D57F disables the cartridge. +---------------------------------------------------------------------------+ | Type 10: Diamond 64 KB cartridge | +---------------------------------------------------------------------------+ The cartridge has 8 banks mapped to $A000-$BFFF. An access to $D5D7 selects bank 0, $D5D6 - bank 1, etc. An access to $D5D8-$D5DF disables the cartridge. +---------------------------------------------------------------------------+ | Type 11: SpartaDOS X 64 KB cartridge | +---------------------------------------------------------------------------+ The cartridge has 8 banks mapped to $A000-$BFFF. It also contains an additional cartridge slot which allows to plug a second cartridge in. An access to $D5E7 selects bank 0, $D5E6 - bank 1, etc. down to $D5E0. An access to $D5E8-$D5EB disables the SDX cartridge and enables the second cartridge. An access to $D5EC-$D5EF disables both cartridges. Accesses to all addresses on page D5 always reaches the second cartridge, even if it is disabled by SpartaDOS or if the SpartaDOS cartridge itself is enabled. +---------------------------------------------------------------------------+ | Type 12: XEGS 32 KB cartridge | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 4 banks, 8 KB each. Bank 3 (the last one) is always mapped to $A000-$BFFF. Two lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF. The initially selected bank is random, although it seems that 0 gets chosen the most often. Atari800 always selects bank 0 initially. Reference: http://www.atarimax.com/jindroush.atari.org/acarts.html#xegs +---------------------------------------------------------------------------+ | Type 13: XEGS 64 KB cartridge (banks 0-7) | +---------------------------------------------------------------------------+ One of the two variants of the 64 KB XEGS cartridge, that's built on either a C100649 board with the W1 solder point not connected, or a C026449 board with pin 9 of the 74LS374 chip unconnected. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 8 banks, 8 KB each. Bank 7 (the last one) is always mapped to $A000-$BFFF. Three lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF. The initially selected bank is random, although it seems that 0 gets chosen the most often. Atari800 always selects bank 0 initially. Reference: http://www.atarimax.com/jindroush.atari.org/acarts.html#xegs +---------------------------------------------------------------------------+ | Type 14: XEGS 128 KB cartridge | +---------------------------------------------------------------------------+ Built on either a C100649 board with the W1 solder point connected, or a C026449 board. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 16 banks, 8 KB each. Bank 15 (the last one) is always mapped to $A000-$BFFF. Four lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF. The initially selected bank is random, although it seems that 0 gets chosen the most often. Atari800 always selects bank 0 initially. Reference: http://www.atarimax.com/jindroush.atari.org/acarts.html#xegs +---------------------------------------------------------------------------+ | Type 15: OSS one chip 16 KB cartridge | +---------------------------------------------------------------------------+ There are two types of OSS 16KB cartridges; this is the later, simpler one. Used by BASIC XL 1.03, Action! 3.6, MAC/65 1.1 and BASIC XE 4.1 (and possibly also by later versions of the above software). It consists of one 16 KB ROM chip. The cartridge occupies 8 KB of address space between $A000 and $BFFF. Its memory is divided into 4 banks, 4 KB each. Bank number 0 (the first one) is always mapped to $B000-$BFFF. Bank in $A000-$AFFF is selected by an access to $D500-$D5FF. Only bits 0 and 3 of address are significant: - A3=0, A0=0 - selects bank 1 - A3=0, A0=1 - selects bank 3 - A3=1, A0=0 - disables cartridge (enables computer's memory in address space between $A000 and $BFFF) - A3=1, A0=1 - selects bank 2 +---------------------------------------------------------------------------+ | Type 16: One chip 16 KB 5200 cartridge | +---------------------------------------------------------------------------+ 16 KB cartridge for Atari 5200, that occupies 16 KB of address space between $8000 and $BFFF. +---------------------------------------------------------------------------+ | Type 17: Decoded Atrax 128 KB cartridge | +---------------------------------------------------------------------------+ The Atrax cartridge has its address and data lines intermixed as a kind of copy protection - dumping a ROM chip directly would result in a dump that would need decoding before reading data. This cartridge type represents a decoded ROM dump, for example as a result of dumping by reading the cartridge using an Atari computer. The original, non-decoded dump is represented by Type 68: Atrax 128 KB cartridge. This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 16 banks, 8 KB each. If a byte written to $D500-$D5FF has highest bit set, the cartridge is disabled. Otherwise four lowest bits select the bank mapped to $A000-$BFFF. Reference: http://atarionline.pl/forum/comments.php?DiscussionID=2861&page=11#CommentBody_91383 +---------------------------------------------------------------------------+ | Type 18: Bounty Bob Strikes Back 40 KB cartridge | +---------------------------------------------------------------------------+ The cartridge with "Bounty Bob Strikes Back" game uses very strange bank switching method: - Four 4 KB banks (0,1,2,3) are mapped into $8000-$8FFF. An access to $8FF6 selects bank 0, $8FF7 - bank 1, $8FF8 - bank 2, $8FF9 - bank 3. - Four 4 KB banks (4,5,6,7) are mapped into $9000-$9FFF. An access to $9FF6 selects bank 4, $9FF7 - bank 5, $9FF8 - bank 6, $9FF9 - bank 7. - The remaining 8 KB is mapped to $A000-$BFFF. +---------------------------------------------------------------------------+ | Type 19: Standard 8 KB 5200 cartridge | +---------------------------------------------------------------------------+ Standard 8 KB cartridge for Atari 5200, mapped into $8000-$9FFF and $A000-$BFFF. +---------------------------------------------------------------------------+ | Type 20: Standard 4 KB 5200 cartridge | +---------------------------------------------------------------------------+ Standard 4 KB cartridge for Atari 5200, mapped into $8000-$8FFF, $9000-$9FFF, $A000-$AFFF and $B000-$BFFF. +---------------------------------------------------------------------------+ | Type 21: Right slot 8 KB cartridge | +---------------------------------------------------------------------------+ 8 KB cartridge for Atari 800, mapped into $8000-$9FFF. Atari 800 was the only 8-bit Atari with a Right Cartridge slot, in addition to the Left Cartridge slot as present on all 8-bit Ataris. +---------------------------------------------------------------------------+ | Type 22: 32 KB Williams cartridge | +---------------------------------------------------------------------------+ The cartridge has 4 banks mapped to $A000-$BFFF. An access to $D500 selects bank 0, $D501 - bank 1, etc. An access to $D508-$D50F disables the cartridge. +---------------------------------------------------------------------------+ | Type 23: XEGS 256 KB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 32 banks, 8 KB each. The last bank is always mapped to $A000-BFFF. Five lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 24: XEGS 512 KB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 64 banks, 8 KB each. The last bank is always mapped to $A000-$BFFF. Six lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 25: XEGS 1 MB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 128 banks, 8 KB each. The last bank is always mapped to $A000-$BFFF. Seven lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 26: MegaCart 16 KB cartridge | +---------------------------------------------------------------------------+ A 16 KB cartridge, that occupies 16 KB of address space between $8000 and $BFFF, and can be disabled by writing a byte with bit 7 set to $D500-$D5FF. +---------------------------------------------------------------------------+ | Type 27: MegaCart 32 KB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D5FF. Bit 0 selects one of two available banks, bit 7 disables the cartridge. +---------------------------------------------------------------------------+ | Type 28: MegaCart 64 KB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D5FF. Bits 0-1 select one of four available banks, bit 7 disables the cartridge. +---------------------------------------------------------------------------+ | Type 29: MegaCart 128 KB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D5FF. Bits 0-2 select one of 8 available banks, bit 7 disables the cartridge. +---------------------------------------------------------------------------+ | Type 30: MegaCart 256 KB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D5FF. Bits 0-3 select one of 16 available banks, bit 7 disables the cartridge. +---------------------------------------------------------------------------+ | Type 31: MegaCart 512 KB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D5FF. Bits 0-4 select one of 32 available banks, bit 7 disables the cartridge. +---------------------------------------------------------------------------+ | Type 32: MegaCart 1 MB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D5FF. Bits 0-5 select one of 64 available banks, bit 7 disables the cartridge. +---------------------------------------------------------------------------+ | Type 33: Switchable XEGS 32 KB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 4 banks, 8 KB each. Bank 3 (the last one) is always mapped to $A000-$BFFF. Two lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF, bit 7 disables the cartridge. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 34: Switchable XEGS 64 KB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 8 banks, 8 KB each. Bank 7 (the last one) is always mapped to $A000-$BFFF. Three lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF, bit 7 disables the cartridge. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 35: Switchable XEGS 128 KB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 16 banks, 8 KB each. Bank 15 (the last one) is always mapped to $A000-$BFFF. Four lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF, bit 7 disables the cartridge. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 36: Switchable XEGS 256 KB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 32 banks, 8 KB each. The last bank is always mapped to $A000-$BFFF. Five lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF, bit 7 disables the cartridge. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 37: Switchable XEGS 512 KB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 64 banks, 8 KB each. The last bank is always mapped to $A000-$BFFF. Six lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF, bit 7 disables the cartridge. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 38: Switchable XEGS 1 MB cartridge | +---------------------------------------------------------------------------+ An extension to the standard XEGS cartridge, apparently sold by Nir Dary in the 1990s/2000s. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 128 banks, 8 KB each. The last bank is always mapped to $A000-$BFFF. Seven lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF, bit 7 disables the cartridge. The initially selected bank is currently not known, although it's probable that it's the same as in standard XEGS cartridges, ie. random. Atari800 always selects bank 0 initially. +---------------------------------------------------------------------------+ | Type 39: Phoenix 8 KB cartridge | +---------------------------------------------------------------------------+ A 8 KB cartridge, that occupies 8 KB of address space between $A000 and $BFFF. It starts in enabled state and can be disabled by an access to $D500-$D5FF. Re-enabling is possible only by turning the computer off and on. Some units contain a RESET button that allows to enable the cartridge without touching the power button. +---------------------------------------------------------------------------+ | Type 40: Blizzard 16 KB cartridge | +---------------------------------------------------------------------------+ A 16 KB cartridge, that occupies 16 KB of address space between $8000 and $BFFF. It starts in enabled state and can be disabled by an access to $D500-$D5FF. Re-enabling is possible only by turning the computer off and on. Some units contain a RESET button that allows to enable the cartridge without touching the power button. +---------------------------------------------------------------------------+ | Type 41: Atarimax 128 KB Flash cartridge | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 16 banks, 8 KB each. The 4 lowest bits of the address written to $D500-$D50F select the bank mapped to $A000-$BFFF. Writing to $D510-$D51F disables the cartridge and any write to $D520-$D5FF is ignored. The cartridge also supports programming of the Flash ROM - this feature is currently not emulated. +---------------------------------------------------------------------------+ | Type 42: Atarimax 1 MB Flash cartridge (old) | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 128 banks, 8 KB each. The seven lowest bits of the address written to $D500-$D57F select the bank mapped to $A000-$BFFF, bit 7 disables the cartridge. Upon power up, bank $7F is selected. There is also another version of the Atarimax cartridge that selects bank 0 on power up; see Type 75 for details. The cartridge also supports programming of the Flash ROM - this feature is currently not emulated. +---------------------------------------------------------------------------+ | Type 43: SpartaDOS X 128 KB cartridge | +---------------------------------------------------------------------------+ The cartridge has 16 banks mapped to $A000-$BFFF. It also contains an additional cartridge slot which allows to plug a second cartridge in. First 8 banks are selected by an access to $D5F7-$D5F0, the other 8 banks by an access to $D5E7-$D5E0. An access to $D5E8-$D5EB or $D5F8-$D5FB disables the SDX cartridge and enables the second cartridge. An access to $D5EC-$D5EF or $D5FC-$D5FF disables both cartriges. Accesses to all addresses on page D5 always reaches the second cartridge, even if it is disabled by SpartaDOS or if the SpartaDOS cartridge itself is enabled. +---------------------------------------------------------------------------+ | Type 44: OSS 8 KB cartridge | +---------------------------------------------------------------------------+ Used in The Writer's Tool cartridge, it is actually an OSS one chip cartridge board (see Type 15) with an 8 KB ROM chip instead of a normal 16 KB one. The cartridge occupies 8 KB of address space between $A000 and $BFFF. Its memory is divided into 2 banks, 4 KB each. Bank number 0 (the first one) is always mapped to $B000-$BFFF. Bank in $A000-$AFFF is selected by an access to $D500-$D5FF. Only bits 0 and 3 of address are significant: - A3=0, A0=0 or 1 - selects bank 1 - A3=1, A0=0 - disables cartridge (enables computer's memory in address space between $A000 and $BFFF) - A3=1, A0=1 - selects bank 0 Reference: http://www.retrobits.net/atari/osshack.shtml +---------------------------------------------------------------------------+ | Type 45: OSS two chip 16 KB cartridge (043M) | +---------------------------------------------------------------------------+ There are two types of OSS 16KB cartridges; this is the earlier, more complicated one. Used by BASIC XL 1.02 and earlier, Action! 3.5 and earlier, and MAC/65 1.0. It consists of two 8 KB ROM chips. The cartridge occupies 8 KB of address space between $A000 and $BFFF. Its memory is divided into 4 banks, 4 KB each. Bank number 3 (the last one) is always mapped to $B000-$BFFF. Bank in $A000-$AFFF is selected by an access to $D500-$D5FF. Only 4 lowest bits of address are significant: - $D5x0 selects bank 0. - $D5x1 is not useful - it selects banks 0 and 2 (the bytes are binary AND of the corresponding bytes from banks 0 and 2). - $D5x3 or $D5x7 selects bank 2. - $D5x4 selects bank 1. - $D5x5 is not useful - it selects banks 1 and 2 (the bytes are binary AND of the corresponding bytes from banks 1 and 2). - $D5x2 or $D5x6 is not useful. It disables ROM (there are $FF bytes in $A000-$AFFF). - $D5x8-$D5xF disables whole cartridge (enables computer's memory in address space between $A000 and $BFFF). Reference: http://www.retrobits.net/atari/osscarts.shtml +---------------------------------------------------------------------------+ | Type 46: Blizzard 4 KB cartridge | +---------------------------------------------------------------------------+ A 4 KB cartridge, that occupies 8 KB of address space between $A000 and $BFFF. Line A12 is unconnected, so the cartridge's memory is duplicated in $A000-$AFFF and $B000-$BFFF. The cartridge starts in enabled state and can be disabled by an access to $D500-$D5FF. Re-enabling is possible only by turning the computer off and on. Some units contain a RESET button that allows to enable the cartridge without touching the power button. Reference: http://www.serious-dial.atari.pl/Serious/S13/A18.html +---------------------------------------------------------------------------+ | Type 47: AST 32 KB cartridge | +---------------------------------------------------------------------------+ This cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 128 banks, 256 B each. On power on, bank 0 is visible in $A000-$BFFF (repeated 32 times) and also in $D500-$D5FF. A write operation to $D500-$D5FF disables the cartridge (freeing the $A000-$BFFF area) and selects the next 256-byte bank visible at $D500-$D5FF. After bank 31 the write operation selects bank 0 again. Reference: http://www.atari.org.pl/forum/viewtopic.php?pid=134014#p134014 +---------------------------------------------------------------------------+ | Type 48: Atrax SDX 64 KB cartridge | +---------------------------------------------------------------------------+ A variant of Type 11: SpartaDOS X 64 KB cartridge. The banking scheme is identical, but the address and data lines between the cartridge port and the ROM chip are interleaved as follows: (Left - cartridge port + bank select lines, right - EPROM pins) A0 - A6 A1 - A7 A2 - A12 A3 - A15 A4 - A14 A5 - A13 A6 - A8 A7 - A5 A8 - A4 A9 - A3 A10 - A0 A11 - A1 A12 - A2 A13 - A9 \ A14 - A11 > bank select A15 - A10 / D0 - Q4 D1 - Q0 D2 - Q5 D3 - Q1 D4 - Q7 D5 - Q6 D6 - Q3 D7 - Q2 By deinterleaving a ROM image, one would get a normal image of type 11. See Type 11 for details on the banking scheme. Reference: http://www.dereatari.republika.pl/atarisch/sparta.zip +---------------------------------------------------------------------------+ | Type 49: Atrax SDX 128 KB cartridge | +---------------------------------------------------------------------------+ A variant of Type 43: SpartaDOS X 128 KB cartridge. The banking scheme is identical, but the address and data lines between the cartridge port and the ROM chip are interleaved. The interleaving is similar to that of Type 48, but with added A16 line, so it looks as follows: (Left - cartridge port + bank select lines, right - EPROM pins) A0 - A6 A1 - A7 A2 - A12 A3 - A15 A4 - A14 A5 - A13 A6 - A8 A7 - A5 A8 - A4 A9 - A3 A10 - A0 A11 - A1 A12 - A2 A13 - A9 \ A14 - A11 > bank select A15 - A10 / A16 - A16 / D0 - Q4 D1 - Q0 D2 - Q5 D3 - Q1 D4 - Q7 D5 - Q6 D6 - Q3 D7 - Q2 By deinterleaving a ROM image, one would get a normal image of type 43. See Type 43 for details on the banking scheme. Reference: http://www.dereatari.republika.pl/atarisch/sparta.zip http://trub.atari8.info/index.php?ref=atrax_128 +---------------------------------------------------------------------------+ | Type 50: Turbosoft 64 KB cartridge | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 8 banks, 8 KB each. Banks are selected by an access to an address at $D500-$D5FF. Bits 0-2 of the address select the bank mapped to $A000-$BFFF. Bit 4 disables the cartridge and enables RAM. Bits 3 and 5-7 are ignored. The cartridge starts with bank 0 enabled. Reference: http://www.retrogames.cl/turbosoft.html +---------------------------------------------------------------------------+ | Type 51: Turbosoft 128 KB cartridge | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 16 banks, 8 KB each. Banks are selected by an access to an address at $D500-D5FF. Bits 0-3 of the address select the bank mapped to $A000-$BFFF. Bit 4 disables the cartridge and enables RAM. Bits 5-7 are ignored. The cartridge starts with bank 0 enabled. Reference: http://www.retrogames.cl/turbosoft.html +---------------------------------------------------------------------------+ | Type 52: Ultracart 32 KB cartridge | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 4 banks, 8 KB each. On power on, bank 0 is visible. Each access to $D500-$D5FF switches another bank in the sequence as follows: 0->1->2->3->cartridge disabled->0 etc. Reference: Altirra source code, ver. 2.10-test20 http://www.atarimania.com/utility-atari-400-800-xl-xe-microcalc_28241.html +---------------------------------------------------------------------------+ | Type 53: Low bank 8 KB cartridge | +---------------------------------------------------------------------------+ This cartridge, destined for the left cartridge slot, occupies 8 KB of address space between $8000 and $9FFF. It achieves that by asserting the RD4 line and not asserting the RD5 line. Reference: http://www.atariage.com/forums/topic/161828-hooked-on-8-bit-carts/page__view__findpost__p__2338297 +---------------------------------------------------------------------------+ | Type 54: SIC! 128 KB cartridge | +---------------------------------------------------------------------------+ Cartridge memory is divided into 8 banks, each 16KB long and consisting of two 8KB subbanks. Each subbank can be mapped to Atari memory or switched off. The lower subbank always maps to $8000-$9FFF, while the upper one always maps to $A000-$BFFF. Control register address is $D500-$D51F mirrored, read/write (written value can be read at any time). Bit 7 = 0 - flash write-protection is on Bit 6 = 0 - odd 8k block (upper subbank) present in $A000-$BFFF Bit 5 = 0 - even 8k block (lower subbank) not present in $8000-$9FFF Bits 4..3 - unused Bits 2..0 - 16KB bank number (0..7) Default value = 0 which means 0 bank upper subbank in address $A000-$BFFF To switch cart off - poke $40 info $D500-$D51F The cartridge also supports programming of the Flash ROM - this feature is currently not emulated. Reference: http://sic.pigwa.net/files/specyfikacja_pl_eng.zip +---------------------------------------------------------------------------+ | Type 55: SIC! 256 KB cartridge | +---------------------------------------------------------------------------+ Same as Type 54, but with cartridge memory being divided into 16 banks. Bit 4 is unused Bits 3..0 - 16KB bank number (0..15) +---------------------------------------------------------------------------+ | Type 56: SIC! 512 KB cartridge | +---------------------------------------------------------------------------+ Same as Type 54, but with cartridge memory being divided into 32 banks. Bits 4..0 - 16KB bank number (0..31) +---------------------------------------------------------------------------+ | Type 57: Standard 2 KB cartridge | +---------------------------------------------------------------------------+ A 2 KB cartridge, that occupies 8 KB of address space between $A000 and $BFFF. The ROM chip is active only when lines A11 and A12 are high. In effect, the cartridge's memory appears at $B800-$BFFF while the $A000-B7FF area is unavailable and returns $FF when read. +---------------------------------------------------------------------------+ | Type 58: Standard 4 KB cartridge | +---------------------------------------------------------------------------+ A 4 KB cartridge, that occupies 8 KB of address space between $A000 and $BFFF. The ROM chip is active only when line A12 is high. In effect, the cartridge's memory appears at $B000-$BFFF while the $A000-AFFF area is unavailable and returns $FF when read. +---------------------------------------------------------------------------+ | Type 59: Right slot 4 KB cartridge | +---------------------------------------------------------------------------+ A 4 KB cartridge for Atari 800, mapped into $8000-$9FFF. The ROM chip is active only when line A12 is high. In effect, the cartridge's memory appears at $9000-$9FFF while the $8000-8FFF area is unavailable and returns $FF when read. +---------------------------------------------------------------------------+ | Type 60: Blizzard 32 KB cartridge | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 4 banks, 8 KB each. On power on, bank 0 is visible. Each access to $D500-$D5FF switches another bank in the sequence as follows: 0->1->2->3->cartridge disabled. Re-enabling is possible only by turning the computer off and on. Some units contain a RESET button that allows to enable the cartridge without touching the power button. Reference: http://www.atari.org.pl/forum/viewtopic.php?id=7292 +---------------------------------------------------------------------------+ | Type 61: MegaMax 2 MB cartridge | +---------------------------------------------------------------------------+ A variant of the MegaMax cartridge with 2MB ROM. The cartridge has a switch to toggle between the 1 MB Atarimax-compatible mode and the 2MB mode; this type describes the latter one. A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by access to an address at $D500-$D5FF. Bits 0-6 of the address select one of 128 available banks, bit 7 disables the cartridge. The cartridge starts with bank 0 enabled. Reference: http://www.mega-hz.de/Angebote/MEGAMAX/en/MegaMAX%20Cart%20en%20V1.htm +---------------------------------------------------------------------------+ | Type 62: The!Cart 128 MB cartridge | +---------------------------------------------------------------------------+ Only a small subset, as described below, of this cartridge's features is currently emulated. The cartridge occupies 8 KB of address space between $A000 and $BFFF, and consists of 16384 banks. Byte written to $D5A2 turns the cartridge on/off: bit 0 = 1 enables the cartridge, 0 disables it and enables RAM. The enabled bank is controlled by bytes written to $D5A0 (LSB) and $D5A1 (MSB, only 6 lowest bytes matter). Any write do $D5A0-$D5A1 also automatically enables the cartridge. The cartridge starts with bank 0 enabled. The $D5A0-$D5A2 registers are read/write; one can read the cartridge's current state from them. Unused bits are always read as 0. Reference: http://www.mega-hz.de/Angebote/THE!CART/THE!CART_EN.htm +---------------------------------------------------------------------------+ | Type 63: Flash MegaCart 4 MB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D51F. Values 0-254 select one of the first 255 banks, and the value 255 disables the cartridge. Bank 255 is not available. The cartridge starts with bank 254 enabled. A read from $D500-$D51F returns the last value written (initially 254). The cartridge also has ROM flashing functionality, which is currently not emulated. Reference: http://herale.org/4MB_FLASH_MEGACART +---------------------------------------------------------------------------+ | Type 64: MegaCart 2 MB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge that occupies 16 KB of address space between $8000 and $BFFF. It is controlled by a byte written to $D500-$D5FF. Bits 0-6 select one of 128 available banks, bit 7 disables the cartridge. +---------------------------------------------------------------------------+ | Type 65: The!Cart 32 MB cartridge | +---------------------------------------------------------------------------+ Only a small subset, as described below, of this cartridge's features is currently emulated. The cartridge occupies 8 KB of address space between $A000 and $BFFF, and consists of 4096 banks. Byte written to $D5A2 turns the cartridge on/off: bit 0 = 1 enables the cartridge, 0 disables it and enables RAM. The enabled bank is controlled by bytes written to $D5A0 (LSB) and $D5A1 (MSB, only 6 lowest bytes are stored in the internal register, and only 4 lowest bytes matter in choosing the enabled bank). Any write do $D5A0-$D5A1 also automatically enables the cartridge. The cartridge starts with bank 0 enabled. The $D5A0-$D5A2 registers are read/write; one can read the cartridge's current state from them. Unused bits are always read as 0. +---------------------------------------------------------------------------+ | Type 66: The!Cart 64 MB cartridge | +---------------------------------------------------------------------------+ Only a small subset, as described below, of this cartridge's features is currently emulated. The cartridge occupies 8 KB of address space between $A000 and $BFFF, and consists of 8192 banks. Byte written to $D5A2 turns the cartridge on/off: bit 0 = 1 enables the cartridge, 0 disables it and enables RAM. The enabled bank is controlled by bytes written to $D5A0 (LSB) and $D5A1 (MSB, only 6 lowest bytes are stored in the internal register, and only 5 lowest bytes matter in choosing the enabled bank). Any write do $D5A0-$D5A1 also automatically enables the cartridge. The cartridge starts with bank 0 enabled. The $D5A0-$D5A2 registers are read/write; one can read the cartridge's current state from them. Unused bits are always read as 0. +---------------------------------------------------------------------------+ | Type 67: XEGS 64 KB cartridge (banks 8-15) | +---------------------------------------------------------------------------+ One of the two variants of the 64 KB XEGS cartridge, built on a C026449 board with all pins of the 74LS374 chip connected. All software designed for this cartridge type also works with the other variant; see Type 13. This bank-switched cartridge occupies 16 KB of address space between $8000 and $BFFF. The cartridge memory is divided into 8 banks, 8 KB each. Bank 7 (the last one) is always mapped to $A000-$BFFF. Four lowest bits of a byte written to $D500-$D5FF select the bank mapped to $8000-$9FFF. Unsetting bit 3 unmaps the $8000-$9FFFF area and leaves it unconnected (floating or all $FFs); otherwise a bank selected by the three lowest bits is mapped. The initially selected bank is random, although it seems that the value of 0 (ie. no bank mapped) gets chosen the most often. Atari800 always selects 0 initially. Reference: http://www.atarimax.com/jindroush.atari.org/acarts.html#xegs +---------------------------------------------------------------------------+ | Type 68: Atrax 128 KB cartridge | +---------------------------------------------------------------------------+ The Atrax cartridge has its address and data lines intermixed as a kind of copy protection, as below: (Left - cartridge port + bank select lines, right - EPROM pins) A0 - A5 A1 - A6 A2 - A7 A3 - A12 A4 - A0 A5 - A1 A6 - A2 A7 - A3 A8 - A4 A9 - A8 A10 - A10 A11 - A11 A12 - A9 A13 - A13 \ A14 - A14 > bank select A15 - A15 / A16 - A16 / D0 - Q5 D1 - Q6 D2 - Q2 D3 - Q4 D4 - Q0 D5 - Q1 D6 - Q7 D7 - Q3 This cartridge type represents an original, non-decoded ROM dump, as read directly from the ROM chip. A decoded ROM dump is represented by Type 17: Decoded Atrax 128 KB cartridge. This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 16 banks, 8 KB each. If a byte written to $D500-$D5FF has highest bit set, the cartridge is disabled. Otherwise four lowest bits select the bank mapped to $A000-$BFFF. Reference: http://atarionline.pl/forum/comments.php?DiscussionID=2861&page=11#CommentBody_91383 +---------------------------------------------------------------------------+ | Type 69: aDawliah 32 KB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge built on a board marked "A-NA0002". Two variants of this board are known: one that connects the EPROM's pin 1 to +5V, and another that connects it to an 74169 counter. The cartridge houses a 256 kbit EPROM. (The former board variant can also contain a 512 kbit EPROM, but the board is hardwired to access only the upper half of the ROM.) The cartridge occupies 8 KB of address space between $A000 and $BFFF. Its memory is divided into 4 banks, 8 KB each. On power on, bank 0 is visible. Each access to $D500-$D5FF increases the visible bank number, looping to 0 after the last bank. Reference: http://atarionline.pl/forum/comments.php?DiscussionID=4260&page=1#Item_13 +---------------------------------------------------------------------------+ | Type 70: aDawliah 64 KB cartridge | +---------------------------------------------------------------------------+ A bank-switched cartridge built on a board marked "A-NA0002", specifically the variant that connects the EPROM's pin 1 to an 74169 counter. The cartridge houses a 512 kbit EPROM. (Note: no such cartridge has been identified as of yet, all known specimens house a 256 kbit EPROM.) The cartridge occupies 8 KB of address space between $A000 and $BFFF. Its memory is divided into 8 banks, 8 KB each. On power on, bank 0 is visible. Each access to $D500-$D5FF increases the visible bank number, looping to 0 after the last bank. Reference: http://atarionline.pl/forum/comments.php?DiscussionID=4260&page=1#Item_13 +---------------------------------------------------------------------------+ | Type 71: Super Cart 64 KB 5200 cartridge (32K banks) | +---------------------------------------------------------------------------+ A bank-switched cartridge built on the "512K Super Cart" board manufactured by Bryan Edewaard in 2005. It was used in Bryan's 5200 conversion of M.U.L.E. The cartridge has 2 32 KB banks mapped to $4000-$BFFF. The cartridge has a 4-bit bank counter, whose bits 0-1 are modified by reading from $BFD0-$BFDF, and bits 2-3 - by reading from $BFC0-$BFCF; but only bit 0 is significant. Effectively, banks are selected as follows: - a read from $BFD0-$BFD3 or $BFD8-$BFDB selects bank 0, - a read from $BFD4-$BFD7 or $BFDC-$BFDF selects bank 1. Additionally a read from $BFE0-$BFFF selects the topmost bank (i.e. 1). The 5200 BIOS reads data from here on power up, thus ensuring a known boot state. Reference: https://atariage.com/forums/topic/69649-5200-game-announcement-now-shipping/?do=findComment&comment=856153 +---------------------------------------------------------------------------+ | Type 72: Super Cart 128 KB 5200 cartridge (32K banks) | +---------------------------------------------------------------------------+ A bank-switched cartridge built on the "512K Super Cart" board manufactured by Bryan Edewaard in 2005. It was used in the 5200 conversion of Bosconian. The cartridge has 4 32 KB banks mapped to $4000-$BFFF. The cartridge has a 4-bit bank counter, whose bits 0-1 are modified by reading from $BFD0-$BFDF, and bits 2-3 - by reading from $BFC0-$BFCF; but only bits 0-1 are significant. Effectively, banks are selected as follows: - a read from $BFD0-$BFD3 selects bank 0, - a read from $BFD4-$BFD7 selects bank 1, - a read from $BFD8-$BFDB selects bank 2, - a read from $BFDC-$BFDF selects bank 3. Additionally a read from $BFE0-$BFFF selects the topmost bank (i.e. 3). The 5200 BIOS reads data from here on power up, thus ensuring a known boot state. References: https://atariage.com/forums/topic/69649-5200-game-announcement-now-shipping/?do=findComment&comment=856153 https://atariage.com/forums/topic/298850-bosconian-ultimate-for-atari-5200/ +---------------------------------------------------------------------------+ | Type 73: Super Cart 256 KB 5200 cartridge (32K banks) | +---------------------------------------------------------------------------+ A bank-switched cartridge built on the "512K Super Cart" board manufactured by Bryan Edewaard in 2005. The cartridge has 8 32 KB banks mapped to $4000-$BFFF. The cartridge has a 4-bit bank counter, whose bits 0-1 are modified by reading from $BFD0-$BFDF, and bits 2-3 - by reading from $BFC0-$BFCF; but only bits 0-2 are significant. Effectively, banks are selected as follows: - a read from $BFC0-$BFC3 or $BFC8-$BFCB sets bit 2 to 0, - a read from $BFC4-$BFC7 or $BFCC-$BFCF sets bit 2 to 1, - a read from $BFD0-$BFD3 sets bits 0-1 to 00, - a read from $BFD4-$BFD7 sets bits 0-1 to 01, - a read from $BFD8-$BFDB sets bits 0-1 to 10, - a read from $BFDC-$BFDF sets bits 0-1 to 11, Additionally a read from $BFE0-$BFFF selects the topmost bank (i.e. 7). The 5200 BIOS reads data from here on power up, thus ensuring a known boot state. Reference: https://atariage.com/forums/topic/69649-5200-game-announcement-now-shipping/?do=findComment&comment=856153 +---------------------------------------------------------------------------+ | Type 74: Super Cart 512 KB 5200 cartridge (32K banks) | +---------------------------------------------------------------------------+ A bank-switched cartridge built on the "512K Super Cart" board manufactured by Bryan Edewaard in 2005. It was used in the 5200 conversion of Bosconian. The cartridge has 16 32 KB banks mapped to $4000-$BFFF. The cartridge has a 4-bit bank counter, whose bits 0-1 are modified by reading from $BFD0-$BFDF, and bits 2-3 - by reading from $BFC0-$BFCF. Banks are selected as follows: - a read from $BFC0-$BFC3 sets bits 2-3 to 00, - a read from $BFC4-$BFC7 sets bits 2-3 to 01, - a read from $BFC8-$BFCB sets bits 2-3 to 10, - a read from $BFCC-$BFCF sets bits 2-3 to 11, - a read from $BFD0-$BFD3 sets bits 0-1 to 00, - a read from $BFD4-$BFD7 sets bits 0-1 to 01, - a read from $BFD8-$BFDB sets bits 0-1 to 10, - a read from $BFDC-$BFDF sets bits 0-1 to 11, Additionally a read from $BFE0-$BFFF selects the topmost bank (i.e. 15). The 5200 BIOS reads data from here on power up, thus ensuring a known boot state. References: https://atariage.com/forums/topic/69649-5200-game-announcement-now-shipping/?do=findComment&comment=856153 https://atariage.com/forums/topic/298850-bosconian-ultimate-for-atari-5200/ +---------------------------------------------------------------------------+ | Type 75: Atarimax 1 MB Flash cartridge (new) | +---------------------------------------------------------------------------+ This bank-switched cartridge occupies 8 KB of address space between $A000 and $BFFF. The cartridge memory is divided into 128 banks, 8 KB each. The seven lowest bits of the address written to $D500-$D57F select the bank mapped to $A000-$BFFF, bit 7 disables the cartridge. Upon power up, bank 0 is selected. There is also another version of the Atarimax cartridge that selected bank $7F on power up; see Type 42 for details. The cartridge also supports programming of the Flash ROM - this feature is currently not emulated. Reference: https://atariage.com/forums/topic/184410-space-harrier-released/?do=findComment&comment=2331655 atari800-5.0.0/DOC/coverage.txt000066400000000000000000000137631425067567700160420ustar00rootroot00000000000000[Note: this is a work in progress, and it's not finished. Neither is the coverage code, meaning what you see here is subject to change as the code changes!] Starting with Atari800 3.2.0, the monitor has a new COV (coverage) command. This is meant to be a short explanation & tutorial that should help everyone understand what COV is & what it's good for. The general idea is that COV can tell you: - What sections of code were executed, and what sections weren't. For development, this is useful for testing. Ideally, you want to "exercise" all your code, to verify that it works properly. Code that never gets run can't be tested. For reverse engineering, this will help you identify sections of memory as code or data, and it's handy for finding dead code areas. - How often each instruction was executed, and... - How much CPU time (6502 cycles) each instruction or section used. For development, these are useful for finding performance bottlenecks. You can concentrate only on optimizing the code that's run most frequently. For reverse engineering, this helps you identify 'interesting' sections of code. A word of caution: Currently, the COV command doesn't know anything about bankswitching (neither XL/XE PORTB switching nor cartridges). If the range of code you're examining with COV gets bankswitched out and different code is run at the same address, COV's results will be confusing and probably useless. To avoid this, limit yourself to working with one small(ish) section of code at a time, or else set breakpoints on the instructions that do the bankswitching, and manually clear the coverage stats (COV C) when the breakpoints are triggered. COV has 5 subcommands: COV C - Clears the coverage stat counters. Every address in the emulated Atari (0 to FFFF) has two counters: number of times executed, and cycles used. These are updated whenever the emulator runs the CPU (including exiting the monitor via CONT, or using the G/R/O commands). The counters start out at zero when Atari800 starts, and are NEVER automatically zeroed (not even when using the COLDSTART command). The only way to clear them is to use COV C. You should definitely do this any time you alter the code with the A (assembler) command. The other commands are for viewing the coverage stats. They each take an optional start and end address, which sets the coverage range (the range of code we're "looking at"). If no start/end addresses are given, the commands use the current range (last start/end addresses given, or 0000 to FFFF if no range was given). COV S - Show a summary of the coverage stats. As an example, you'll get something similar to this [*] if you start Atari800 with BASIC enabled, wait a second or so at the READY prompt, press F8 to enter the monitor, then use COV S with the start & end addresses of the cartridge: > cov s a000 bfff Range a000-bfff: 883(0.14%) insns, 2889(0.17%) cycles executed Coverage: 378(4.61%) of 8192 Total: 616725 instructions, 1706224 cycles executed [*] But probably not identical, unless you hit F8 at exactly the same time since startup as I did. What's this telling us? Let's look at the first line first: 883(0.14%) insns - 883 instructions in the range a000-bfff were executed, which amounts to 0.14% of all instructions executed so far. If the same instruction was executed more than once (e.g. a loop), it's counted each time. 883 works out to 0.14% of the total instructions executed (see the 3rd line of output). Notice that 0.14% isn't really very much: most of the code the Atari has executed so far is outside of the range a000-bfff (it's actually in the c000-ffff range, aka the OS ROM). 2889(0.17%) cycles - Those 883 instructions took 2889 cycles to execute, or 0.17% of the cycles the CPU has executed so far. The second line is: Coverage: 378(4.61%) of 8192 It's telling us that there are 8192 (decimal) memory locations in the range we're looking at (a000-bfff), and that 378 of them have been executed as instructions [*], which works out to 4.61%. Note that any real program (such as BASIC) will contain data as well as code, so it's unlikely that you'll ever see 100% coverage if you're looking at the whole program. You will, if you "drill down" to look at individual subroutines or loops. [*] ...or, being perfectly pedantic, as operands to instructions. An immediate LDA #0 counts as 2 instructions, here. The last line gives the total CPU instruction and cycle counts since startup (or since the last COV C command). These are what was used to calculate the percentages on the first line. So if BASIC only used 0.17% of the CPU cycles, what used the other 98.83%? A good guess would be the OS. Let's check: > cov s c000 ffff Range c000-ffff: 615842(99.86%) insns, 1703335(99.83%) cycles executed Coverage: 2089(12.75%) of 16384 Total: 616725 instructions, 1706224 cycles executed Yep, that's it, 99.83%. Was any other code run? > cov s 0000 9fff Range 0000-9fff: 0(0.00%) insns, 0(0.00%) cycles executed Coverage: 0(0.00%) of 40960 Total: 616725 instructions, 1706224 cycles executed Nope. OK, let's go back to looking at BASIC. Enter "cov s a000 bfff" again, you should get the same display as the first example. Now, let's play around with BASIC a bit, and see what we get. Use "cont" to get back into BASIC, and type: PRINT "HELLO" ...which will give you HELLO followed by another READY prompt. Now press F8 to get back to the monitor and run "cov s". Notice there are no start/end addresses in the command? COV will re-use the last start/end addresses we gave it (in this case, a000 and bfff). You should see something like: Range a000-bfff: 15339(0.33%) insns, 47727(0.39%) cycles executed Coverage: 1438(17.55%) of 8192 Total: 4642110 instructions, 12216322 cycles executed The coverage was 4.61% before, so running that PRINT command caused about 12% of the cartridge to run. You can try various other BASIC commands and watch the coverage increase, but it won't ever reach 100% because not everything in the BASIC ROM is code (some of it's data tables). COV H - Show CPU hogs TODO: write the rest of this! atari800-5.0.0/DOC/directx.txt000066400000000000000000000215551425067567700157070ustar00rootroot00000000000000This file documents new options that I have personally added to the Windows DX port of the emulator since 2.1. The major goal of these enhancements is to allow the emulator to perform better on modern display and game controller technology, including widescreen monitors, TVs, gamepads, and HTPC/kiosk setups. A secondary goal is to make usability improvements to the emulator shell including main menu and internal mouse support. Windows DX: Windows Display Options =================================== Note: Defaults are shown in [brackets]. Note: All settings (except -console) can be saved in the UI. Display Rendering ----------------- [GDI] Software pixel scaling. Fast. GDI+ Software pixel scaling. Moderate. GDI+/Bilinear Software bilinear scaling. Slow. GDI+/Bilinear (HQ) Software HQ bilinear scaling. Very slow. GDI+/Bicubic (HQ) Software HQ bicubic scaling. Slow Direct3D Hardware pixel scaling. Fast. Direct3D/Bilinear Hardware bilinear scaling. Fast. Note: Emulator must be restarted to activate a rendering mode change. Hint: For softer pixels and resolution-independent aliasing control, choose Direct3D/Bilinear mode. Fullscreen Resolution --------------------- [Desktop] Use the current desktop resolution. VGA 640x480. 2x native pixel resolution. SXGA 1280x960. 4x native pixel resolution. UXGA 1600x1200. 5x native pixel resolution. Hint: Use -fsres command line to use a custom resolution that does not appear in this list. Scaling Method -------------- Off Stretch unconstrained to window boundary [Normal] Scale dynamically while enforcing aspect. Simple Scale to exact multiple of native screen. Adaptive Compensate for widescreen stretching. Note: Adaptive mode is "experimental" and not fully compatible with all combinations of settings. Aspect Mode ----------- [Auto] 7:5 or 4:3 crop depending on screen metrics. Wide Display 336x240 pixel matrix in 7:5 aspect. Cropped Display 320x240 pixel matrix in 4:3 aspect. Compressed Display 336x240 pixel matrix in 4:3 aspect. Note: Scaling method must be set to "Normal" or "Simple" for these settings to be effective. Custom Crop Options ------------------- Horizontal crop Symmetrically crop width by # of pixels. [0] Vertical crop Symmetrically crop height by # of pixels. [0] Lock aspect mode Force current aspect mode ratio on crop.[No] Hint: Cropping can be used to effectively zoom or stretch. To zoom without distortion while using a 4:3 resolution in fullscreen, set horizontal and vertical crop to equal values. To zoom when using a widescreen display and resolution in fullscreen, you typically only need to set a vertical crop value. Note: Be aware that using vertical crop will clip the notification area of the screen sometimes used to display frame rates or disk activity. Other Settings -------------- Screen mode Switch between Fullscreen and [Windowed] modes. Window scale Set size of window as percent of native. [200] Scanline mode Three resolutions of simulated scanlines. [Off] Horizontal offset Shift screen horizontally <-24..24>. [0] Vertical offset Shift screen vertically <-50..50>. [0] Always hide cursor Hide mouse cursor in fullscreen UI. [No] Show menu Show or hide the Windows main menu. [Yes] Windows DX: Display Settings ============================ Color preset ------------------------- [Standard] Standard color adjustments as seen on a real TV or monitor. Accurately represents full spectrum of colors. Deep black Adjusted to allow producing pure black color (unlike the Standard preset). May look more pleasant, although is less accurate when representing the darkest colors. Vibrant Arcade-like vibrant colors. Enhanced color saturation and black-level. Hint: Changing video settings (i.e. brightness, contrast, etc.) from one of the base profile settings will cause the profile name to read "Custom". Windows DX: Controller Configuration ==================================== Keyboard Joystick Modes ----------------------- Keypad Keypad is joystick. 0 key is trigger. Keypad+ Keypad is joystick. 5=down. 0, left ctrl=trigger. [Arrows] Use cursor block as joystick. Left ctrl=trigger. Alternate Joystick Modes ------------------------ [Normal] Normal joystick functions. Dual Double-map player 2 stick to Z/Z-Rotation axis. Shared Double-map player 2 stick to player 1 stick. Hint: Use "Dual" on two-stick gamepads for two joystick games like Robotron and Space Dungeon. Use "Shared" to share a single joystick between two players on games that normally require two joysticks. Custom Button Options --------------------- Use "Enable custom buttons" to turn on custom joystickbutton feature. Use "Assign custom buttons" to assign keystrokes to joystick buttons. The following buttons may be mapped. * All numbers. * All alphabet keys in upper & lower case. * Atari Option, Select, and Start (press F2, F3, or F4). * Space * Return Windows DX Menu Operation ========================= Configuration options may be accessed through either the main menu or by pressing F1. The main menu is only available when the emulator is run in a window. Mouse Operations ---------------- Inside the configuration menus, mouse ops are as follows. Click: Selects item Double click: Activates item (Enter) Right click: Back (Esc) Wheel up: Up Wheel down: Down Wheel left: Left Wheel right: Right Windows DX keyboard hot-keys ============================ Alt+Enter Toggles between windowed and fullscreen modes Alt+PageUp Increases the size of the window Alt+PageDown Decreases the size of the window Alt+I Advances to the next scanline (interleave) mode Alt+M Toggles Windows main menu on or off. Alt+Shift+Z 3D "tilt screen". (Direct3D modes only) Alt+Z 3D "screensaver". (Direct3D modes only) Hint: Use of Alt-T & Alt-Z may require running the "DirectX 9 Updater" from microsoft.com. Google or Bing the quoted text to find it. Windows DX: Command Line Options ================================ -help Show all help options (including these) -console Send debug output to a console instead of atari800.txt. Required for debug monitor. -keyjoy Keyboard joystick mode. , , -altjoy Alternate joystick mode. , , -mapjoy1buttons Use custom button mappings for joystick 1. -mapjoy2buttons Use custom button mappings for joystick 2. -render Rendering engine to use. , , , -filter Scaling filter. , , , -scaling Scaling method. , , , -aspect Aspect mode. , , , -winscale Window size as a percent of native Atari screen. <100>, <200>, <250>, etc. -fullscreen Force fullscreen mode at startup. -windowed Force windowed mode at startup. -fsres Custom fullscreen resolution. i.e. <640x480>, <800x600>, <1024x768>, etc. -scanlines Scanline mode. , , -hcrop Crop the screen horizontally. -vcrop Crop the screen vertically. -crop Crop the screen horizonally & vertically. -lockaspect Lock current aspect mode when trimming. -hoffset Shift screen horizontally. -voffset Shift screen vertically. -hidecursor Hide mouse cursor in fullscreen UI mode. -hidemenu Hide the Windows main menu. -colors-preset Use one of predefined color adjustments. , , -width Set display mode width (ddraw only). -blt Use blitting to draw graphics (ddraw only). David Dahlstrom 2010-04-29 atari800-5.0.0/DOC/emuos.txt000066400000000000000000000002051425067567700153620ustar00rootroot00000000000000Working program under emulated OS --------------------------------- 1. Montezummas Revenge 2. Defender 3. Star Raider 4. Fast Eddie atari800-5.0.0/DOC/pokeysnd.txt000066400000000000000000000344611425067567700161010ustar00rootroot00000000000000 Atari POKEY Chip Emulator V2.3 ============================== by Ron Fries 19 Jan 98 The PokeySound Chip Emulator is designed to emulate the functionality of the Atari POKEY Chip Hardware through 'C' Sourcecode. The emulator is able to produce sounds which are essentially identical to the original POKEY chip, including the exact distortions and pitches. The emulator is designed to run in a 32-bit environment. Though it can be compiled and run in a 16-bit environment, it is slow. I would like to give special thanks to Neil Bradley. He provided excellent testing support and was also the driving force behind the multiple POKEY emulation. New Features: ------------- Version 2.3: 1) Added configurable support for signed/unsigned samples. Default is unsigned, define SIGNED_SAMPLES if necessary. 2) Included SBDRV1.2 which adds DJGPP support and corrects the AUTO-INIT detection problem. Version 2.2: 1) Changed to signed 8-bit samples. 2) Increased gain range by a factor of 16. Divide gain from previous version by sixteen to produce the same results. 3) Removed DOS dependent routines to provide cross-platform support. 4) Added conditional defines for TRUE and FALSE 5) Added support for big/little endian machines. Defaults to little endian. Define BIG_ENDIAN if necessary. Version 2.0: 1) Support for multiple POKEY chips. The maximum supported is configured at compile time. 2) An adjustable gain. The previous releases had a built-in gain of 64. 3) A clipping option. Depending on the number of chips emulated and the configured gain, it is possible for the output to exceed 8-bits. Clipping can be enabled to prevent this, though it does increase the processing time. Standard Features: ------------------ The 'PokeySound' emulator supports the following functions: 1) All polynomial sound generators: a) 4-bit poly - actual bit pattern determined from sampled sound b) 5-bit poly - actual bit pattern determined from sampled sound c) 17-bit poly - simulated random bit pattern d) 9-bit poly - derived from simulated 17-bit poly 2) Full support of all 'Divide by N' counter clocks: a) 1.79 MHz (high limited to playback sample rate) b) 64 KHz (high limited to playback sample rate) c) 15 KHz 3) Full support of all 'Divide by N' resolutions: a) 8-bit - single channel b) 16-bit - double channel 4) Full support of all distortions a) 5-bit poly, then 17-bit poly b) 5-bit poly only c) 5-bit poly, then 4-bit poly d) 17-bit poly only e) no poly counters (pure tone) f) 5-bit poly only 5) Full support of volume control 6) Full support of all pitches - distortions will vary exactly as the original Atari based on different pitches 7) Accurate pitch generation 8) Support of any playback sample rate (e.g. 22050) The 'PokeySound' emulator does not currently support the following functions: 1) High pass filters Though I don't believe adding support for the High-Pass filters is very complicated, I decided not to add support right now because I don't believe this feature is used much. I'm also not sure how much impact it would have on performance. Let me know if you find an application that uses it. In the 2.0 release, I've removed the non-optimized version. It was only left in for reference. If you would still like to see the non-optimized version, it's available in the 1.2 release. One of the unique features of the emulator is that the processing time varies based on the frequency. Since the routine only calculates new output values when a change is sensed, the lower frequencies (which change less frequently) will require less processing time. Differences Between the Emulator and the Actual POKEY Chip: ----------------------------------------------------------- The biggest difference between the emulator and the original hardware is that the emulator emulates an 'ideal' POKEY chip. All output from the emulator is a based on a precise square wave, whereas the output from the original chip has decay. Though the output is slightly different, I don't believe this difference is easily discernible. Another slight difference is the 17-bit/9-bit poly. Since the polynomial is large (2^17 bits), I choose to create the sample using a random number generator rather than a table. I don't believe this difference is significant. There are also a few differences which are introduced by aliasing. This is a direct result of using an output sampling rate which is not identical to the original sound rate. It is most evident with high frequencies. A final difference is the lack of support for the High-Pass Filter functionality. I plan to add this in a future release if necessary. Sample/Test Application: ------------------------ The test program I've distributed is a 16-bit DOS application created with the Borland 'C' compiler. The only reason I used 16-bit was because I already had a set of working SB drivers in 16-bit. Since the test system is dedicated to generating sounds, the performance in 16-bit is more than adequate. POKEY.C ======= The POKEY.C file is the heart of the PokeySound Emulation program. Although the routines in the file must work together, no other files are modules are required for operation. A header file, 'POKEY.H', has been included for use in other modules, and provides the necessary function prototypes. I've attempted to make the routines as portable as possible, so the file should compile on almost any compiler with little or no modification. I have made some attempts at optimizing the routines, though I am sure more optimization can be done. They are currently only available in 'C'. I'll be happy to convert them to assembly language if desired. Please feel free to send me e-mail at rfries@tcmail.frco.com. The routines are easy to use. Detailed descriptions on the function calls are listed below. The POKEY.C module can be compiled in a 32-bit or 16-bit environment. Since these routines are optimized for 32-bit use, the code will default to 32-bit. To compile in 16-bits, use a command line option to define the variable COMP16. GENERAL OVERVIEW ---------------- On start-up of the system, a single call should be made to Pokey_sound_init. This routine will prepare the structures for sound output. This routine can be called again if necessary during warm-start or other reset. Once in the main loop, there are two other functions that will be used. Whenever the system needs to write to either the AUDC or AUDF values, a call should be made to the Update_pokey_sound routine. This routine will take care of updating the internal registers. It will pre-calculate several values to help with optimization. The only other routine that is called is the Pokey_process function. This function will fill a audio buffer with a specified number of bytes. This function should be called whenever a new audio buffer is required. For best results, I recommend using at least two output buffers. Using this scheme, the sound card can be playing one buffer while the system is filling the other. DETAILED FUNCTION DESCRIPTIONS ------------------------------ Pokey_sound_init(uint32 freq17, uint16 playback_freq, uint8 num_pokeys) ----------------------------------------------------------------------- This function initializes the structures used by the PokeySound routines. This function takes three parameters: the main clock frequency, the playback frequency and the number of POKEY chips to emulate. The maximum number of POKEY chips emulated is configured at compile time. Though the maximum number of chips can be configured as one, the PokeySound 1.2 routines are recommended if only a single chip is to be emulated since they have will provide better performance. NOTE: The following information on the 1.79MHz clock applies only to the Atari 800 line of home computers. Many Arcade games also use the POKEY chip, but most use a different frequency for the POKEY clock. Refer to the schematics for more details. The main clock frequency is the frequency of the 1.79MHz source clock. To provide exact results, freq17 should be set equal to 1789790 Hz. As an alternative, freq17 can be set to an approximate frequency of 1787520 Hz. Using this approximate frequency will reduce aliasing and thus produce a clearer output signal. A constant has been defined for both of these values for your convenience. The names are FREQ_17_EXACT and FREQ_17_APPROX. The playback frequency is the frequency of the sound playback (the frequency used by the sound card). For best results, the playback frequency should be an even division of the main clock frequency. Since most of the sounds will be generated using the 64kHz clock, I also recommend making the playback frequency an even division of the 64kHz clock. The 64kHz clock is exactly equal to the main clock divided by 28. For the playback frequency, I recommend one of the following values: 1) FREQ_17_APPROX / (28*1), which is equal to 63840. Of course, most sound cards can't reproduce this frequency. 2) FREQ_17_APPROX / (28*2), which is equal to 31920. All of the newer cards will support this frequency. 3) FREQ_17_APPROX / (28*3), which is equal to 21280. All of the SB compatibles should support this frequency. 4) FREQ_17_APPROX / (28*4), which is equal to 15960. This may be the best choice, as it offers good sound reproduction with good performance. Of course, these options also assume you are using the approximate frequency for the main clock as well. Any of these choices will offer the best results when the main 64kHz clock is used, reasonable results when the 15kHz clock is selected, and marginal results when the 1.79MHz clock is selected (the only way to produce good results in all cases is to set the playback frequency to 1.79MHz!) Feel free to experiment to find other alternatives as well. This function has no return value (void). Update_pokey_sound (uint16 addr, uint8 val, uint8 chip, uint8 gain) ------------------------------------------------------------------- This function should be called each time an AUDC, AUDF or AUDCTL value changes. This function takes four parameters: the address to change, the new value, the chip to be updated, and the gain to be used. The lower four bits of the address should be one of the following values: Addr Description ------ ----------- 0x00 AUDF1 0x01 AUDC1 0x02 AUDF2 0x03 AUDC2 0x04 AUDF3 0x05 AUDC3 0x06 AUDF4 0x07 AUDC4 0x08 AUDCTL In order to support multiple POKEY chips, only the lower four bits of the address are used. Note that this routine can no longer be called with any address as it will affect the operation of the specified chip. The routine pre-calculates several values that are needed by the processing function. This is done to optimize performance. The output will be amplified (multiplied) by the gain (note that POKEY 2.0 used gain/16). If the output exceeds the maximum value after then gain and clipping is enabled, the output will be limited to reduce distortion. The best value for the gain depends on the number of POKEYs emulated and the maximum volume used. The maximum possible output for each channel is 15, making the maximum possible output for a single chip to be 60. Assuming all four channels on the chip are used at full volume, a gain of 4 can be used without distortion. If 4 POKEY chips are emulated and all 16 channels are used at full volume, the gain must be no more than one to prevent distortion. Of course, if only a few of the 16 channels are used or not all channels are used at full volume, a larger gain can be used. To enable clipping, define the logical CLIP before compiling. The default mode of operation is no clipping as this provides the best performance. If necessary (only required if the gain is too large), remove the comments from around the CLIP definition in the POKEY.H file. To enable signed output, define the logical SIGNED_SAMPLES before compiling. The default is unsigned 8-bit centered around 128. If unsigned samples are necessary, remove the comments from around the SIGNED_SAMPLES definition in POKEY.H. This function has no return value (void). Pokey_process (uint8 *buffer, uint16 n) --------------------------------------- This function calculates and fills a buffer with signed or unsigned 8-bit mono audio. This function takes two parameters: a pointer to the buffer to fill and the size of the buffer (limited to 65535). This function fills the buffer based on the requested size and returns. It automatically updates the pointers for the next call, so subsequent calls to this function will provide a continuous stream of data. The size of the buffer that is needed depends on the playback frequency. It is best to keep the buffer as small as possible to maximize response time to changes in the sound. Of course, the minimum size is dependent on system and emulator performance. Selecting the correct buffer size is a careful balance. Selecting a buffer size that is too small will produce noticeable clicks in the output, though selecting a size that is too large will cause a poor response time and possible delays in the system when the new buffer is filled. This function has no return value (void). License Information and Copyright Notice ======================================== PokeySound is Copyright(c) 1996-1998 by Ron Fries This library is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU Library General Public License as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. To obtain a copy of the GNU Library General Public License, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any permitted reproduction of these routines, in whole or in part, must bear this legend. atari800-5.0.0/DOC/r_device.txt000066400000000000000000000072551425067567700160260ustar00rootroot00000000000000---- about the R: device in Atari800 emulator ---- From: Chris Martin I have some code that I have integrated into my personal download of atari800 v1.3.0 for allowing talking to the Atari800 emulator via R: and network sockets. I have taken some code released by Tom Hunt and made some bug fixes and a few minor updates. I have tested this both under Solaris and Linux. I have plans to update the code to allow connections to the host machine serial ports for talking to a real Modem as well. I have tested this with Bobterm and Ice-T. If you need the ATR files for these programs, let me know. Once in Bobterm or Ice-T you can type 'ATDI localhost 23', to telnet. I would like to add options for allowing to compile this or not, and command line args for the connect string and the port number (it accepts connections on port 9000 now for in coming calls...) Best regards, Chris === The basic use of the R: emulation is that it emulates an Atari 850. If you use the bobterm.atr or the icet.atr disk image to run these terminal programs, you can telnet to any telnetable Atari BBS in the terminal screen by typing: ATDL ATDI
So, basically these two commands have been added on top of the 850 emulation. The ATDL toggles Line feeds on/off. the ATDI allow you to telnet out to an atari machine. For example, to telnet to my atari BBS to this in Bobterm: ATDL ATDI jybolac.homelinux.com 800 You could also to the following, if you are running on your linux/unix box and want to telnet from atari800: ATDL ATDI localhost (Of course, be sure to turn on ASCII translation in the terminal program). You can also telnet to atari800 by doing the following at any linux prompt: telnet 9000 Also, everything that can be done in the 850 manual as far as XIO commands are concerned can be done as well. To sum up, the R: emulation can be used with terminal programs like Bobterm and Ice-T, as well as BBS programs like carina and bbs express. I have tested it with bobterm, Ice-T and Carina, but not Express, yet. Again, feel free to email with any questions, until I can write a full document/web-page on it. Cheers, Chris === > > The basic use of the R: emulation is that it emulates an Atari 850. > > What is it? A printer? I never heard about it. The 850 interface is an RS232 device, for connecting non-Atari-specific modems (unlike the SX212, which had an SIO port, so didn't need an 850), and other 'serial port' devices. (Think COM1, COM2, etc. under MSDOS, or /dev/ttyS0, /dev/ttyS1, etc. under Linux) -bill! === It was called an "Interface module". It provided 4 RS-232 serial ports, one was fully functionaly, the others were stripped down. It also provided a parallel port. > Do you think this can be misused by hackers? Again not joking. We need > to keep an eye on this. > Anything can be exploited by hackers! :^) However, port 9000 only is enabled if you run a terminal program, so normal game operation wouldn't be a problem. Also, I put this at port 9000 so that normally it would be found, but there are always port sniffers. I would think it would be a problem only if there was a bug in a buffer overflow and you were running atari800 as root. But, I know of no problem currently....not saying that there is no problem. So, yes, it could be misused, but only if you are running a terminal program or a bbs program. ( I cannot say that my code is foolproof :) However, the R: device it is normally not on, and can only be turned on (thus, enabling port 9000), after run a program that calls the XIO commands for the R: device or you write a basic program that reads/writes to the R: device. So, normally I would say that it is safe. --Chris atari800-5.0.0/DOC/rdevice_faq.txt000066400000000000000000000441371425067567700165160ustar00rootroot00000000000000Atari800 R: Emulation Frequently Asked Questions ------------------------------------------------ Chris Martin 1. General Information 1.1 Q: What is an R: Device? A: The R: device is typically a handler for an RS-232 serial port. This serial port can be on an Atari 850, an MIO, Black Box or P:R:Connection from ICD. Most handlers are the same with subtle differences. 1.2 Q: What is the Atari 850? A: The Atari 850 is a computer peripheral for the Atari 8-bit line of computers that was released in 1980. It was called an "Interface module" that connected to the SIO port. It provided 4 RS-232 serial ports: one was fully functional (R1:) and 3 that did not provide all the RS-232 signals (R2:-R4:). It also provided one parallel port (P1:). 1.3 Q: What features of the 850 are supported by Atari800? A: Atari800 support several features of both the 850 hardware and the R: handler. There are two modes of operation for the R: device emulation: network sockets or serial port. I will talk more about this below, but you can either use the host serial ports (/dev/ttyS* under Linux) or network sockets (ports 9000-9003). XIO calls (The following are the BASIC examples): ------------------------------------------------- In each of the XIO calls below, 'channel' specifies the IOCB or channel number (1-7) and "Rn" specifies the RS-232-C port, where n = {1-4}. - XIO 32 - XIO 32, #channel, Aux1, Aux2, "Rn:" (Not Implemented) - XIO 34 - XIO 34, #channel, Aux1, Aux2, "Rn:" Aux1 bits do the following: Aux1[7] = DTR control enable (active high) Aux1[6] = Force DTR value Aux1[5] = RTS control enable (active high) Aux1[4] = Force RTS value Aux1[3] = not used Aux1[2] = not used Aux1[1] = XMT control enable (active high) Aux1[0] = Force XMT to SPACE (0) or MARK (1) * Not implemented To force DTR off: Aux1 = 128 To force DTR on: Aux1 = 192 Aux2 is unused. XIO 34 is really only used if using the serial port on the host, if you are using network sockets, then changing DTR is the only operation that you may perform. Turning DTR off, in this case, will disconnect. - XIO 36 - XIO 36, #channel, Aux1, Aux2, "Rn:" Aux1 select the Baud rate, the Word size and the stop bits. Add the values listed below to obtain the BASIC number. Aux1[3:0] = Baud rate where: 0 = 300 bps 1 = 57600 bps (was 45.5 bps in 850 spec) 2 = 50 bps 3 = 115200 bps (was 56.875 bps in 850 spec) 4 = 75 bps 5 = 110 bps 6 = 134.5 bps 7 = 150 bps 8 = 300 bps 9 = 600 bps 10 = 1200 bps 11 = 1800 bps 12 = 2400 bps 13 = 4800 bps 14 = 9600 bps 15 = 19200 bps Aux1[5:4] = Word size where: 0 = 8 bits 1 = 7 bits 2 = 6 bits 3 = 5 bits Aux1[6] = Select 230400 bps (feature added to Atari800) Aux1[7] = Stop bits 0 = 1 stop bit 1 = 2 stop bits Aux2 specifies whether or not the Interface Module should check Data Set Ready (DSR), Clear to Send (CTS) and/or Carrier Detect (CD). This function is currently not supported. - XIO 38 - XIO 38, #channel, Aux1, Aux2, "Rn:" Aux1 Specifies te translation mode, input/output parity modes and the append Line Feed option. Aux1[1:0] = Output Parity (* Not Implemented) 0 = Do not change parity bit 1 = Set output parity odd 2 = Set output parity even 3 = Set output parity bit to 1 Aux1[3:2] = Input Parity 0 = Ignore and do not change Parity bit (NO PARITY) 1 = Set Parity to ODD 2 = Set Parity to EVEN 3 = Do not use Parity (NO PARITY) Aux1[4] = Heavy Translation * Not Implemented 0 = Light Translation 1 = Heavy Translation Aux1[5] = Translation 0 = Translation ON 1 = Translation off Aux1[6] = Line Feeds 0 = Do not append LF 1 = Append LF after Carriage Return Aux1[7] = Not Used Aux2 is the numeric representation of the "won't translate" character for heavy translation. (Not currently supported.) - XIO 40 - XIO 40, #channel, Aux1, Aux2, "Rn:" XIO 40 starts concurrent I/O Mode. Both Aux1 and Aux2 are used to specify an output buffer, but using the specified input buffer is not currently supported. The default 256 byte internal buffer is use when both Aux1 and Aux2 = 0. However, since using a different buffer is not supported, the setting Aux1 or Aux2 to any value will not affect how this works. Other BASIC commands: --------------------- OPEN #Channel, Aux1, Aux2, "Rn:" Aux1 specifies the direction of the port. Aux1[7:4] = NOT USED. Aux1[3] = Specifies Output when high. Aux1[2] = Specifies Input when high. Aux1[1] = NOT USED. Aux1[0] = Specifies Concurrent I/O mode. Aux2 is not used. CLOSE #Channel Closes the Serial port or the network connection. GET, INPUT, PUT and PRINT - Use as normal STATUS #Channel, AVAR The STATUS command will update the memory locations 746-749. Please read the meaning of these locations below. AVAR is a variable that receives the status returned for the STATUS call itself. This number will be the same as the ERROR code. Atari Memory Address Locations: ------------------------------- The following locations will be updated after a STATUS call (after the STATUS function/routine runs). 0x2ea (746) - Error flags (* Not Implemented) bit[7] = Received Data Framing Error bit[6] = Received Data Byte Overrun Error bit[5] = Received Data Parity Error bit[4] = Received Data Buffer Overflow error bit[3] = Illegal Option Combination Attempted bit[2] = External Device Not Fully Ready Flag bit[1] = Error On Block Data Transfer Out bit[0] = Error On Command To Interface Module 0x2eb (747) - Concurrent I/O Mode: Number of Characters in Input buffer (Low Byte) Non-Concurrent I/O Mode: (* Not Implemented) bit[7] = Data Set Ready (DSR) status during current STATUS command. 0=DSR is low; 1=DSR is hi. bit[6] = DSR status during last STATUS command. bit[5] = Clear to Send (CTS) status during current STATUS command. 0=CTS is low; 1=CTS is hi. bit[4] = CTS status during last STATUS command. bit[3] = CARRIER DETECT (CD) status during current STATUS command. 0=CD is low; 1=CD is high. bit[2] = CD status during last STATUS command. bit[1] = NOT USED. bit[0] = Data Receive (RCV) current status. 1 = MARK (1) 0 = SPACE (0) 0x2ec (748) - Concurrent I/O Mode: Number of Characters in Input buffer (High Byte) This is always zero in Atari800 since the input buffer is only 256 bytes. Non-Concurrent I/O Mode: Always zero. 0x2ed (749) - Concurrent I/O Mode: Number of Character in Output Buffer. This is always zero in Atari800 since we always output the character, so a write of more than one character will not work. Non-Concurrent I/O Mode: Always Zero. 1.4 Q: What features of the 850 are not currently supported by Atari800? A: 1. Cannot set RTS or XMT in XIO 34. 2. Cannot select 45.5 bps or 56.875 bps in XIO 36. 3. Cannot monitor DSR, CTS or CD in XIO 36. 4. Heavy ASCII/ATASCII translation. 5. Early force of short I/O block (XIO 32). This forces the output buffer to be sent, but it is not currently implement as we now always send after a write. 6. Cannot set output parity with XIO 38. The Output parity is set the same as the input parity. 7. Using a different input buffer, as specified by XIO 40 is not supported. I am not sure anyone ever used this anyway... 8. Not all functions return an error code if something fails. Most of the functions should return an error to regY. 9. Error bits at location 746 are not implemented. 10. Although you can access each serial port or talk to the network to a different socket, you cannot have more than one R: device open at a time. For example, you cannot open R1: and R2: and expect things to behave sanely. The reason for this is that currently there is only one buffer for ALL serial ports. 11. Error reporting to address 747 during non-concurrent mode has not been implemented. In fact non-concurrent mode has not been tested! I invite you to test it and let me know!!! 1.5 Q: Is there a version of the 850 Operator's Manual On-line? A: I am currently working on scanning the original Document. See below in the links section. 1.6 Q: Do you have some example code? A: Yes. Below are several BASIC programs taken from the 850 Operator's Manual. Also included is a C program written by Christian Groessler using the rs232 library for cc65 (www.cc65.org). ------------------------------------------------ RECEIVE PROGRAM ------------------------------------------------ 110 DIM INLINE$(255) 200 REM 201 REM ========== 202 REM 210 LET TRANSLATE=32:REM [Full ATASCII] 220 XIO 38,#1,TRANSLATE,0,"R1:" 230 REM 240 PRINT "Receive file's full name"; 250 INPUT INLINE$ 260 OPEN #2,8.0,INLINE$ 270 REM 280 OPEN #1,13,0,"R1:" 290 XIO 40,#1,0,0,"R1:":REM [Start I/0] 500 REM 501 REM ========== 502 REM 510 FOR ETERNITY=1 TO 2 STEP 0 520 REM 530 INPUT #1;INLINE$:REM [Get line] 540 CLOSE #1:REM [Stop I/O] 550 REM 560 IF INLINE$="EOF EOF EOF" THEN 900 570 REM 580 PRINT #2; INLINE$:REM [Save line] 590 PRINT INLINE$:REM [Echo onscreen] 600 REM 610 OPEN #1,13,0,"R1:" 620 XIO 40,#1,0,0,"R1:":REM [Start I/O] 630 PRINT #1:REM [Send reply] 640 REM 650 NEXT ETERNITY 900 REM 901 REM ========== 902 REM 910 CLOSE #2:REM [EOF received] 999 END ------------------------------------------------ SEND PROGRAM ------------------------------------------------ 110 DIM OUTLINE$(255) 200 REM 201 REM ========== 202 REM 210 LET TRANSLATE=32:REM [Full ATASCII] 220 XIO 38,#2,TRANSLATE,0,"Rl:" 230 REM 240 PRINT "Send file's full name"; 250 INPUT OUTLINE$ 260 OPEN #1,4,0,OUTLINE$ 500 REM 501 REM ========== 502 REM 510 FOR ETERNITY=1 TO 2 STEP 0 520 REM 530 TRAP 900:REM [Trap end file #1] 540 INPUT #1, OUTLINE$:REM [Get line] 550 PRINT OUTLINE$:REM [Echo onscreen] 560 REM 570 OPEN #2,13,0,"Rl:" 580 XIO 40,#2,0,0,"Rl":REM [Start I/O] 590 PRINT #2;OUTLINE$:REM [Send line] 600 INPUT #2;OUTLINE$:REM [Get reply] 610 CLOSE #2:REM [Stop I/O] 620 REM 630 NEXT ETERNITY 900 REM 901 REM ========== 902 REM 910 OPEN #2,8,0,"Rl:":REM [Send EOF] 920 PRINT #2;"EOF EOF EOF" 930 CLOSE #2:CLOSE #1:REM [All done] 999 END ------------------------------------------------ rs232t.c ------------------------------------------------ /* $Id$ * * RS232 library test * (c) by Christian Groessler, chris@groessler.org */ #include #include #include #include <6502.h> #include #include #include void main(void) { char err; unsigned char c, baud, t; do { printf("\n"); printf("0 = 300baud\n"); printf("1 = 1200baud\n"); printf("2 = 2400baud\n"); printf("3 = 4800baud\n"); printf("4 = 9600baud\n"); printf("Enter type (0-4): "); c = cgetc(); printf("%c\n",c); } while (c < '0' || c > '4'); t = c - '0'; switch (t) { case 0: baud = RS_BAUD_300; break; case 1: baud = RS_BAUD_1200; break; case 2: baud = RS_BAUD_2400; break; case 3: baud = RS_BAUD_4800; break; case 4: baud = RS_BAUD_9600; break; } err = rs232_init(0); printf("rs232_init: %d\n", err); err = rs232_params(baud | RS_BITS_8 | RS_STOP_1, RS_PAR_NONE); printf("rs232_params: %d\n", err); printf("waiting for stuff to arrive...\n"); /* display all received chars, * send all typed chars to the other end, * type ESC to exit */ while(1) { if (kbhit()) { c = cgetc(); if (c == CH_ESC) break; else rs232_put(c); } if (rs232_get(&c) != RS_ERR_NO_DATA) cputc(c); } rs232_done(); } ------------------------------------------------ 1.7 Q: What Atari programs use the R: device? A: Terminal programs: Bobterm, Ice-T, etc. BBS programs: Express, Carina, etc. Some Games: I know I saw a Modem Chess game back in the day. I will have to find the ATR image of this. 1.8 Q: How does the Serial Port Version work? A: Basically, in this mode, when you open R1: under Atari800, you will open the first serial port on the host computer. Under Linux, this will be /dev/ttyS0. Opening R2: will open /dev/ttyS1 and so on. When you control the baud rate, parity, stop bits (with XIO 36), you will control the host serial port. The same will all the other configuration options, this will set those options on the host serial port. This mode can be used to connect to a real MODEM, or to use a null-modem cable to connect to you Linux host. The null-modem could be used to run SLIP(Linux) and Contiki on Atari800. The R: device emulation will take care of adding Line Feeds and Light ASCII translation. 1.9 Q: How does the Network Sockets version work? A: This mode works similarly to the Serial Port Version, except that instead of connecting to the host serial ports you will connect to a network socket. All configuration such as baud rate, parity et cetera will be ignored, since these mean nothing in this mode. Opening an R: device will open a network socket and allow other users to "telnet" into Atari800. For example, if you open R1:, port 9000 will accept connections from other hosts (or the local host). R2: will accept connections on 9001, and so on. Only one of these can currently be opened at one time. (I may add support for multiple R: devices later.) Allow others to connect to your emulated Atari can be used to run an emulated BBS or to potentially run a web server from Atari800. Also included with the Network Sockets version of the R: Device emulation is a somewhat handicapped Modem emulation. There are only two commands that are implemented: ATDL - Translates carrage returns into line feeds. This may not be needed if the "add line feeds" in XIO 38 is used. But I found that it is not always used by terminal programs, and thus some telnet and ftp servers expect a line feed, causing you to not be able to do anything once connected. Typing 'ATDL' in a terminal program such as Bobterm or Ice-T will toggle CR translation on/off. ATDI
This command allows you to "dial" out to an external host. For example you can connect to my BBS by typing the following: 'ATDI jybolac.homelinux.com 800' This connects Atari800 to the external host 'jybolac.homelinux.com' at port 800. These commands were chosen to somewhat look like modem 'AT' commands. The R: device emulation will take care of adding Line Feeds and Light ASCII translation, same as in the Serial Port Version. 1.10 Q: Who wrote the R: Device Emulation? A: Tom Hunt wrote the original network sockets version. I, Chris Martin, updated that code, added the simple modem emulation and added code to access the serial ports on the host computer via the R: device. I also added ASCII/ATASCII translation. 1.11 Q: Do you have any URLs for more information? A: Sure! I am working on scanning and placing the Atari 850 Operator's Manual online here: http://jybolac.virtualave.net/atari/850man/ The MIO documentation has some great info that still applies to the 850: http://www.1000bit.net/support/manuali/atari/pdf/icd_mio.pdf The Black-Box Documentation has some great info on the 850 as well: http://nleaudio.com/css/products/BB_Docs.htm Some Atari Magazine Articles: http://www.atarimagazines.com/creative/v9n6/177_A_letter_quality_alternat.php The JL-BASIC Manual: http://www.jeff-jackson.com/Atari/JLS_Manual.html Mapping the Atari will show some information about some R:-related addresses (746-747) and IOCB: http://www.atariarchives.org/mapping/memorymap.php atari800-5.0.0/DOC/readme.html.in000066400000000000000000000103631425067567700162270ustar00rootroot00000000000000 Atari800 emulator readme

Atari800 emulator version $A800VERSION

Table Of Contents:

  • INTRODUCTION
  • INSTALLATION
  • KEYS
  • RUNNING ATARI800
  • REPORTING BUGS
  • COPYRIGHT
  • CONTACT
  • INTRODUCTION

    This is the version $A800VERSION of Atari800 for MS Windows. Atari800 is a free (you don't pay for it, you can get source code and you are welcome to develop it) and portable (can run on many weird machines and different operating systems) emulator of Atari 8-bit computer systems and the 5200 console, developed by
    many people under the GPL. More information you find in the README file.

    INSTALLATION

    To install this Atari800 package you will need the following:
  • Windows 9x
  • DirectX
  • Atari 800 ROM files (see INSTALL file for more info)
  • Seperate folder to put the emulator and ROM files in
  • Extract Atari800 zip file to destination folder and copy ROM files to the same folder. Run atari800 and you will be prompted for several config values, if you don't know the correct value just press Enter.

    KEYS

  • F1 Menu (built in User Interface)
  • F2 Option
  • F3 Select
  • F4 Start
  • F5 Warm Reset
  • Shft+F5 Cold Reset
  • F8 Monitor
  • F9 Exit Emulator
  • F10 Screenshot
  • F11 Change autofire mode
  • Joystick 0 is operated by the numeric keypad:
  • 7 - forward/left
  • 8 - forward
  • 9 - forward/right
  • 4 - left
  • 6 - right
  • 1 - back/left
  • 2 - back
  • 3 - back/right
  • 0 - fire key
  • RUNNING ATARI800

    You can use some command line parameters to atari800. To add command line parameter create a shortcut to atari800 and append them to Properties/Shortcut/Target window.
    If you need '-mouse pad' option you should have something like:
    "C:\Program Files\Atari800\Atari800.exe -mouse pad"
    Available command line options are: (see
    USAGE for more) $HELPMENU

    REPORTING BUGS

    If you have a problem running this emulator please read
    FAQ first.
    Look at BUGS first to not report same bug hundred times, please.
    If the problem persists you can contact Atari800 developers at atari800-users mailing list or you can use GitHub issues.

    COPYRIGHT

    Copyright © 1995 David Firth.
    Copyright © 2002 Atari800 development team
    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.
    See COPYING file for details.

    All trademarks are the property of their respective companies.

    CONTACT

    Atari800 Windows port maintainer:
    Krzysztof Nikiel
    You can find more info at Atari800 home page.

    Page by Krzysztof Nikiel
    atari800-5.0.0/DOC/trainer.txt000066400000000000000000000057131425067567700157070ustar00rootroot00000000000000Trainer searcher ================ The trainer searcher is a set of four commands (TSS, TSC, TSN and TSP) to find interesting ram addresses. You have two options of either a conventional trainer or of a deep trainer, but in either case you will have to put the game into a state first where the lifes are being displayed (means: starting a trainer search for lifes in the title screen yields an unreliable result). In both trainers, TSS serves to break an old search and initialize a new one by copying the currently active Atari800 memory to a shadow buffer and setting a flag for each storage cell to "could be a desired location". When giving a number as argument to TSS, then for all memory locations which do not match the number the flag will be set to "is not a desired location". In the process also the other commands TSC and TSN will sort out memory adresses whose values do not satisfy the requirements of the commands. In a normal trainer, just create with the current number of your lifes as parameter the command TSS , then change your lives and use then with the changed value TSC (TSN does here the same). Print the possible addresses with TSP and look if there are few enough. TSP defaults to a list of the first 64 adresses to print, but may be adapted to your needs by an argument of the maximum count of addresses to print. If there are still more possible life-addresses left than you want to scan manually, repeat losing or gaining a life and executing the TSC afterwards. E.g. Jet Set Willy fits in this category. In a deep trainer you have no clue what the trainer value might be, although it has one commonality - the effect uses one memory location. So start the trainer with TSS (without any number as you dont know it), run around a bit, and lets say you have still all lifes. So you should choose TSN now, return to the game, then lose a life and use TSC, and so on. Alternating use of TSC and TSN yields the best results. Like in the normal trainer, TSP prints a maximum number of possible candidates. Save a state of the game, change one candidate and look what happens. If it has not been the life counter you hoped for load the saved state and change the value of the next address. E.g. the life counter address of Domain of the Undead can only be found by a deep trainer search. The search goes through the currently active memory layout of the Atari800. It does not switch ram banks on its own. So if you presume that a trainer address lies not in the currently active memory layout you must switch the memory banks by their respective control adresses before using the trainer searcher commands (and of course, before continuing the game, switch back to the memory banks the running program expects!). It is on purpose that the trainer searcher state is not influenced by resets as there are some very changelling searches which require resets (like e.g. the search for the treasure finding ability of Alternate Reality). atari800-5.0.0/Makefile.am000066400000000000000000000003101425067567700151150ustar00rootroot00000000000000ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = foreign SUBDIRS = DOC src if !CONFIGURE_TARGET_ANDROID SUBDIRS += tools endif doc_DATA = COPYING README.TXT EXTRA_DIST = $(doc_DATA) act data debian util atari800-5.0.0/Makefile.in000066400000000000000000000645761425067567700151560ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @CONFIGURE_TARGET_ANDROID_FALSE@am__append_1 = tools subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/sdl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = src/android/jni/Android.mk CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = DOC src tools am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/src/android/jni/Android.mk.in COPYING compile \ config.guess config.sub install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAGS_NOANSI = @CFLAGS_NOANSI@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAVACFLAGS = @JAVACFLAGS@ JAVAFLAGS = @JAVAFLAGS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NDK_BUILD = @NDK_BUILD@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_WINDRES = @ac_ct_WINDRES@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = foreign SUBDIRS = DOC src $(am__append_1) doc_DATA = COPYING README.TXT EXTRA_DIST = $(doc_DATA) act data debian util all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): src/android/jni/Android.mk: $(top_builddir)/config.status $(top_srcdir)/src/android/jni/Android.mk.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-docDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-docDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: atari800-5.0.0/README.TXT000066400000000000000000000024241425067567700144270ustar00rootroot00000000000000Atari800 emulator version 5.0.0 ------------------------------- This is a free and portable Atari 8-bit computer and 5200 console emulator, originally written by David Firth and now developed by the Atari800 Development Team (please see DOC/CREDITS). This program is copyrighted and released under the GPL (see COPYING). Please read DOC/README, DOC/INSTALL and DOC/USAGE and eventual platform specific versions of the above mentioned files. For news in this release please read DOC/NEWS. If you have a problem running this emulator please read DOC/FAQ first. If the problem persists then please ask in newsgroup comp.sys.atari.8bit or in the atari800-users mailing list (see below). Look at DOC/BUGS before reporting something you consider a bug. If you want to help developing Atari800 emulator you can subscribe to our mailing list (http://lists.sourceforge.net/lists/listinfo/atari800-users). DOC/TODO might point you in the right direction. This version, and all previous versions back to v0.8.2 have been released Petr Stehlik and are available at internet (current project URL is below). Thanks go to original author David Firth and all the people that contributed since then. EnJoy! Petr Stehlik May 28, 2022 E-mail: pstehlik@sophics.cz Project homepage: http://atari800.github.io/ atari800-5.0.0/aclocal.m4000066400000000000000000001254641425067567700147430ustar00rootroot00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/sdl.m4]) atari800-5.0.0/act/000077500000000000000000000000001425067567700136365ustar00rootroot00000000000000atari800-5.0.0/act/Real.act000066400000000000000000000014001425067567700152050ustar00rootroot00000000000000212?>?MLM[[[jijyxya.l;zJXg v*:ʝCڭSbrl$w0@N]"l1{ÅPՓ[iy‰ϗߦu#$14@CNP^`mo}އ핖bqn|{*9GWeu~܍Vaq,:HXǩgոw€АߟFQ"`2nA|OȊ^֙m|ϣ߳!)-5=DKSYahow~⇎5A,P:^HlX{gv•돲?pKy!Y/h>uM\ltكYe&r5D,P;`JoY~cćrӖ⥒îҾ\h"u2? O^*n;wDScsV(b6pE~Sbp&/>M\k{3K@WMe]sjz(8HXfuK<XIeWtet&.Ǻ>M]kz`.m:zIXg v*”:˝DڬSbsatari800-5.0.0/act/XFormer.act000066400000000000000000000014001425067567700157040ustar00rootroot00000000000000 @@@```|||0(`<xPl 0DP\ht$8$P4pPp(ĬD̸`Լhpx̀Ԑܜ, Hl, P4`@pTxdԌxؘܨଘ䰜丠İ, X$(DGQ_mz(y@ Yp$9AJT^m|5B P d(yEЍKԢQٰX`kwуא۝ߪߪ&/&=DLOZZheuq "8-H>XOaYkdzt)Z8vH\q2HNUp/C9RDaAz>!J.W;\Uapizr| A T h }!G-n@xM[zA Sfw  H"$'A[n5? J-_Ot Y$d(.4:AEINSS&0$8#@QTi15:§>յC=864X}}@Xp$:Qd'w0Ѕ:DNX\`q˃˃atari800-5.0.0/act/gray.act000066400000000000000000000014001425067567700152640ustar00rootroot00000000000000"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwww"""333DDDUUUfffwwwatari800-5.0.0/act/jakub.act000066400000000000000000000014001425067567700154160ustar00rootroot00000000000000---;;;IIIWWWeeesss\#j1x?M [i&w4B̓Pڡ^lzˈٖi w"0%>3LAZOh]vkلy璇ʿl 8zF&T4bBpP~^lzꈶders!/=KYguR`n#|1?MϦ[ݴiwЅޓ:HV,d:rHԀVdrƜԪ-,;:IHWVedsr.<#J1X?fMt[iw>eLsZh-v;IWesK8YF gTub%p3~AO]kɶyćҕR ` n%|3(A6OD]Rk`ynЇ|ޕ죘S ao'} 5C&Q4_BmP{^lzN!\/j=xKY gu'5CQ_m{-C;QI_Wme{s+9GUcqF3TAbOp]~ky '5ıCҿQ_m{atari800-5.0.0/atari800.spec000066400000000000000000000122271425067567700152770ustar00rootroot00000000000000# generic defines used by all distributions. # %define ver 5.0.0 # When adding a target, add an $options_ variable to the %build # section, and add %{_bindir}/%{name}- to the files list in the # %files section. %define targets sdl %define maintarget sdl %define myrelease 1 %define mybuild 1 %define _rel %{myrelease}.%{mybuild} # define the package groups. If they all followed the same naming convention, # these would be the same. They don't, and so they aren't :( # %define suse_group System/Emulators/Other %define mandriva_group Console/Emulators %define fedora_group Console/Emulators # defaults # %define group Console/Emulators %define rel %{_rel} %define my_suse 0 %define my_mandriva 0 %define my_fedora 0 %define my_centos 0 %if 0%{?suse_version:1}%{?sles_version:1} %define my_suse 1 %endif # if present, use %distversion to find out which Mandriva version is being built # %if 0%{?distversion:1} %if 0%{?!mandriva_version:1} %define mandriva_version %(echo $[%{distversion}/10]) %endif %endif %if 0%{?mandriva_version:1} %define my_mandriva 1 %define my_vendor mandriva %endif # if present, decode %dist to find out which OS package is being built on # %if 0%{?dist:1} # Centos or Fedora # %define my_which_os %(i=%{dist} ; if [ "${i::3}" == ".fc" ] ; then echo "1" ; else echo "0" ; fi ) %if %{my_which_os} %if 0%{?!fedora_version:1} %define fedora_version %(i=%{dist} ; echo "${i:3}" ) %endif %else %if 0%{?!centos_version:1} %define centos_version %(i=%{dist} ; echo "${i:3}00" ) %endif %endif %endif %if 0%{?fedora_version:1} %define my_fedora 1 %define my_vendor fedora %endif %if 0%{?centos_version:1} %define my_centos 1 %define my_vendor centos %endif %if %{my_suse} %if %{suse_version} %define rel %{myrelease}.suse%(echo $[%suse_version/10]).%{mybuild} %else %define rel %{myrelease}.sles%{sles_version}.%{mybuild} %endif %define group %{suse_group} %endif # building on a Mandriva/Mandrake Linux system. # # this should create a release that conforms to the Mandriva naming conventions. # %if %{my_mandriva} %define rel %{myrelease}.mdv%{mandriva_version}.%{mybuild} %define group %{mandriva_group} %endif # building on a Fedora Core Linux system. # # this should create a release that conforms to the Fedora naming conventions. # %if %{my_fedora} %if 0%{?!fedora_version:1} %define fedora_version %(i="%dist" ; echo "${i:3}") %endif %if 0%{?!dist:1} %define dist .fc%{fedora_version} %endif %define rel %{myrelease}%{dist}.%{mybuild} %define group %{fedora_group} %endif # building on a Centos Linux system. # # this should create a release that conforms to the Centos naming conventions. # %if %{my_centos} %if 0%{?!centos_version:1} %define centos_version %(i="%dist" ; echo "${i:3}") %endif %if 0%{?!dist:1} %define dist .el%{centos_version} %endif %define rel %{myrelease}%{dist}.%{mybuild} %define group %{fedora_group} %endif %if %{my_suse} Requires: SDL >= 1.2.10 BuildRequires: SDL-devel >= 1.2.10 %endif %if %{my_mandriva} Requires: libSDL >= 1.2.10 BuildRequires: libSDL-devel >= 1.2.10 %endif %if %{my_fedora} Requires: SDL >= 1.2.10 BuildRequires: SDL-devel >= 1.2.10 %endif # Now for the meat of the spec file # Name: atari800 Version: %{ver} Summary: An emulator of 8-bit Atari personal computers License: GPLv2 URL: http://atari800.github.io/ Source: http://prdownloads.sourceforge.net/atari800/%{name}-%{version}.tar.gz Group: %{group} Release: %{rel} BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot BuildRequires: zlib-devel BuildRequires: libpng-devel BuildRequires: readline-devel %description Atari800 is an emulator for Atari 8-bit computer systems including the 400, 800, 1200XL, 600XL, 800XL, 65XE, 130XE, 800XE and the XE Game System, and also for the Atari 5200 SuperSystem console. It can be used on console, FrameBuffer or X11. It features excellent compatibility, HIFI sound support, artifacting emulation, precise cycle-exact ANTIC/GTIA emulation and more. Authors: David Firth and Atari800 Development Team (see CREDITS for a full list) %prep %setup -q -n %{name}-%{version} %build options_sdl="--with-video=sdl --with-sound=sdl" #options_ncurses="--with-video=ncurses --with-sound=oss" #options_x11="--target=x11 --with-sound=oss" for target in %{targets} do %configure `eval echo \\\$options_${target}` %{__make} %{?jobs:-j%jobs} mv src/%{name} src/%{name}-${target} %{__make} clean done touch atari800 %install cd src mkdir -p %{buildroot}/%{_bindir} mkdir -p %{buildroot}/%{_mandir}/man1 for target in %{targets} do install -m 755 %{name}-$target %{buildroot}/%{_bindir} done ( cd %{buildroot}/%{_bindir} ln -sf %{name}-%{maintarget} %{name} ) mv %{name}.man %{name}.1 install -m 644 %{name}.1 %{buildroot}/%{_mandir}/man1/ %files %defattr(-,root,root) %{_bindir}/%{name} %{_bindir}/%{name}-%{maintarget} %{_mandir}/man1/%{name}.1.* %doc COPYING %doc README.TXT %doc DOC/BUGS %doc DOC/ChangeLog %doc DOC/CREDITS %doc DOC/FAQ %doc DOC/INSTALL %doc DOC/NEWS %doc DOC/PORTING %doc DOC/README %doc DOC/TODO %doc DOC/USAGE %clean %{__rm} -rf %{buildroot} %{__rm} -rf %{_builddir}/%{name}-%{version}-%{release}-buildroot atari800-5.0.0/compile000077500000000000000000000162451425067567700144550ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: atari800-5.0.0/config.guess000077500000000000000000001271631425067567700154210ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval "$set_cc_for_build" cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac case "${UNAME_MACHINE}" in i?86) test -z "$VENDOR" && VENDOR=pc ;; *) test -z "$VENDOR" && VENDOR=unknown ;; esac test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-${VENDOR}-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-${VENDOR}-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-${VENDOR}-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-${VENDOR}-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-${VENDOR}-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-${VENDOR}-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-${VENDOR}-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-${VENDOR}-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-${VENDOR}-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-${VENDOR}-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-${VENDOR}-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-${VENDOR}-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-${VENDOR}-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-${VENDOR}-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-${VENDOR}-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "$HP_ARCH" = "" ]; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ "$HP_ARCH" = hppa2.0w ] then eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-${VENDOR}-osf1mk else echo "$UNAME_MACHINE"-${VENDOR}-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-${VENDOR}-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-${VENDOR}-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-${VENDOR}-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-${VENDOR}-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-${VENDOR}-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-${VENDOR}-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-${VENDOR}-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-${VENDOR}-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-${VENDOR}-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; arm*:Linux:*:*) eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" test "x$CPU" != x && { echo "$CPU-${VENDOR}-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-${VENDOR}-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-${VENDOR}-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-${VENDOR}-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-${VENDOR}-linux-"$LIBC" ;; PA8*) echo hppa2.0-${VENDOR}-linux-"$LIBC" ;; *) echo hppa-${VENDOR}-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR}-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-${VENDOR}-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-${VENDOR}-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-${VENDOR}-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-${VENDOR}-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-${VENDOR}-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-${VENDOR}-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-${VENDOR}-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-${VENDOR}-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-${VENDOR}-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-${VENDOR}-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-${VENDOR}-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-${VENDOR}-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-${VENDOR}-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-${VENDOR}-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-${VENDOR}-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-${VENDOR}-tops10 exit ;; *:TENEX:*:*) echo pdp10-${VENDOR}-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-${VENDOR}-tops20 exit ;; *:ITS:*:*) echo pdp10-${VENDOR}-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-${VENDOR}-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-${VENDOR}-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-${VENDOR}-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: atari800-5.0.0/config.sub000077500000000000000000001064501425067567700150600ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo "$1" | sed 's/-[^-]*$//'` if [ "$basic_machine" != "$1" ] then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh5el) basic_machine=sh5le-unknown ;; simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4*) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac echo "$basic_machine$os" exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: atari800-5.0.0/configure000077500000000000000000013675031425067567700150150ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Atari800 5.0.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: pstehlik@sophics.cz about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Atari800' PACKAGE_TARNAME='atari800' PACKAGE_VERSION='5.0.0' PACKAGE_STRING='Atari800 5.0.0' PACKAGE_BUGREPORT='pstehlik@sophics.cz' PACKAGE_URL='' ac_unique_file="src/atari.c" ac_no_link=no # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS CFLAGS_NOANSI CCASFLAGS CCAS JAVACFLAGS JAVAFLAGS WANT_R_IO_DEVICE_FALSE WANT_R_IO_DEVICE_TRUE WANT_PAL_BLENDING_FALSE WANT_PAL_BLENDING_TRUE WANT_NTSC_FILTER_FALSE WANT_NTSC_FILTER_TRUE WANT_XEP80_EMULATION_FALSE WANT_XEP80_EMULATION_TRUE WANT_FALCON_CPUASM_FALSE WANT_FALCON_CPUASM_TRUE WITH_OPENGL_FALSE WITH_OPENGL_TRUE WANT_POKEYREC_FALSE WANT_POKEYREC_TRUE WANT_IDE_FALSE WANT_IDE_TRUE WITH_VIDEO_CODEC_ZMBV_FALSE WITH_VIDEO_CODEC_ZMBV_TRUE WITH_VIDEO_CODEC_PNG_FALSE WITH_VIDEO_CODEC_PNG_TRUE WITH_VIDEO_RECORDING_FALSE WITH_VIDEO_RECORDING_TRUE WITH_FILE_EXPORT_FALSE WITH_FILE_EXPORT_TRUE WITH_MULTIMEDIA_FALSE WITH_MULTIMEDIA_TRUE WITH_AUDIO_CODEC_MP3_FALSE WITH_AUDIO_CODEC_MP3_TRUE WANT_PBI_MIO_OR_BB_FALSE WANT_PBI_MIO_OR_BB_TRUE WANT_PBI_XLD_OR_VOICEBOX_FALSE WANT_PBI_XLD_OR_VOICEBOX_TRUE WANT_VOICEBOX_FALSE WANT_VOICEBOX_TRUE WANT_PBI_XLD_FALSE WANT_PBI_XLD_TRUE A8_USE_SDL_FALSE A8_USE_SDL_TRUE WITH_SOUND_LIBATARI800_FALSE WITH_SOUND_LIBATARI800_TRUE WITH_SOUND_DOSSB_FALSE WITH_SOUND_DOSSB_TRUE WITH_SOUND_WIN_FALSE WITH_SOUND_WIN_TRUE WITH_SOUND_SDL_FALSE WITH_SOUND_SDL_TRUE WITH_SOUND_OSS_FALSE WITH_SOUND_OSS_TRUE WITH_SOUND_FALCON_FALSE WITH_SOUND_FALCON_TRUE WITH_SOUND_JAVANVM_FALSE WITH_SOUND_JAVANVM_TRUE WITH_SOUND_FALSE WITH_SOUND_TRUE WANT_PBI_BB_FALSE WANT_PBI_BB_TRUE WANT_PBI_MIO_FALSE WANT_PBI_MIO_TRUE WANT_EMUOS_ALTIRRA_FALSE WANT_EMUOS_ALTIRRA_TRUE WANT_NEW_CYCLE_EXACT_FALSE WANT_NEW_CYCLE_EXACT_TRUE WANT_CURSES_BASIC_FALSE WANT_CURSES_BASIC_TRUE WITH_VIDEO_NO_FALSE WITH_VIDEO_NO_TRUE WITH_VIDEO_LIBATARI800_FALSE WITH_VIDEO_LIBATARI800_TRUE WITH_VIDEO_CURSES_FALSE WITH_VIDEO_CURSES_TRUE WITH_VIDEO_DOSVGA_FALSE WITH_VIDEO_DOSVGA_TRUE WITH_VIDEO_SDL_FALSE WITH_VIDEO_SDL_TRUE WITH_VIDEO_JAVANVM_FALSE WITH_VIDEO_JAVANVM_TRUE SDL_LIBS SDL_CFLAGS SDL_CONFIG LIBOBJS CONFIGURE_TARGET_X11_FALSE CONFIGURE_TARGET_X11_TRUE CONFIGURE_TARGET_LIBATARI800_FALSE CONFIGURE_TARGET_LIBATARI800_TRUE CONFIGURE_TARGET_WINDX_FALSE CONFIGURE_TARGET_WINDX_TRUE CONFIGURE_TARGET_RPI_FALSE CONFIGURE_TARGET_RPI_TRUE CONFIGURE_TARGET_PS2_FALSE CONFIGURE_TARGET_PS2_TRUE CONFIGURE_TARGET_FALCON_FALSE CONFIGURE_TARGET_FALCON_TRUE CONFIGURE_TARGET_ANDROID_FALSE CONFIGURE_TARGET_ANDROID_TRUE CONFIGURE_HOST_WIN_FALSE CONFIGURE_HOST_WIN_TRUE CONFIGURE_HOST_DOS_FALSE CONFIGURE_HOST_DOS_TRUE CONFIGURE_HOST_JAVANVM_FALSE CONFIGURE_HOST_JAVANVM_TRUE WITH_LIBPNG_FALSE WITH_LIBPNG_TRUE EGREP GREP CPP XMKMF ac_ct_WINDRES WINDRES RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC NDK_BUILD MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking with_x enable_unalignedwords with_video with_sdl_prefix with_sdl_exec_prefix enable_sdltest enable_cursesbasic enable_newcycleexact enable_veryslow enable_crashmenu enable_pagedattrib enable_cyclesperopcode enable_bufferedlog enable_altirra_bios enable_monitorasm enable_monitorbreak enable_monitorbreakpoints enable_monitorhints enable_monitorprofile enable_monitortrace enable_monitoransi enable_monitorutf8 enable_eventrecording enable_pbi_mio enable_pbi_bb with_sound enable_synchronized_sound enable_nonlinear_mixing enable_interpolatesound enable_stereosound enable_volonlysound enable_consolesound enable_seriosound enable_clipsound enable_pbi_xld enable_voicebox with_mp3 enable_videorecording enable_pngcodec enable_zmbvcodec enable_ide enable_largefile enable_pokeyrec enable_onscreenkeyboard with_readline with_opengl enable_opengl_by_default enable_falconcpuasm enable_linuxjoystick enable_cursorblock enable_riodevice enable_rnetwork enable_rserial ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS XMKMF CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Atari800 5.0.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/atari800] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Atari800 5.0.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-maintainer-mode disable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-unalignedwords Override usage of unaligned words --disable-sdltest Do not try to compile and run a test SDL program --enable-cursesbasic No bitmap graphics emulation (curses targets only) (default=ON) --enable-newcycleexact Allow color changes inside a scanline (default=ON) --enable-veryslow Use very slow computer support (use with the -refresh option) (default=OFF) --enable-crashmenu Display a menu after a CIM instruction (default=ON) --enable-pagedattrib Use page-based attribute array (default=OFF) --enable-cyclesperopcode Update ANTIC counter in each opcode's emulation (default=OFF) --enable-bufferedlog Use buffered debug output (until the graphics mode switches back to text mode) (default=OFF) --enable-altirra_bios Use Altirra OS to allow operation when real ROMs are not available (default=ON) --enable-monitorasm Provide an assembler in the monitor (default=ON) --enable-monitorbreak Support code breakpoints and execution history (slower emulation) (default=ON) --enable-monitorbreakpoints Support user-defined breakpoints (default=OFF) --enable-monitorhints Provide hints in the disassembler (human-readable address labels) (default=ON) --enable-monitorprofile 6502 opcode profiling (default=OFF) --enable-monitortrace Support TRACE command in the monitor (default=OFF) --enable-monitoransi Support ANSI terminal control (default=ON) --enable-monitorutf8 Support UTF-8 for printing ATASCII characters in the monitor (default=ON) --enable-eventrecording Support event recording (default=ON) --enable-pbi_mio Emulate the MIO board (default=ON) --enable-pbi_bb Emulate the Black Box (default=ON) --enable-synchronized_sound Use synchronized sound (default=ON) --enable-nonlinear_mixing Use nonlinear POKEY mixing (default=ON) --enable-interpolatesound Use sound interpolation (default=ON) --enable-stereosound Use stereo sound (default=ON) --enable-volonlysound Use volume only sound (digitized sound effects) (default=ON) --enable-consolesound Use console sound (keyboard clicks) (default=ON) --enable-seriosound Use serial in/out sound (default=OFF) --enable-clipsound Use sound clipping (default=OFF) --enable-pbi_xld Emulate 1450XLD (default=ON) --enable-voicebox Emulate the Alien Group Voice Box (default=ON) --enable-videorecording Support video recording to AVI files (default=ON) --enable-pngcodec Support PNG video codec (default=ON) --enable-zmbvcodec Support ZMBV video codec (default=ON) --enable-ide Provide IDE emulation (default=ON) --disable-largefile omit support for large files --enable-pokeyrec Provide Pokey registers recording (default=ON) --enable-onscreenkeyboard Enable on-screen keyboard (default=OFF) --enable-opengl-by-default Set VIDEO_ACCEL=1 in the config file created on first run after installation to enable OpenGL hardware acceleration (OpenGL-aware targets) (default set VIDEO_ACCEL=0) --enable-falconcpuasm Use m68k assembler CPU core for Falcon target (default=OFF) --enable-linuxjoystick Use LINUX joystick (linux x11 targets only) (default=ON) --enable-cursorblock Using cursor/ctrl keys for keyboard joystick (windx targets only) (default=OFF) --enable-riodevice Use the R: networking device (Linux/Unix/Win32) (default=ON) --enable-rnetwork Use IP network connection with the R: networking device (Linux/Unix/Win32) (default=ON) --enable-rserial Use the host serial port with the R: networking device (Linux/Unix only) (default=ON) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System --with-video[=no|yes|curses|ncurses|pdcurses|dosvga|sdl|javanvm] Select video interface to use [default=check] --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) --with-sound[=no|yes|dossb|oss|falcon|win|sdl|javanvm] Select sound interface to use [default=check] --with-mp3[=no|yes|lame] Select mp3 audio [default=check] --with-readline Use libreadline for input in monitor [default=check] --with-opengl Build support for OpenGL hardware video acceleration - only in SDL target [default=check] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory XMKMF Path to xmkmf, Makefile generator for X Window System CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Atari800 configure 5.0.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ---------------------------------- ## ## Report this to pstehlik@sophics.cz ## ## ---------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Atari800 $as_me 5.0.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers src/config.h" case "$target" in default | falcon | firebee | ps2 | rpi | android | windx | x11 | x11-shm | x11-motif | x11-xview | x11-xview-shm | libatari800) a8_target="$target" ;; shm | motif | xview | xview-shm) a8_target="x11-$target" ;; "") a8_target=default ;; *) echo echo "Usage: configure --target= " echo echo "The '--target' option, if not given, defaults to 'default'. Use '--help'" echo "to see other available options, including Atari800 specific '--enable' options." echo "Possible values for the '--target' option are:" echo " default (autodetect available graphics and sound libraries)" echo " android (Android devices)" echo " falcon (Atari Falcon: set --host=m68k-atari-mint)" echo " firebee (FireBee: set --host=m68k-atari-mint)" echo " ps2 (Sony PlayStation 2)" echo " rpi (Raspberry Pi: set --host=arm-linux)" echo " windx (Windows with DirectX only)" echo " libatari800 (Atari800 as a library (developers only))" echo " x11 (Standard X11)" echo " (x11-)motif (Motif on X11)" echo " (x11-)shm (Standard X11 with shared memory extensions)" echo " (x11-)xview (XView on X11)" echo " (x11-)xview-shm (XView on X11, with shared memory extensions)" echo exit 1; ;; esac ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atari800' VERSION='5.0.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Support silent build rules, requires at least automake-1.11. Disable # by either passing --disable-silent-rules to configure or passing V=1 # to make # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' WANT_IDE="yes" WANT_POKEYREC="yes" if [ "$host_os" = "cygwin" ]; then CC="gcc -mno-cygwin" echo echo "Using CC=\"$CC\" to disable cygwin library..."; echo host_os="mingw32" fi case $host_os in i386-pc-os2-emx) a8_host="os/2" ;; mingw32*) a8_host="win" if [ "$a8_target" != "android" ]; then $as_echo "#define DIR_SEP_BACKSLASH 1" >>confdefs.h fi $as_echo "#define DOS_DRIVES 1" >>confdefs.h ;; msdosdjgpp) a8_host="dos" $as_echo "#define DIR_SEP_BACKSLASH 1" >>confdefs.h $as_echo "#define DEFAULT_CFG_NAME \"atari800.cfg\"" >>confdefs.h $as_echo "#define DOS_DRIVES 1" >>confdefs.h $as_echo "#define SYSTEM_WIDE_CFG_FILE \"c:\\\\atari800.cfg\"" >>confdefs.h ;; linux | linux-gnu) a8_host="linux" ;; darwin*) a8_host="macos" ;; mint) if [ "$a8_target" = "firebee" ]; then a8_host=firebee a8_target=default else a8_host=falcon fi $as_echo "#define DIR_SEP_BACKSLASH 1" >>confdefs.h $as_echo "#define DEFAULT_CFG_NAME \"atari800.cfg\"" >>confdefs.h $as_echo "#define DOS_DRIVES 1" >>confdefs.h $as_echo "#define SYSTEM_WIDE_CFG_FILE \"c:\\\\atari800.cfg\"" >>confdefs.h $as_echo "#define BITPL_SCR 1" >>confdefs.h WANT_IDE="no" ;; beos) a8_host="beos" ;; *unix*) a8_host="unix" ;; *) a8_host="$host_os" ;; esac if [ "X_$CFLAGS" = "X_" ]; then CFLAGS="-O2 -Wall" fi if [ "X_$LDFLAGS" = "X_" ]; then LDFLAGS="" fi if [ "$a8_target" = "ps2" ]; then CC="ee-gcc" CFLAGS="$CFLAGS -D_EE -G0 -mno-crt0 -fno-builtin-printf -nostartfiles" CFLAGS="$CFLAGS -I${PS2SDK}/common/include -I${PS2SDK}/ee/include" CFLAGS="$CFLAGS -I${GSKIT}/ee/dma/include -I${GSKIT}/ee/gs/include" CFLAGS="$CFLAGS -I${PS2DEV}/ee/lib/gcc-lib/ee/3.2.2/include" CFLAGS="$CFLAGS -I${PS2SDK}/ports/include" LDFLAGS="$LDFLAGS -T${PS2SDK}/ee/startup/linkfile" LDFLAGS="$LDFLAGS -L${PS2SDK}/ee/lib -L${GSKITSRC}/lib -L${PS2DEV}/ee/lib/gcc-lib/ee/3.2.2" LDFLAGS="$LDFLAGS -L${PS2SDK}/ports/lib" fi if [ "$a8_target" = "rpi" ]; then [ -z "$RPI_SDK" ] && RPI_SDK="/opt/vc" CC="arm-linux-gnueabihf-gcc" CFLAGS="$CFLAGS -I${RPI_SDK}/include -I${RPI_SDK}/include/SDL -I${RPI_SDK}/include/interface/vmcs_host/linux -I${RPI_SDK}/include/interface/vcos/pthreads" LDFLAGS="$LDFLAGS -Wl,--unresolved-symbols=ignore-in-shared-libs -L${RPI_SDK}/lib" fi if [ "$a8_target" = "android" ]; then CC="arm-linux-androideabi-gcc" CPP="arm-linux-androideabi-cpp" CPPFLAGS="$CPPFLAGS -I$ANDROID_NDK_ROOT/platforms/android-9/arch-arm/usr/include/" WANT_IDE=no with_readline=no WANT_EVENT_RECORDING=no $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h # Take care of the ndk-build script name difference on Windows version of Android NDK. if [ "$build_os" = "cygwin" -o "$build_os" = "mingw32" ]; then NDK_BUILD=ndk-build.cmd else NDK_BUILD=ndk-build fi fi if [ "$a8_host" = "falcon" ]; then CFLAGS="-m68020-60 -O2 -fomit-frame-pointer -Wall" LDFLAGS="-m68020-60" fi if [ "$a8_host" = "firebee" ]; then CFLAGS="-mcpu=5475 -O2 -fomit-frame-pointer -Wall" LDFLAGS="-mcpu=5475" fi if [ "$a8_target" = "libatari800" ]; then with_readline=no WANT_EVENT_RECORDING=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then ac_no_link=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save else rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM ac_no_link=yes # Setting cross_compile will disable run tests; it will # also disable AC_CHECK_FILE but that's generally # correct if we can't link. cross_compiling=yes EXEEXT= # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then for ac_prog in windres do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$WINDRES" && break done fi if test -z "$WINDRES"; then ac_ct_WINDRES=$WINDRES for ac_prog in windres do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_WINDRES" && break done if test "x$ac_ct_WINDRES" = x; then WINDRES=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi fi CCAS=vasm CCASFLAGS="-quiet -devpac -opt-allbra -Faout" a8_use_sdl=no if [ "$a8_target" != "android" ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host is Java NestedVM" >&5 $as_echo_n "checking whether host is Java NestedVM... " >&6; } if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int _call_java(int a, int b, int c, int d); int main () { _call_java(0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : a8_host=javanvm EXEEXT=".mips" enable_unalignedwords=no if [ "$build_os" = "cygwin" ]; then JAVAFLAGS="-classpath '""`cygpath -wp $CLASSPATH`'" JAVACFLAGS="-source 1.4 -classpath '""`cygpath -wp $CLASSPATH`'" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if [ "$a8_target" != "android" ]; then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi fi case "$a8_target" in x11*) if [ "X_$x_includes" != "X_" ]; then CFLAGS="$CFLAGS -I$x_includes" fi if [ "X_$x_libraries" != "X_" ]; then LDFLAGS="$LDFLAGS -L$x_libraries -Wl,-rpath,$x_libraries" fi ;; esac if [ "$a8_target" = "android" ]; then echo "hardcoding dirent.h header" $as_echo "#define HAVE_DIRENT_H 1" >>confdefs.h else ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" if test "x$ac_cv_type_uintptr_t" = xyes; then : $as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h else for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat >>confdefs.h <<_ACEOF #define uintptr_t $ac_type _ACEOF ac_type= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test -z "$ac_type" && break done fi for ac_header in direct.h errno.h file.h signal.h sys/time.h time.h unistd.h unixio.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 $as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } if ${ac_cv_sys_tiocgwinsz_in_termios_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ac_cv_sys_tiocgwinsz_in_termios_h=yes else ac_cv_sys_tiocgwinsz_in_termios_h=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 $as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 $as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } if ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes else ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 $as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then $as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h fi fi SUPPORTS_SOUND_OSS=yes for ac_header in fcntl.h sys/ioctl.h sys/soundcard.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else SUPPORTS_SOUND_OSS=no fi done SUPPORTS_RDEVICE=yes if [ "$a8_host" = "win" ]; then for ac_header in windows.h winsock2.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else SUPPORTS_RDEVICE=no fi done else for ac_header in arpa/inet.h netdb.h netinet/in.h sys/socket.h termios.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else SUPPORTS_RDEVICE=no fi done fi if [ "$a8_target" = "android" ]; then echo "hardcoding libz" LIBS="-lz $LIBS" $as_echo "#define HAVE_LIBZ 1" >>confdefs.h elif [ "$a8_target" = "libatari800" ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 $as_echo_n "checking for cos in -lm... " >&6; } if ${ac_cv_lib_m_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes else ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 $as_echo "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes; then : LIBS="-lm $LIBS" fi for ac_func in setjmp do : ac_fn_c_check_func "$LINENO" "setjmp" "ac_cv_func_setjmp" if test "x$ac_cv_func_setjmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETJMP 1 _ACEOF fi done else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzopen in -lz" >&5 $as_echo_n "checking for gzopen in -lz... " >&6; } if ${ac_cv_lib_z_gzopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gzopen (); int main () { return gzopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_gzopen=yes else ac_cv_lib_z_gzopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5 $as_echo "$ac_cv_lib_z_gzopen" >&6; } if test "x$ac_cv_lib_z_gzopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_get_libpng_ver in -lpng" >&5 $as_echo_n "checking for png_get_libpng_ver in -lpng... " >&6; } if ${ac_cv_lib_png_png_get_libpng_ver+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpng $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char png_get_libpng_ver (); int main () { return png_get_libpng_ver (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_png_png_get_libpng_ver=yes else ac_cv_lib_png_png_get_libpng_ver=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_get_libpng_ver" >&5 $as_echo "$ac_cv_lib_png_png_get_libpng_ver" >&6; } if test "x$ac_cv_lib_png_png_get_libpng_ver" = xyes; then : LIBS="-lpng $LIBS"; SUPPORTS_LIBPNG=yes else SUPPORTS_LIBPNG=no fi if [ "$SUPPORTS_LIBPNG" = "yes" ]; then $as_echo "#define HAVE_LIBPNG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 $as_echo_n "checking for cos in -lm... " >&6; } if ${ac_cv_lib_m_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes else ac_cv_lib_m_cos=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 $as_echo "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes; then : LIBS="-lm $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _oss_ioctl in -lossaudio" >&5 $as_echo_n "checking for _oss_ioctl in -lossaudio... " >&6; } if ${ac_cv_lib_ossaudio__oss_ioctl+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lossaudio $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char _oss_ioctl (); int main () { return _oss_ioctl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ossaudio__oss_ioctl=yes else ac_cv_lib_ossaudio__oss_ioctl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ossaudio__oss_ioctl" >&5 $as_echo "$ac_cv_lib_ossaudio__oss_ioctl" >&6; } if test "x$ac_cv_lib_ossaudio__oss_ioctl" = xyes; then : LIBS="-lossaudio $LIBS" fi fi if test "$SUPPORTS_LIBPNG" = "yes"; then WITH_LIBPNG_TRUE= WITH_LIBPNG_FALSE='#' else WITH_LIBPNG_TRUE='#' WITH_LIBPNG_FALSE= fi case "$a8_target" in default) if [ "$a8_host" != "dos" ]; then CFLAGS="$CFLAGS -ansi" fi CFLAGS="$CFLAGS -pedantic -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Winline" if [ "$a8_host" != "beos" ]; then CFLAGS="$CFLAGS -Wredundant-decls" fi ;; falcon) $as_echo "#define SUPPORTS_PLATFORM_SLEEP 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_TIME 1" >>confdefs.h $as_echo "#define FALCON 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for appl_init in -lgem" >&5 $as_echo_n "checking for appl_init in -lgem... " >&6; } if ${ac_cv_lib_gem_appl_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgem $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char appl_init (); int main () { return appl_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gem_appl_init=yes else ac_cv_lib_gem_appl_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gem_appl_init" >&5 $as_echo "$ac_cv_lib_gem_appl_init" >&6; } if test "x$ac_cv_lib_gem_appl_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEM 1 _ACEOF LIBS="-lgem $LIBS" fi ;; ps2) $as_echo "#define PS2 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_SLEEP 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_TIME 1" >>confdefs.h $as_echo "#define DEFAULT_CFG_NAME \"mc0:/ATARI/ATARI800.CFG\"" >>confdefs.h as_ac_Lib=`$as_echo "ac_cv_lib_kernel''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkernel" >&5 $as_echo_n "checking for main in -lkernel... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lkernel $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBkernel" | $as_tr_cpp` 1 _ACEOF LIBS="-lkernel $LIBS" else as_fn_error $? "\"kernel library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_audsrv''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -laudsrv" >&5 $as_echo_n "checking for main in -laudsrv... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-laudsrv $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBaudsrv" | $as_tr_cpp` 1 _ACEOF LIBS="-laudsrv $LIBS" else as_fn_error $? "\"audsrv library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_debug''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldebug" >&5 $as_echo_n "checking for main in -ldebug... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldebug $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBdebug" | $as_tr_cpp` 1 _ACEOF LIBS="-ldebug $LIBS" else as_fn_error $? "\"debug library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_syscall''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lsyscall" >&5 $as_echo_n "checking for main in -lsyscall... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsyscall $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBsyscall" | $as_tr_cpp` 1 _ACEOF LIBS="-lsyscall $LIBS" else as_fn_error $? "\"syscall library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_dmakit''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldmakit" >&5 $as_echo_n "checking for main in -ldmakit... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldmakit $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBdmakit" | $as_tr_cpp` 1 _ACEOF LIBS="-ldmakit $LIBS" else as_fn_error $? "\"dmakit library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_gskit''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgskit" >&5 $as_echo_n "checking for main in -lgskit... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgskit $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBgskit" | $as_tr_cpp` 1 _ACEOF LIBS="-lgskit $LIBS" else as_fn_error $? "\"gskit library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_pad''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpad" >&5 $as_echo_n "checking for main in -lpad... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpad $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBpad" | $as_tr_cpp` 1 _ACEOF LIBS="-lpad $LIBS" else as_fn_error $? "\"pad library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_kbd''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkbd" >&5 $as_echo_n "checking for main in -lkbd... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lkbd $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBkbd" | $as_tr_cpp` 1 _ACEOF LIBS="-lkbd $LIBS" else as_fn_error $? "\"kbd library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_mc''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lmc" >&5 $as_echo_n "checking for main in -lmc... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmc $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBmc" | $as_tr_cpp` 1 _ACEOF LIBS="-lmc $LIBS" else as_fn_error $? "\"mc library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_g''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lg" >&5 $as_echo_n "checking for main in -lg... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lg $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBg" | $as_tr_cpp` 1 _ACEOF LIBS="-lg $LIBS" else as_fn_error $? "\"g library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_z''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5 $as_echo_n "checking for main in -lz... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBz" | $as_tr_cpp` 1 _ACEOF LIBS="-lz $LIBS" else as_fn_error $? "\"z library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_c''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lc" >&5 $as_echo_n "checking for main in -lc... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBc" | $as_tr_cpp` 1 _ACEOF LIBS="-lc $LIBS" else as_fn_error $? "\"c library not found!\"" "$LINENO" 5 fi ;; rpi) $as_echo "#define RPI 1" >>confdefs.h $as_echo "#define GUI_SDL 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGURE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGSAVE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_PALETTEUPDATE 1" >>confdefs.h $as_echo "#define PLATFORM_MAP_PALETTE 1" >>confdefs.h as_ac_Lib=`$as_echo "ac_cv_lib_brcmGLESv2''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lbrcmGLESv2" >&5 $as_echo_n "checking for main in -lbrcmGLESv2... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbrcmGLESv2 $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBbrcmGLESv2" | $as_tr_cpp` 1 _ACEOF LIBS="-lbrcmGLESv2 $LIBS" else as_fn_error $? "\"brcmGLESv2 library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_brcmEGL''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lbrcmEGL" >&5 $as_echo_n "checking for main in -lbrcmEGL... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbrcmEGL $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBbrcmEGL" | $as_tr_cpp` 1 _ACEOF LIBS="-lbrcmEGL $LIBS" else as_fn_error $? "\"brcmEGL library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_SDL''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lSDL" >&5 $as_echo_n "checking for main in -lSDL... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBSDL" | $as_tr_cpp` 1 _ACEOF LIBS="-lSDL $LIBS" else as_fn_error $? "\"SDL library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_bcm_host''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lbcm_host" >&5 $as_echo_n "checking for main in -lbcm_host... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbcm_host $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBbcm_host" | $as_tr_cpp` 1 _ACEOF LIBS="-lbcm_host $LIBS" else as_fn_error $? "\"bcm_host library not found!\"" "$LINENO" 5 fi ;; android) $as_echo "#define ANDROID 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_PALETTEUPDATE 1" >>confdefs.h $as_echo "#define DIRTYRECT 1" >>confdefs.h ;; windx) $as_echo "#define DIRECTX 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGURE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGSAVE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_PALETTEUPDATE 1" >>confdefs.h $as_echo "#define SUPPORTS_SOUND_REINIT 1" >>confdefs.h as_ac_Lib=`$as_echo "ac_cv_lib_ddraw''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lddraw" >&5 $as_echo_n "checking for main in -lddraw... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lddraw $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBddraw" | $as_tr_cpp` 1 _ACEOF LIBS="-lddraw $LIBS" else as_fn_error $? "\"ddraw library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_dinput''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldinput" >&5 $as_echo_n "checking for main in -ldinput... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldinput $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBdinput" | $as_tr_cpp` 1 _ACEOF LIBS="-ldinput $LIBS" else as_fn_error $? "\"dinput library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_dsound''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldsound" >&5 $as_echo_n "checking for main in -ldsound... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldsound $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBdsound" | $as_tr_cpp` 1 _ACEOF LIBS="-ldsound $LIBS" else as_fn_error $? "\"dsound library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_dxguid''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldxguid" >&5 $as_echo_n "checking for main in -ldxguid... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldxguid $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBdxguid" | $as_tr_cpp` 1 _ACEOF LIBS="-ldxguid $LIBS" else as_fn_error $? "\"dxguid library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_d3d9''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ld3d9" >&5 $as_echo_n "checking for main in -ld3d9... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ld3d9 $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBd3d9" | $as_tr_cpp` 1 _ACEOF LIBS="-ld3d9 $LIBS" else as_fn_error $? "\"d3d9 library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_gdiplus''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgdiplus" >&5 $as_echo_n "checking for main in -lgdiplus... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgdiplus $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBgdiplus" | $as_tr_cpp` 1 _ACEOF LIBS="-lgdiplus $LIBS" else as_fn_error $? "\"gdiplus library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_stdc++''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lstdc++" >&5 $as_echo_n "checking for main in -lstdc++... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lstdc++ $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBstdc++" | $as_tr_cpp` 1 _ACEOF LIBS="-lstdc++ $LIBS" else as_fn_error $? "\"stdc++ library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_ws2_32''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lws2_32" >&5 $as_echo_n "checking for main in -lws2_32... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lws2_32 $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBws2_32" | $as_tr_cpp` 1 _ACEOF LIBS="-lws2_32 $LIBS" else as_fn_error $? "\"ws2_32 library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_gdi32''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgdi32" >&5 $as_echo_n "checking for main in -lgdi32... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgdi32 $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBgdi32" | $as_tr_cpp` 1 _ACEOF LIBS="-lgdi32 $LIBS" else as_fn_error $? "\"gdi32 library not found!\"" "$LINENO" 5 fi CFLAGS="$CFLAGS -ansi -pedantic -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wstrict-prototypes -Winline" LDFLAGS="$LDFLAGS -mwindows" ;; libatari800) $as_echo "#define LIBATARI800 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGURE 1" >>confdefs.h ;; x11*) $as_echo "#define X11 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_PALETTEUPDATE 1" >>confdefs.h as_ac_Lib=`$as_echo "ac_cv_lib_X11''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lX11" >&5 $as_echo_n "checking for main in -lX11... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBX11" | $as_tr_cpp` 1 _ACEOF LIBS="-lX11 $LIBS" else as_fn_error $? "\"X11 library not found!\"" "$LINENO" 5 fi case "$a8_target" in *-shm) $as_echo "#define SHM 1" >>confdefs.h as_ac_Lib=`$as_echo "ac_cv_lib_Xext''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXext" >&5 $as_echo_n "checking for main in -lXext... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBXext" | $as_tr_cpp` 1 _ACEOF LIBS="-lXext $LIBS" else as_fn_error $? "\"Xext library not found!\"" "$LINENO" 5 fi ;; esac case "$a8_target" in x11-xview*) $as_echo "#define XVIEW 1" >>confdefs.h CFLAGS="$CFLAGS -I/usr/openwin/include" as_ac_Lib=`$as_echo "ac_cv_lib_olgx''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lolgx" >&5 $as_echo_n "checking for main in -lolgx... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lolgx $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBolgx" | $as_tr_cpp` 1 _ACEOF LIBS="-lolgx $LIBS" else as_fn_error $? "\"olgx library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_xview''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lxview" >&5 $as_echo_n "checking for main in -lxview... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxview $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBxview" | $as_tr_cpp` 1 _ACEOF LIBS="-lxview $LIBS" else as_fn_error $? "\"xview library not found!\"" "$LINENO" 5 fi ;; x11-motif) $as_echo "#define MOTIF 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lsocket" >&5 $as_echo_n "checking for main in -lsocket... " >&6; } if ${ac_cv_lib_socket_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_main=yes else ac_cv_lib_socket_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_main" >&5 $as_echo "$ac_cv_lib_socket_main" >&6; } if test "x$ac_cv_lib_socket_main" = xyes; then : LIBS="-lsocket $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgen" >&5 $as_echo_n "checking for main in -lgen... " >&6; } if ${ac_cv_lib_gen_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_main=yes else ac_cv_lib_gen_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_main" >&5 $as_echo "$ac_cv_lib_gen_main" >&6; } if test "x$ac_cv_lib_gen_main" = xyes; then : LIBS="-lgen $LIBS" fi as_ac_Lib=`$as_echo "ac_cv_lib_Xt''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXt" >&5 $as_echo_n "checking for main in -lXt... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXt $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBXt" | $as_tr_cpp` 1 _ACEOF LIBS="-lXt $LIBS" else as_fn_error $? "\"Xt library not found!\"" "$LINENO" 5 fi as_ac_Lib=`$as_echo "ac_cv_lib_Xm''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXm" >&5 $as_echo_n "checking for main in -lXm... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXm $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBXm" | $as_tr_cpp` 1 _ACEOF LIBS="-lXm $LIBS" else as_fn_error $? "\"Xm library not found!\"" "$LINENO" 5 fi ;; esac WANT_X11=yes ;; esac if test "$a8_host" = javanvm; then CONFIGURE_HOST_JAVANVM_TRUE= CONFIGURE_HOST_JAVANVM_FALSE='#' else CONFIGURE_HOST_JAVANVM_TRUE='#' CONFIGURE_HOST_JAVANVM_FALSE= fi if test "$a8_host" = dos; then CONFIGURE_HOST_DOS_TRUE= CONFIGURE_HOST_DOS_FALSE='#' else CONFIGURE_HOST_DOS_TRUE='#' CONFIGURE_HOST_DOS_FALSE= fi if test "$a8_host" = win; then CONFIGURE_HOST_WIN_TRUE= CONFIGURE_HOST_WIN_FALSE='#' else CONFIGURE_HOST_WIN_TRUE='#' CONFIGURE_HOST_WIN_FALSE= fi if test "$a8_target" = android; then CONFIGURE_TARGET_ANDROID_TRUE= CONFIGURE_TARGET_ANDROID_FALSE='#' else CONFIGURE_TARGET_ANDROID_TRUE='#' CONFIGURE_TARGET_ANDROID_FALSE= fi if test "$a8_target" = falcon; then CONFIGURE_TARGET_FALCON_TRUE= CONFIGURE_TARGET_FALCON_FALSE='#' else CONFIGURE_TARGET_FALCON_TRUE='#' CONFIGURE_TARGET_FALCON_FALSE= fi if test "$a8_target" = ps2; then CONFIGURE_TARGET_PS2_TRUE= CONFIGURE_TARGET_PS2_FALSE='#' else CONFIGURE_TARGET_PS2_TRUE='#' CONFIGURE_TARGET_PS2_FALSE= fi if test "$a8_target" = rpi; then CONFIGURE_TARGET_RPI_TRUE= CONFIGURE_TARGET_RPI_FALSE='#' else CONFIGURE_TARGET_RPI_TRUE='#' CONFIGURE_TARGET_RPI_FALSE= fi if test "$a8_target" = windx; then CONFIGURE_TARGET_WINDX_TRUE= CONFIGURE_TARGET_WINDX_FALSE='#' else CONFIGURE_TARGET_WINDX_TRUE='#' CONFIGURE_TARGET_WINDX_FALSE= fi if test "$a8_target" = libatari800; then CONFIGURE_TARGET_LIBATARI800_TRUE= CONFIGURE_TARGET_LIBATARI800_FALSE='#' else CONFIGURE_TARGET_LIBATARI800_TRUE='#' CONFIGURE_TARGET_LIBATARI800_FALSE= fi if test "$WANT_X11" = yes; then CONFIGURE_TARGET_X11_TRUE= CONFIGURE_TARGET_X11_FALSE='#' else CONFIGURE_TARGET_X11_TRUE='#' CONFIGURE_TARGET_X11_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 $as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then $as_echo "#define volatile /**/" >>confdefs.h fi if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # Check whether --enable-unalignedwords was given. if test "${enable_unalignedwords+set}" = set; then : enableval=$enable_unalignedwords; fi if [ "$enable_unalignedwords" != "yes" -a "$enable_unalignedwords" != "no" ]; then case $host_cpu in alpha* | arm* | hppa* | ia64 | mips* | sparc*) enable_unalignedwords=no ;; i*86 | m68* | powerpc* | x86_64) enable_unalignedwords=yes ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $host_cpu architecture is unknown to this script." >&5 $as_echo "$as_me: WARNING: $host_cpu architecture is unknown to this script." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Performance may be sub-optimal. Please contact Atari800 developers." >&5 $as_echo "$as_me: WARNING: Performance may be sub-optimal. Please contact Atari800 developers." >&2;} enable_unalignedwords=no ;; esac fi if [ "$enable_unalignedwords" = "yes" ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unaligned word access validity" >&5 $as_echo_n "checking for unaligned word access validity... " >&6; } if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: skipped because cross-compiling" >&5 $as_echo "skipped because cross-compiling" >&6; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { unsigned char test_data[] = "Hello, I test unaligned word access validity."; unsigned char *p; /* step through test_data as far as 4 bytes are available via p */ for (p = test_data; p[2] != '\0'; p++) { unsigned int word_read = *(unsigned short *) p; if (word_read != (p[0] + (p[1] << 8)) && word_read != (p[1] + (p[0] << 8))) { printf("16-bit access at address %p yields bad data!\n" "Bytes: %02X %02X; Value read: %04X\n", p, p[0], p[1], word_read); return 1; } word_read = *(unsigned int *) p; if (word_read != (p[0] + (p[1] << 8) + (p[2] << 16) + (p[3] << 24)) && word_read != (p[3] + (p[2] << 8) + (p[1] << 16) + (p[0] << 24))) { printf("32-bit access at address %p yields bad data!\n" "Bytes: %02X %02X %02X %02X; Value read: %08X\n", p, p[0], p[1], p[2], p[3], word_read); return 1; } } ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else enable_unalignedwords=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed! disabling unaligned word access" >&5 $as_echo "failed! disabling unaligned word access" >&6; } fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if [ "$enable_unalignedwords" = "yes" ]; then $as_echo "#define WORDS_UNALIGNED_OK 1" >>confdefs.h fi fi # from "Autoconf Archive": { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 $as_echo_n "checking whether closedir returns void... " >&6; } if ${ac_cv_func_closedir_void+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_closedir_void=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <$ac_header_dirent> #ifndef __cplusplus int closedir (); #endif int main () { return closedir (opendir (".")) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_closedir_void=no else ac_cv_func_closedir_void=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5 $as_echo "$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then $as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 $as_echo_n "checking for working memcmp... " >&6; } if ${ac_cv_func_memcmp_working+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_memcmp_working=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Some versions of memcmp are not 8-bit clean. */ char c0 = '\100', c1 = '\200', c2 = '\201'; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) return 1; /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) return 1; } return 0; } ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_memcmp_working=yes else ac_cv_func_memcmp_working=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 $as_echo "$ac_cv_func_memcmp_working" >&6; } test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac for ac_header in sys/select.h sys/socket.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 $as_echo_n "checking types of arguments for select... " >&6; } if ${ac_cv_func_select_args+:} false; then : $as_echo_n "(cached) " >&6 else for ac_arg234 in 'fd_set *' 'int *' 'void *'; do for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifdef HAVE_SYS_SELECT_H # include #endif #ifdef HAVE_SYS_SOCKET_H # include #endif int main () { extern int select ($ac_arg1, $ac_arg234, $ac_arg234, $ac_arg234, $ac_arg5); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done done done # Provide a safe default value. : "${ac_cv_func_select_args=int,int *,struct timeval *}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 $as_echo "$ac_cv_func_select_args" >&6; } ac_save_IFS=$IFS; IFS=',' set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` IFS=$ac_save_IFS shift cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG1 $1 _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG234 ($2) _ACEOF cat >>confdefs.h <<_ACEOF #define SELECT_TYPE_ARG5 ($3) _ACEOF rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 $as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : $as_echo_n "(cached) " >&6 else rm -f conftest.sym conftest.file echo >conftest.file if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then if test "$cross_compiling" = yes; then : ac_cv_func_lstat_dereferences_slashed_symlink=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_lstat_dereferences_slashed_symlink=yes else ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even # have an lstat function. ac_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f conftest.sym conftest.file fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 $as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && cat >>confdefs.h <<_ACEOF #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 _ACEOF if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then case " $LIBOBJS " in *" lstat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 $as_echo_n "checking whether stat accepts an empty string... " >&6; } if ${ac_cv_func_stat_empty_string_bug+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_stat_empty_string_bug=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { struct stat sbuf; return stat ("", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_stat_empty_string_bug=no else ac_cv_func_stat_empty_string_bug=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 $as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } if test $ac_cv_func_stat_empty_string_bug = yes; then case " $LIBOBJS " in *" stat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; esac cat >>confdefs.h <<_ACEOF #define HAVE_STAT_EMPTY_STRING_BUG 1 _ACEOF fi if [ "$a8_target" = "android" ]; then echo "hardcoding libc funcs" $as_echo "#define HAVE_VPRINTF 1" >>confdefs.h $as_echo "#define HAVE_ATEXIT 1" >>confdefs.h $as_echo "#define HAVE_CHMOD 1" >>confdefs.h $as_echo "#define HAVE_FDOPEN 1" >>confdefs.h $as_echo "#define HAVE_FFLUSH 1" >>confdefs.h $as_echo "#define HAVE_FLOOR 1" >>confdefs.h $as_echo "#define HAVE_FSTAT 1" >>confdefs.h $as_echo "#define HAVE_GETCWD 1" >>confdefs.h $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h $as_echo "#define HAVE_LOCALTIME 1" >>confdefs.h $as_echo "#define HAVE_MEMMOVE 1" >>confdefs.h $as_echo "#define HAVE_MEMSET 1" >>confdefs.h $as_echo "#define HAVE_MKSTEMP 1" >>confdefs.h $as_echo "#define HAVE_MKTEMP 1" >>confdefs.h $as_echo "#define HAVE_MODF 1" >>confdefs.h $as_echo "#define HAVE_NANOSLEEP 1" >>confdefs.h $as_echo "#define HAVE_OPENDIR 1" >>confdefs.h $as_echo "#define HAVE_RENAME 1" >>confdefs.h $as_echo "#define HAVE_REWIND 1" >>confdefs.h $as_echo "#define HAVE_RMDIR 1" >>confdefs.h $as_echo "#define HAVE_SIGNAL 1" >>confdefs.h $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h $as_echo "#define HAVE_STAT 1" >>confdefs.h $as_echo "#define HAVE_STRCASECMP 1" >>confdefs.h $as_echo "#define HAVE_STRCHR 1" >>confdefs.h $as_echo "#define HAVE_STRDUP 1" >>confdefs.h $as_echo "#define HAVE_STRERROR 1" >>confdefs.h $as_echo "#define HAVE_STRRCHR 1" >>confdefs.h $as_echo "#define HAVE_STRSTR 1" >>confdefs.h $as_echo "#define HAVE_STRTOL 1" >>confdefs.h $as_echo "#define HAVE_SYSTEM 1" >>confdefs.h $as_echo "#define HAVE_TIME 1" >>confdefs.h $as_echo "#define HAVE_TMPNAM 1" >>confdefs.h $as_echo "#define HAVE_UCLOCK 1" >>confdefs.h $as_echo "#define HAVE_UNLINK 1" >>confdefs.h $as_echo "#define HAVE_VSNPRINTF 1" >>confdefs.h $as_echo "#define HAVE_MKDIR 1" >>confdefs.h $as_echo "#define HAVE_SELECT 1" >>confdefs.h $as_echo "#define HAVE_USLEEP 1" >>confdefs.h $as_echo "#define HAVE_STRNCPY 1" >>confdefs.h else for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done for ac_func in atexit chmod clock fdopen fflush floor fstat getcwd do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in gettimeofday localtime memmove memset mkstemp mktemp do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in modf nanosleep opendir rename rewind rmdir signal snprintf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in stat strcasecmp strchr strdup strerror strrchr strstr do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in strtol system time tmpfile tmpnam uclock unlink vsnprintf popen do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in mkdir _mkdir do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkdir takes one argument" >&5 $as_echo_n "checking whether mkdir takes one argument... " >&6; } if ${ac_cv_mkdir_takes_one_arg+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_UNISTD_H # include #endif int main () { mkdir ("."); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_mkdir_takes_one_arg=yes else ac_cv_mkdir_takes_one_arg=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_takes_one_arg" >&5 $as_echo "$ac_cv_mkdir_takes_one_arg" >&6; } if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then $as_echo "#define MKDIR_TAKES_ONE_ARG 1" >>confdefs.h fi if test "x$a8_host" != xjavanvm ; then for ac_func in select usleep strncpy do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done fi fi if [ "$a8_host" != "win" -a "$a8_target" != "android" ]; then for ac_func in gethostbyaddr gethostbyname inet_ntoa socket do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else SUPPORTS_RDEVICE=no fi done fi # Check whether --with-video was given. if test "${with_video+set}" = set; then : withval=$with_video; case "$withval" in no | yes | check | curses | ncurses | pdcurses | dosvga | sdl | javanvm) ;; *) as_fn_error $? "unrecognized value for --with-video: \"$withval\"" "$LINENO" 5 ;; esac else with_video=check fi if [ "$a8_target" = default ]; then if [ "$with_video" != no ]; then if [ "$with_video" = check -o "$with_video" = yes -o "$with_video" = javanvm ]; then if [ "$a8_host" = javanvm ]; then with_video=javanvm elif [ "$with_video" = javanvm ]; then as_fn_error $? "--with-video=javanvm was given, but host system is not NestedVM!" "$LINENO" 5 fi fi if [ "$with_video" = check -o "$with_video" = yes -o "$with_video" = dosvga ]; then if [ "$a8_host" = dos ]; then with_video=dosvga elif [ "$with_video" = dosvga ]; then as_fn_error $? "--with-video=dosvga was given, but host system is not DOS!" "$LINENO" 5 fi fi if [ "$with_video" = check -o "$with_video" = yes -o "$with_video" = sdl ]; then if [ "$a8_use_sdl" = no ]; then SDL_VERSION=1.2.0 # Check whether --with-sdl-prefix was given. if test "${with_sdl_prefix+set}" = set; then : withval=$with_sdl_prefix; sdl_prefix="$withval" else sdl_prefix="" fi # Check whether --with-sdl-exec-prefix was given. if test "${with_sdl_exec_prefix+set}" = set; then : withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" else sdl_exec_prefix="" fi # Check whether --enable-sdltest was given. if test "${enable_sdltest+set}" = set; then : enableval=$enable_sdltest; else enable_sdltest=yes fi if test x$sdl_exec_prefix != x ; then sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi as_save_PATH="$PATH" if test "x$prefix" != xNONE; then PATH="$prefix/bin:$prefix/usr/bin:$PATH" fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SDL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SDL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" ;; esac fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG if test -n "$SDL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5 $as_echo "$SDL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi PATH="$as_save_PATH" min_sdl_version=$SDL_VERSION { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5 $as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" rm -f conf.sdltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_sdl=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define SDL 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_TIME 1" >>confdefs.h LIBS="$LIBS $SDL_LIBS" CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" if [ "$a8_host" = "win" ]; then CPPFLAGS=${CPPFLAGS/-Dmain=SDL_main/} LIBS=${LIBS/-lSDLmain/} CPPFLAGS="$CPPFLAGS -DNO_STDIO_REDIRECT" LIBS=${LIBS/-mwindows/} fi a8_use_sdl=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" : fi rm -f conf.sdltest fi if [ "$a8_use_sdl" = yes ]; then with_video=sdl elif [ "$with_video" = sdl ]; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-video=sdl was given, but SDL library not found! See \`config.log' for more details" "$LINENO" 5; } fi fi if [ "$with_video" = check -o "$with_video" = yes -o "$with_video" = curses ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lcurses" >&5 $as_echo_n "checking for initscr in -lcurses... " >&6; } if ${ac_cv_lib_curses_initscr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_curses_initscr=yes else ac_cv_lib_curses_initscr=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_initscr" >&5 $as_echo "$ac_cv_lib_curses_initscr" >&6; } if test "x$ac_cv_lib_curses_initscr" = xyes; then : LIBS="-lcurses $LIBS" with_video=curses else if [ "$with_video" = curses ]; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-video=curses was given, but curses library not found! See \`config.log' for more details" "$LINENO" 5; } fi fi fi if [ "$with_video" = check -o "$with_video" = yes -o "$with_video" = ncurses ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lncurses" >&5 $as_echo_n "checking for initscr in -lncurses... " >&6; } if ${ac_cv_lib_ncurses_initscr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ncurses_initscr=yes else ac_cv_lib_ncurses_initscr=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_initscr" >&5 $as_echo "$ac_cv_lib_ncurses_initscr" >&6; } if test "x$ac_cv_lib_ncurses_initscr" = xyes; then : LIBS="-lncurses $LIBS" with_video=ncurses $as_echo "#define USE_NCURSES 1" >>confdefs.h else if [ "$with_video" = ncurses ]; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-video=ncurses was given, but ncurses library not found! See \`config.log' for more details" "$LINENO" 5; } fi fi fi if [ "$with_video" = check -o "$with_video" = yes -o "$with_video" = pdcurses ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lpdcurses" >&5 $as_echo_n "checking for initscr in -lpdcurses... " >&6; } if ${ac_cv_lib_pdcurses_initscr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpdcurses $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pdcurses_initscr=yes else ac_cv_lib_pdcurses_initscr=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pdcurses_initscr" >&5 $as_echo "$ac_cv_lib_pdcurses_initscr" >&6; } if test "x$ac_cv_lib_pdcurses_initscr" = xyes; then : LIBS="-lpdcurses $LIBS" with_video=pdcurses else if [ "$with_video" = pdcurses ]; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-video=pdcurses was given, but pdcurses library not found! See \`config.log' for more details" "$LINENO" 5; } fi fi fi fi if [ "$with_video" = check ]; then with_video=no fi case "$with_video" in javanvm) $as_echo "#define SUPPORTS_PLATFORM_PALETTEUPDATE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_SLEEP 1" >>confdefs.h ;; sdl) $as_echo "#define GUI_SDL 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGURE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGSAVE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_PALETTEUPDATE 1" >>confdefs.h $as_echo "#define SUPPORTS_CHANGE_VIDEOMODE 1" >>confdefs.h $as_echo "#define SUPPORTS_ROTATE_VIDEOMODE 1" >>confdefs.h $as_echo "#define PLATFORM_MAP_PALETTE 1" >>confdefs.h WANT_XEP80_EMULATION=yes WANT_NTSC_FILTER=yes WANT_PAL_BLENDING=yes $as_echo "#define PBI_PROTO80 1" >>confdefs.h $as_echo "#define AF80 1" >>confdefs.h $as_echo "#define BIT3 1" >>confdefs.h ;; dosvga) $as_echo "#define DOSVGA 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_CONFIGURE 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_PALETTEUPDATE 1" >>confdefs.h ;; curses | ncurses | pdcurses) $as_echo "#define USE_CURSES 1" >>confdefs.h WANT_EVENT_RECORDING=no ;; no) $as_echo "#define BASIC 1" >>confdefs.h WANT_EVENT_RECORDING=no ;; *) as_fn_error $? "--with-video=$with_video was given, but no video/input library found!" "$LINENO" 5 ;; esac fi if test "$with_video" = javanvm; then WITH_VIDEO_JAVANVM_TRUE= WITH_VIDEO_JAVANVM_FALSE='#' else WITH_VIDEO_JAVANVM_TRUE='#' WITH_VIDEO_JAVANVM_FALSE= fi if test "$with_video" = sdl; then WITH_VIDEO_SDL_TRUE= WITH_VIDEO_SDL_FALSE='#' else WITH_VIDEO_SDL_TRUE='#' WITH_VIDEO_SDL_FALSE= fi if test "$with_video" = dosvga; then WITH_VIDEO_DOSVGA_TRUE= WITH_VIDEO_DOSVGA_FALSE='#' else WITH_VIDEO_DOSVGA_TRUE='#' WITH_VIDEO_DOSVGA_FALSE= fi if test "$with_video" = curses -o "$with_video" = ncurses -o "$with_video" = pdcurses; then WITH_VIDEO_CURSES_TRUE= WITH_VIDEO_CURSES_FALSE='#' else WITH_VIDEO_CURSES_TRUE='#' WITH_VIDEO_CURSES_FALSE= fi if test "$a8_target" = libatari800; then WITH_VIDEO_LIBATARI800_TRUE= WITH_VIDEO_LIBATARI800_FALSE='#' else WITH_VIDEO_LIBATARI800_TRUE='#' WITH_VIDEO_LIBATARI800_FALSE= fi if test "$with_video" = no; then WITH_VIDEO_NO_TRUE= WITH_VIDEO_NO_FALSE='#' else WITH_VIDEO_NO_TRUE='#' WITH_VIDEO_NO_FALSE= fi if [ "$a8_target" = "libatari800" ]; then WANT_NEW_CYCLE_EXACT=yes WANT_VERY_SLOW=no WANT_CRASH_MENU=no WANT_CURSES_BASIC=no elif [ "$a8_target" != "default" -o "$with_video" != no ]; then case "$with_video" in *curses) # Check whether --enable-cursesbasic was given. if test "${enable_cursesbasic+set}" = set; then : enableval=$enable_cursesbasic; WANT_CURSES_BASIC=$enableval else WANT_CURSES_BASIC=yes fi if [ "$WANT_CURSES_BASIC" = "yes" ]; then $as_echo "#define CURSES_BASIC 1" >>confdefs.h fi ;; esac if [ "$WANT_CURSES_BASIC" != "yes" ]; then # Check whether --enable-newcycleexact was given. if test "${enable_newcycleexact+set}" = set; then : enableval=$enable_newcycleexact; WANT_NEW_CYCLE_EXACT=$enableval else WANT_NEW_CYCLE_EXACT=yes fi if [ "$WANT_NEW_CYCLE_EXACT" = "yes" ]; then $as_echo "#define NEW_CYCLE_EXACT 1" >>confdefs.h fi if [ "$WANT_NEW_CYCLE_EXACT" = "yes" ]; then CCASFLAGS="$CCASFLAGS -DNEW_CYCLE_EXACT" fi # Check whether --enable-veryslow was given. if test "${enable_veryslow+set}" = set; then : enableval=$enable_veryslow; WANT_VERY_SLOW=$enableval else WANT_VERY_SLOW=no fi if [ "$WANT_VERY_SLOW" = "yes" ]; then $as_echo "#define VERY_SLOW 1" >>confdefs.h fi fi # Check whether --enable-crashmenu was given. if test "${enable_crashmenu+set}" = set; then : enableval=$enable_crashmenu; WANT_CRASH_MENU=$enableval else WANT_CRASH_MENU=yes fi if [ "$WANT_CRASH_MENU" = "yes" ]; then $as_echo "#define CRASH_MENU 1" >>confdefs.h fi if [ "$WANT_CRASH_MENU" = "yes" ]; then CCASFLAGS="$CCASFLAGS -DCRASH_MENU" fi fi if test "$WANT_CURSES_BASIC" = "yes"; then WANT_CURSES_BASIC_TRUE= WANT_CURSES_BASIC_FALSE='#' else WANT_CURSES_BASIC_TRUE='#' WANT_CURSES_BASIC_FALSE= fi if test "$WANT_NEW_CYCLE_EXACT" = "yes"; then WANT_NEW_CYCLE_EXACT_TRUE= WANT_NEW_CYCLE_EXACT_FALSE='#' else WANT_NEW_CYCLE_EXACT_TRUE='#' WANT_NEW_CYCLE_EXACT_FALSE= fi # Check whether --enable-pagedattrib was given. if test "${enable_pagedattrib+set}" = set; then : enableval=$enable_pagedattrib; WANT_PAGED_ATTRIB=$enableval else WANT_PAGED_ATTRIB=no fi if [ "$WANT_PAGED_ATTRIB" = "yes" ]; then $as_echo "#define PAGED_ATTRIB 1" >>confdefs.h fi # Check whether --enable-cyclesperopcode was given. if test "${enable_cyclesperopcode+set}" = set; then : enableval=$enable_cyclesperopcode; WANT_CYCLES_PER_OPCODE=$enableval else WANT_CYCLES_PER_OPCODE=no fi if [ "$WANT_CYCLES_PER_OPCODE" = "yes" ]; then $as_echo "#define CYCLES_PER_OPCODE 1" >>confdefs.h fi if [ "$a8_target" = libatari800 ]; then WANT_BUFFERED_LOG=yes $as_echo "#define BUFFERED_LOG 1" >>confdefs.h else # Check whether --enable-bufferedlog was given. if test "${enable_bufferedlog+set}" = set; then : enableval=$enable_bufferedlog; WANT_BUFFERED_LOG=$enableval else WANT_BUFFERED_LOG=no fi if [ "$WANT_BUFFERED_LOG" = "yes" ]; then $as_echo "#define BUFFERED_LOG 1" >>confdefs.h fi fi # Check whether --enable-altirra_bios was given. if test "${enable_altirra_bios+set}" = set; then : enableval=$enable_altirra_bios; WANT_EMUOS_ALTIRRA=$enableval else WANT_EMUOS_ALTIRRA=yes fi if [ "$WANT_EMUOS_ALTIRRA" = "yes" ]; then $as_echo "#define EMUOS_ALTIRRA 1" >>confdefs.h fi if test "$WANT_EMUOS_ALTIRRA" = "yes"; then WANT_EMUOS_ALTIRRA_TRUE= WANT_EMUOS_ALTIRRA_FALSE='#' else WANT_EMUOS_ALTIRRA_TRUE='#' WANT_EMUOS_ALTIRRA_FALSE= fi if [ "$a8_target" = libatari800 ]; then WANT_MONITOR_ASSEMBLER=no WANT_MONITOR_BREAK=no WANT_MONITOR_BREAKPOINTS=no WANT_MONITOR_HINTS=no WANT_MONITOR_PROFILE=no WANT_MONITOR_TRACE=no WANT_MONITOR_ANSI=no WANT_MONITOR_UTF8=no else # Check whether --enable-monitorasm was given. if test "${enable_monitorasm+set}" = set; then : enableval=$enable_monitorasm; WANT_MONITOR_ASSEMBLER=$enableval else WANT_MONITOR_ASSEMBLER=yes fi if [ "$WANT_MONITOR_ASSEMBLER" = "yes" ]; then $as_echo "#define MONITOR_ASSEMBLER 1" >>confdefs.h fi # Check whether --enable-monitorbreak was given. if test "${enable_monitorbreak+set}" = set; then : enableval=$enable_monitorbreak; WANT_MONITOR_BREAK=$enableval else WANT_MONITOR_BREAK=yes fi if [ "$WANT_MONITOR_BREAK" = "yes" ]; then $as_echo "#define MONITOR_BREAK 1" >>confdefs.h fi if [ "$WANT_MONITOR_BREAK" = "yes" ]; then CCASFLAGS="$CCASFLAGS -DMONITOR_BREAK" fi # Check whether --enable-monitorbreakpoints was given. if test "${enable_monitorbreakpoints+set}" = set; then : enableval=$enable_monitorbreakpoints; WANT_MONITOR_BREAKPOINTS=$enableval else WANT_MONITOR_BREAKPOINTS=no fi if [ "$WANT_MONITOR_BREAKPOINTS" = "yes" ]; then $as_echo "#define MONITOR_BREAKPOINTS 1" >>confdefs.h fi # Check whether --enable-monitorhints was given. if test "${enable_monitorhints+set}" = set; then : enableval=$enable_monitorhints; WANT_MONITOR_HINTS=$enableval else WANT_MONITOR_HINTS=yes fi if [ "$WANT_MONITOR_HINTS" = "yes" ]; then $as_echo "#define MONITOR_HINTS 1" >>confdefs.h fi # Check whether --enable-monitorprofile was given. if test "${enable_monitorprofile+set}" = set; then : enableval=$enable_monitorprofile; WANT_MONITOR_PROFILE=$enableval else WANT_MONITOR_PROFILE=no fi if [ "$WANT_MONITOR_PROFILE" = "yes" ]; then $as_echo "#define MONITOR_PROFILE 1" >>confdefs.h fi if [ "$WANT_MONITOR_PROFILE" = "yes" ]; then CCASFLAGS="$CCASFLAGS -DMONITOR_PROFILE" fi # Check whether --enable-monitortrace was given. if test "${enable_monitortrace+set}" = set; then : enableval=$enable_monitortrace; WANT_MONITOR_TRACE=$enableval else WANT_MONITOR_TRACE=no fi if [ "$WANT_MONITOR_TRACE" = "yes" ]; then $as_echo "#define MONITOR_TRACE 1" >>confdefs.h fi # Check whether --enable-monitoransi was given. if test "${enable_monitoransi+set}" = set; then : enableval=$enable_monitoransi; WANT_MONITOR_ANSI=$enableval else WANT_MONITOR_ANSI=yes fi if [ "$WANT_MONITOR_ANSI" = "yes" ]; then $as_echo "#define MONITOR_ANSI 1" >>confdefs.h fi # Check whether --enable-monitorutf8 was given. if test "${enable_monitorutf8+set}" = set; then : enableval=$enable_monitorutf8; WANT_MONITOR_UTF8=$enableval else WANT_MONITOR_UTF8=yes fi if [ "$WANT_MONITOR_UTF8" = "yes" ]; then $as_echo "#define MONITOR_UTF8 1" >>confdefs.h fi fi if [ "$WANT_EVENT_RECORDING" != "no" ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for adler32 in -lz" >&5 $as_echo_n "checking for adler32 in -lz... " >&6; } if ${ac_cv_lib_z_adler32+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char adler32 (); int main () { return adler32 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_adler32=yes else ac_cv_lib_z_adler32=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_adler32" >&5 $as_echo "$ac_cv_lib_z_adler32" >&6; } if test "x$ac_cv_lib_z_adler32" = xyes; then : # Check whether --enable-eventrecording was given. if test "${enable_eventrecording+set}" = set; then : enableval=$enable_eventrecording; WANT_EVENT_RECORDING=$enableval else WANT_EVENT_RECORDING=yes fi if [ "$WANT_EVENT_RECORDING" = "yes" ]; then $as_echo "#define EVENT_RECORDING 1" >>confdefs.h fi else WANT_EVENT_RECORDING="no" fi fi # Check whether --enable-pbi_mio was given. if test "${enable_pbi_mio+set}" = set; then : enableval=$enable_pbi_mio; WANT_PBI_MIO=$enableval else WANT_PBI_MIO=yes fi if [ "$WANT_PBI_MIO" = "yes" ]; then $as_echo "#define PBI_MIO 1" >>confdefs.h fi if test "$WANT_PBI_MIO" = "yes"; then WANT_PBI_MIO_TRUE= WANT_PBI_MIO_FALSE='#' else WANT_PBI_MIO_TRUE='#' WANT_PBI_MIO_FALSE= fi # Check whether --enable-pbi_bb was given. if test "${enable_pbi_bb+set}" = set; then : enableval=$enable_pbi_bb; WANT_PBI_BB=$enableval else WANT_PBI_BB=yes fi if [ "$WANT_PBI_BB" = "yes" ]; then $as_echo "#define PBI_BB 1" >>confdefs.h fi if test "$WANT_PBI_BB" = "yes"; then WANT_PBI_BB_TRUE= WANT_PBI_BB_FALSE='#' else WANT_PBI_BB_TRUE='#' WANT_PBI_BB_FALSE= fi # Check whether --with-sound was given. if test "${with_sound+set}" = set; then : withval=$with_sound; case "$withval" in no | yes | check | dossb | oss | falcon | win | sdl | javanvm) ;; *) as_fn_error $? "unrecognized value for --with-sound: \"$withval\"" "$LINENO" 5 ;; esac else with_sound=check fi if [ "$a8_target" = libatari800 ]; then if [ "$with_sound" = check -o "$with_sound" = yes ]; then with_sound=libatari800 WANT_SOUND_THIN_API=yes WANT_SOUND_CALLBACK=no WANT_CONSOLE_SOUND=yes WANT_SERIO_SOUND=yes WANT_VOL_ONLY_SOUND=no WANT_SYNCHRONIZED_SOUND=no enable_synchronized_sound=no else as_fn_error $? "--with-audio option not needed to build libatari800!" "$LINENO" 5 fi elif [ "$a8_target" != "ps2" -a "$a8_target" != "android" ]; then if [ "$with_sound" != no ]; then if [ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = javanvm ]; then if [ "$a8_host" = javanvm ]; then with_sound=javanvm elif [ "$with_sound" = javanvm ]; then as_fn_error $? "--with-sound=javanvm was given, but host system is not NestedVM!" "$LINENO" 5 fi fi if [ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = win ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lwinmm" >&5 $as_echo_n "checking for main in -lwinmm... " >&6; } if ${ac_cv_lib_winmm_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lwinmm $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_winmm_main=yes else ac_cv_lib_winmm_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_winmm_main" >&5 $as_echo "$ac_cv_lib_winmm_main" >&6; } if test "x$ac_cv_lib_winmm_main" = xyes; then : LIBS="-lwinmm $LIBS" with_sound=win else if [ "$with_sound" = win ]; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-sound=win was given, but WinMM library not found! See \`config.log' for more details" "$LINENO" 5; } fi fi fi if [ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = falcon ]; then if [ "$a8_host" = falcon -o "$a8_host" = firebee ]; then with_sound=falcon elif [ "$with_sound" = falcon ]; then as_fn_error $? "--with-sound=falcon was given, but host system is not Falcon!" "$LINENO" 5 fi fi if [ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = dossb ]; then if [ "$a8_host" = dos ]; then with_sound=dossb elif [ "$with_sound" = dossb ]; then as_fn_error $? "--with-sound=dossb was given, but host system is not DOS!" "$LINENO" 5 fi fi if [ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = sdl ]; then if [ "$a8_use_sdl" = no ]; then SDL_VERSION=1.2.0 # Check whether --with-sdl-prefix was given. if test "${with_sdl_prefix+set}" = set; then : withval=$with_sdl_prefix; sdl_prefix="$withval" else sdl_prefix="" fi # Check whether --with-sdl-exec-prefix was given. if test "${with_sdl_exec_prefix+set}" = set; then : withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" else sdl_exec_prefix="" fi # Check whether --enable-sdltest was given. if test "${enable_sdltest+set}" = set; then : enableval=$enable_sdltest; else enable_sdltest=yes fi if test x$sdl_exec_prefix != x ; then sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi as_save_PATH="$PATH" if test "x$prefix" != xNONE; then PATH="$prefix/bin:$prefix/usr/bin:$PATH" fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SDL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SDL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" ;; esac fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG if test -n "$SDL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5 $as_echo "$SDL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi PATH="$as_save_PATH" min_sdl_version=$SDL_VERSION { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5 $as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" rm -f conf.sdltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_sdl=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define SDL 1" >>confdefs.h $as_echo "#define SUPPORTS_PLATFORM_TIME 1" >>confdefs.h LIBS="$LIBS $SDL_LIBS" CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" if [ "$a8_host" = "win" ]; then CPPFLAGS=${CPPFLAGS/-Dmain=SDL_main/} LIBS=${LIBS/-lSDLmain/} CPPFLAGS="$CPPFLAGS -DNO_STDIO_REDIRECT" LIBS=${LIBS/-mwindows/} fi a8_use_sdl=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" : fi rm -f conf.sdltest fi if [ "$a8_use_sdl" = yes ]; then with_sound=sdl elif [ "$with_sound" = sdl ]; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--with-sound=sdl was given, but SDL library not found! See \`config.log' for more details" "$LINENO" 5; } fi fi if [ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = oss ]; then if [ "$SUPPORTS_SOUND_OSS" = yes ]; then with_sound=oss elif [ "$with_sound" = oss ]; then as_fn_error $? "--with-sound=oss was given, but OSS is not supported!" "$LINENO" 5 fi fi fi if [ "$with_sound" = check ]; then with_sound=no fi case "$with_sound" in javanvm) WANT_SOUND_THIN_API=yes ;; sdl) WANT_SOUND_THIN_API=yes WANT_SOUND_CALLBACK=yes ;; win) $as_echo "#define SUPPORTS_SOUND_REINIT 1" >>confdefs.h ;; falcon) $as_echo "#define POKEYSND_SIGNED_SAMPLES 1" >>confdefs.h WANT_SOUND_THIN_API=yes ;; oss) WANT_SOUND_THIN_API=yes ;; dossb) WANT_SOUND_THIN_API=yes WANT_SOUND_CALLBACK=yes ;; no) ;; *) as_fn_error $? "--with-sound=$with_sound was given, but no sound library found!" "$LINENO" 5 ;; esac fi if test "$with_sound" != no; then WITH_SOUND_TRUE= WITH_SOUND_FALSE='#' else WITH_SOUND_TRUE='#' WITH_SOUND_FALSE= fi if test "$with_sound" = javanvm; then WITH_SOUND_JAVANVM_TRUE= WITH_SOUND_JAVANVM_FALSE='#' else WITH_SOUND_JAVANVM_TRUE='#' WITH_SOUND_JAVANVM_FALSE= fi if test "$with_sound" = falcon; then WITH_SOUND_FALCON_TRUE= WITH_SOUND_FALCON_FALSE='#' else WITH_SOUND_FALCON_TRUE='#' WITH_SOUND_FALCON_FALSE= fi if test "$with_sound" = oss; then WITH_SOUND_OSS_TRUE= WITH_SOUND_OSS_FALSE='#' else WITH_SOUND_OSS_TRUE='#' WITH_SOUND_OSS_FALSE= fi if test "$with_sound" = sdl; then WITH_SOUND_SDL_TRUE= WITH_SOUND_SDL_FALSE='#' else WITH_SOUND_SDL_TRUE='#' WITH_SOUND_SDL_FALSE= fi if test "$with_sound" = win; then WITH_SOUND_WIN_TRUE= WITH_SOUND_WIN_FALSE='#' else WITH_SOUND_WIN_TRUE='#' WITH_SOUND_WIN_FALSE= fi if test "$with_sound" = dossb; then WITH_SOUND_DOSSB_TRUE= WITH_SOUND_DOSSB_FALSE='#' else WITH_SOUND_DOSSB_TRUE='#' WITH_SOUND_DOSSB_FALSE= fi if test "$with_sound" = libatari800; then WITH_SOUND_LIBATARI800_TRUE= WITH_SOUND_LIBATARI800_FALSE='#' else WITH_SOUND_LIBATARI800_TRUE='#' WITH_SOUND_LIBATARI800_FALSE= fi if test "$a8_use_sdl" = yes; then A8_USE_SDL_TRUE= A8_USE_SDL_FALSE='#' else A8_USE_SDL_TRUE='#' A8_USE_SDL_FALSE= fi if [ "$with_sound" != no ]; then $as_echo "#define SOUND 1" >>confdefs.h if [ "$WANT_SOUND_THIN_API" = "yes" ]; then $as_echo "#define SOUND_THIN_API 1" >>confdefs.h # Check whether --enable-synchronized_sound was given. if test "${enable_synchronized_sound+set}" = set; then : enableval=$enable_synchronized_sound; WANT_SYNCHRONIZED_SOUND=$enableval else WANT_SYNCHRONIZED_SOUND=yes fi if [ "$WANT_SYNCHRONIZED_SOUND" = "yes" ]; then $as_echo "#define SYNCHRONIZED_SOUND 1" >>confdefs.h fi if [ "$WANT_SOUND_CALLBACK" = "yes" ]; then $as_echo "#define SOUND_CALLBACK 1" >>confdefs.h fi else WANT_SYNCHRONIZED_SOUND="no" fi # Check whether --enable-nonlinear_mixing was given. if test "${enable_nonlinear_mixing+set}" = set; then : enableval=$enable_nonlinear_mixing; WANT_NONLINEAR_MIXING=$enableval else WANT_NONLINEAR_MIXING=yes fi if [ "$WANT_NONLINEAR_MIXING" = "yes" ]; then $as_echo "#define NONLINEAR_MIXING 1" >>confdefs.h fi # Check whether --enable-interpolatesound was given. if test "${enable_interpolatesound+set}" = set; then : enableval=$enable_interpolatesound; WANT_INTERPOLATE_SOUND=$enableval else WANT_INTERPOLATE_SOUND=yes fi if [ "$WANT_INTERPOLATE_SOUND" = "yes" ]; then $as_echo "#define INTERPOLATE_SOUND 1" >>confdefs.h fi # Check whether --enable-stereosound was given. if test "${enable_stereosound+set}" = set; then : enableval=$enable_stereosound; WANT_STEREO_SOUND=$enableval else WANT_STEREO_SOUND=yes fi if [ "$WANT_STEREO_SOUND" = "yes" ]; then $as_echo "#define STEREO_SOUND 1" >>confdefs.h fi if [ "$WANT_SYNCHRONIZED_SOUND" != "yes" ]; then # Check whether --enable-volonlysound was given. if test "${enable_volonlysound+set}" = set; then : enableval=$enable_volonlysound; WANT_VOL_ONLY_SOUND=$enableval else WANT_VOL_ONLY_SOUND=yes fi if [ "$WANT_VOL_ONLY_SOUND" = "yes" ]; then $as_echo "#define VOL_ONLY_SOUND 1" >>confdefs.h fi fi if [ "$WANT_SYNCHRONIZED_SOUND" = "yes" -o "$WANT_VOL_ONLY_SOUND" = "yes" ]; then # Check whether --enable-consolesound was given. if test "${enable_consolesound+set}" = set; then : enableval=$enable_consolesound; WANT_CONSOLE_SOUND=$enableval else WANT_CONSOLE_SOUND=yes fi if [ "$WANT_CONSOLE_SOUND" = "yes" ]; then $as_echo "#define CONSOLE_SOUND 1" >>confdefs.h fi # Check whether --enable-seriosound was given. if test "${enable_seriosound+set}" = set; then : enableval=$enable_seriosound; WANT_SERIO_SOUND=$enableval else WANT_SERIO_SOUND=no fi if [ "$WANT_SERIO_SOUND" = "yes" ]; then $as_echo "#define SERIO_SOUND 1" >>confdefs.h fi else WANT_CONSOLE_SOUND="no" WANT_SERIO_SOUND="no" fi # Check whether --enable-clipsound was given. if test "${enable_clipsound+set}" = set; then : enableval=$enable_clipsound; WANT_CLIP_SOUND=$enableval else WANT_CLIP_SOUND=no fi if [ "$WANT_CLIP_SOUND" = "yes" ]; then $as_echo "#define CLIP_SOUND 1" >>confdefs.h fi # Check whether --enable-pbi_xld was given. if test "${enable_pbi_xld+set}" = set; then : enableval=$enable_pbi_xld; WANT_PBI_XLD=$enableval else WANT_PBI_XLD=yes fi if [ "$WANT_PBI_XLD" = "yes" ]; then $as_echo "#define PBI_XLD 1" >>confdefs.h fi # Check whether --enable-voicebox was given. if test "${enable_voicebox+set}" = set; then : enableval=$enable_voicebox; WANT_VOICEBOX=$enableval else WANT_VOICEBOX=yes fi if [ "$WANT_VOICEBOX" = "yes" ]; then $as_echo "#define VOICEBOX 1" >>confdefs.h fi supported_audio_codecs="pcm adpcm mulaw" # Check whether --with-mp3 was given. if test "${with_mp3+set}" = set; then : withval=$with_mp3; case "$withval" in no | yes | check | lame) ;; *) as_fn_error $? "unrecognized value for --with-mp3: \"$withval\"" "$LINENO" 5 ;; esac else with_mp3=check fi if [ "$with_mp3" != "no" ]; then if [ "$with_mp3" = check -o "$with_mp3" = yes -o "$with_mp3" = lame ]; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lame_init in -lmp3lame" >&5 $as_echo_n "checking for lame_init in -lmp3lame... " >&6; } if ${ac_cv_lib_mp3lame_lame_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmp3lame $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char lame_init (); int main () { return lame_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mp3lame_lame_init=yes else ac_cv_lib_mp3lame_lame_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mp3lame_lame_init" >&5 $as_echo "$ac_cv_lib_mp3lame_lame_init" >&6; } if test "x$ac_cv_lib_mp3lame_lame_init" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "lame.h" "ac_cv_header_lame_h" "$ac_includes_default" if test "x$ac_cv_header_lame_h" = xyes; then : else _a8_saved_cppflags=$CPPFLAGS _a8_found=no for _a8_dir in ${prefix}/include /usr/include /usr/local/include; do for _a8_subdir in lame; do _a8_fulldir="$_a8_dir/$_a8_subdir" test ! -d "$_a8_fulldir" && continue { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lame headers in" >&5 $as_echo_n "checking for lame headers in... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_a8_fulldir" >&5 $as_echo "$_a8_fulldir" >&6; } { ac_cv_header_lame_h=; unset ac_cv_header_lame_h;} CPPFLAGS="$_a8_saved_cppflags -I$_a8_fulldir" ac_fn_c_check_header_mongrel "$LINENO" "lame.h" "ac_cv_header_lame_h" "$ac_includes_default" if test "x$ac_cv_header_lame_h" = xyes; then : _a8_found="yes"; break fi done if [ "$_a8_found" = "yes" ]; then break fi done if [ "$_a8_found" != "yes" ]; then CPPFLAGS=$_a8_saved_cppflags if [ "$with_mp3" = yes -o "$with_mp3" = "lame" ]; then as_fn_error $? "lame.h not found, modify CPPFLAGS or use --with-mp3=check" "$LINENO" 5 fi with_mp3=no fi { _a8_found=; unset _a8_found;} { _a8_dir=; unset _a8_dir;} { _a8_subdir=; unset _a8_subdir;} { _a8_fulldir=; unset _a8_fulldir;} { _a8_saved_cppflags=; unset _a8_saved_cppflags;} fi if [ $with_mp3 != no ]; then LIBS="-lmp3lame $LIBS" $as_echo "#define AUDIO_CODEC_MP3 1" >>confdefs.h supported_audio_codecs="$supported_audio_codecs mp3" with_mp3="libmp3lame" fi else if [ "$with_mp3" = yes -o "$with_mp3" = "lame" ]; then as_fn_error $? "unable to find libmp3lame, modify LDFLAGS or use --with-mp3=check" "$LINENO" 5 fi with_mp3="no" fi fi fi else WANT_NONLINEAR_MIXING="no" WANT_SYNCHRONIZED_SOUND="no" WANT_INTERPOLATE_SOUND="no" WANT_STEREO_SOUND="no" WANT_VOL_ONLY_SOUND="no" WANT_CONSOLE_SOUND="no" WANT_SERIO_SOUND="no" WANT_CLIP_SOUND="no" WANT_PBI_XLD_SOUND="no" WANT_AUDIO_CODEC_MP3="no" fi if test "$WANT_PBI_XLD" = "yes"; then WANT_PBI_XLD_TRUE= WANT_PBI_XLD_FALSE='#' else WANT_PBI_XLD_TRUE='#' WANT_PBI_XLD_FALSE= fi if test "$WANT_VOICEBOX" = "yes"; then WANT_VOICEBOX_TRUE= WANT_VOICEBOX_FALSE='#' else WANT_VOICEBOX_TRUE='#' WANT_VOICEBOX_FALSE= fi if test "$WANT_PBI_XLD" = "yes" -o "$WANT_VOICEBOX" = "yes"; then WANT_PBI_XLD_OR_VOICEBOX_TRUE= WANT_PBI_XLD_OR_VOICEBOX_FALSE='#' else WANT_PBI_XLD_OR_VOICEBOX_TRUE='#' WANT_PBI_XLD_OR_VOICEBOX_FALSE= fi if test "$WANT_PBI_MIO" = "yes" -o "$WANT_PBI_BB" = "yes"; then WANT_PBI_MIO_OR_BB_TRUE= WANT_PBI_MIO_OR_BB_FALSE='#' else WANT_PBI_MIO_OR_BB_TRUE='#' WANT_PBI_MIO_OR_BB_FALSE= fi if test "$with_mp3" != "no"; then WITH_AUDIO_CODEC_MP3_TRUE= WITH_AUDIO_CODEC_MP3_FALSE='#' else WITH_AUDIO_CODEC_MP3_TRUE='#' WITH_AUDIO_CODEC_MP3_FALSE= fi if [ "$with_video" != no -a "$WANT_CURSES_BASIC" != yes ]; then have_bitmapped_screen=yes # Check whether --enable-videorecording was given. if test "${enable_videorecording+set}" = set; then : enableval=$enable_videorecording; WANT_VIDEO_RECORDING=$enableval else WANT_VIDEO_RECORDING="yes" fi if [ "$WANT_VIDEO_RECORDING" = "yes" ]; then $as_echo "#define VIDEO_RECORDING 1" >>confdefs.h fi supported_image_formats="pcx" if [ "$SUPPORTS_LIBPNG" = "yes" ]; then supported_image_formats="$supported_image_formats png" fi else have_bitmapped_screen="no" WANT_VIDEO_RECORDING="no" fi if [ "$with_sound" != no -o "$WANT_VIDEO_RECORDING" = yes ]; then $as_echo "#define MULTIMEDIA 1" >>confdefs.h fi if test "$with_sound" != no -o "$WANT_VIDEO_RECORDING" = "yes"; then WITH_MULTIMEDIA_TRUE= WITH_MULTIMEDIA_FALSE='#' else WITH_MULTIMEDIA_TRUE='#' WITH_MULTIMEDIA_FALSE= fi if test "$with_sound" != no -o "$have_bitmapped_screen" = "yes"; then WITH_FILE_EXPORT_TRUE= WITH_FILE_EXPORT_FALSE='#' else WITH_FILE_EXPORT_TRUE='#' WITH_FILE_EXPORT_FALSE= fi if [ "$WANT_VIDEO_RECORDING" = "yes" ]; then supported_video_codecs="rle" if [ "$SUPPORTS_LIBPNG" = "yes" ]; then # Check whether --enable-pngcodec was given. if test "${enable_pngcodec+set}" = set; then : enableval=$enable_pngcodec; WANT_VIDEO_CODEC_PNG=$enableval else WANT_VIDEO_CODEC_PNG="yes" fi if [ "$WANT_VIDEO_CODEC_PNG" = "yes" ]; then $as_echo "#define VIDEO_CODEC_PNG 1" >>confdefs.h fi if [ "$WANT_VIDEO_CODEC_PNG" = "yes" ]; then supported_video_codecs="$supported_video_codecs png" fi else WANT_VIDEO_CODEC_PNG=no fi # Check whether --enable-zmbvcodec was given. if test "${enable_zmbvcodec+set}" = set; then : enableval=$enable_zmbvcodec; WANT_VIDEO_CODEC_ZMBV=$enableval else WANT_VIDEO_CODEC_ZMBV="yes" fi if [ "$WANT_VIDEO_CODEC_ZMBV" = "yes" ]; then $as_echo "#define VIDEO_CODEC_ZMBV 1" >>confdefs.h fi if [ "$WANT_VIDEO_CODEC_ZMBV" = "yes" ]; then supported_video_codecs="$supported_video_codecs zmbv" fi fi if test "$WANT_VIDEO_RECORDING" = "yes"; then WITH_VIDEO_RECORDING_TRUE= WITH_VIDEO_RECORDING_FALSE='#' else WITH_VIDEO_RECORDING_TRUE='#' WITH_VIDEO_RECORDING_FALSE= fi if test "$WANT_VIDEO_RECORDING" = "yes" -a "$WANT_VIDEO_CODEC_PNG" = "yes"; then WITH_VIDEO_CODEC_PNG_TRUE= WITH_VIDEO_CODEC_PNG_FALSE='#' else WITH_VIDEO_CODEC_PNG_TRUE='#' WITH_VIDEO_CODEC_PNG_FALSE= fi if test "$WANT_VIDEO_RECORDING" = "yes" -a "$WANT_VIDEO_CODEC_ZMBV" = "yes"; then WITH_VIDEO_CODEC_ZMBV_TRUE= WITH_VIDEO_CODEC_ZMBV_FALSE='#' else WITH_VIDEO_CODEC_ZMBV_TRUE='#' WITH_VIDEO_CODEC_ZMBV_FALSE= fi # Check whether --enable-ide was given. if test "${enable_ide+set}" = set; then : enableval=$enable_ide; WANT_IDE=$enableval else WANT_IDE=$WANT_IDE fi if [ "$WANT_IDE" = "yes" ]; then $as_echo "#define IDE 1" >>confdefs.h fi if [ "$WANT_IDE" = "yes" ]; then # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi fi if test "$WANT_IDE" = "yes"; then WANT_IDE_TRUE= WANT_IDE_FALSE='#' else WANT_IDE_TRUE='#' WANT_IDE_FALSE= fi # Check whether --enable-pokeyrec was given. if test "${enable_pokeyrec+set}" = set; then : enableval=$enable_pokeyrec; WANT_POKEYREC=$enableval else WANT_POKEYREC=$WANT_POKEYREC fi if [ "$WANT_POKEYREC" = "yes" ]; then $as_echo "#define POKEYREC 1" >>confdefs.h fi if [ "$WANT_POKEYREC" = "yes" ]; then # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi fi if test "$WANT_POKEYREC" = "yes"; then WANT_POKEYREC_TRUE= WANT_POKEYREC_FALSE='#' else WANT_POKEYREC_TRUE='#' WANT_POKEYREC_FALSE= fi if [ "$a8_use_sdl" = yes ]; then # Check whether --enable-onscreenkeyboard was given. if test "${enable_onscreenkeyboard+set}" = set; then : enableval=$enable_onscreenkeyboard; WANT_USE_UI_BASIC_ONSCREEN_KEYBOARD=$enableval else WANT_USE_UI_BASIC_ONSCREEN_KEYBOARD=no fi if [ "$WANT_USE_UI_BASIC_ONSCREEN_KEYBOARD" = "yes" ]; then $as_echo "#define USE_UI_BASIC_ONSCREEN_KEYBOARD 1" >>confdefs.h fi fi # Check whether --with-readline was given. if test "${with_readline+set}" = set; then : withval=$with_readline; else with_readline=check fi if [ "$with_readline" != no ]; then have_readline=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5 $as_echo_n "checking for library containing tgetent... " >&6; } if ${ac_cv_search_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF for ac_lib in '' readline termcap ncursesw ncurses curses; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_tgetent=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_tgetent+:} false; then : break fi done if ${ac_cv_search_tgetent+:} false; then : else ac_cv_search_tgetent=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_tgetent" >&5 $as_echo "$ac_cv_search_tgetent" >&6; } ac_res=$ac_cv_search_tgetent if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing readline" >&5 $as_echo_n "checking for library containing readline... " >&6; } if ${ac_cv_search_readline+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char readline (); int main () { return readline (); ; return 0; } _ACEOF for ac_lib in '' readline; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_readline=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_readline+:} false; then : break fi done if ${ac_cv_search_readline+:} false; then : else ac_cv_search_readline=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_readline" >&5 $as_echo "$ac_cv_search_readline" >&6; } ac_res=$ac_cv_search_readline if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ac_fn_c_check_header_mongrel "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default" if test "x$ac_cv_header_readline_readline_h" = xyes; then : have_readline=yes else if [ "$with_readline" = yes ]; then as_fn_error $? "unable to use libreadline - readline/readline.h not found or not compilable." "$LINENO" 5 fi fi else if [ "$with_readline" = yes ]; then as_fn_error $? "unable to link libreadline - the library is not installed on this system." "$LINENO" 5 fi fi else if [ "$with_readline" = yes ]; then as_fn_error $? "unable to properly link libreadline - a library \ providing termcap functionality is not found. Try installing one of ncursew, \ ncurses, curses, termcap." "$LINENO" 5 fi fi with_readline=$have_readline fi if [ "$with_readline" = yes ]; then $as_echo "#define MONITOR_READLINE 1" >>confdefs.h fi # Check whether --with-opengl was given. if test "${with_opengl+set}" = set; then : withval=$with_opengl; else with_opengl=check fi if [ "$a8_target" != default -o "$with_video" != sdl ]; then if [ "$with_opengl" = "yes" ]; then as_fn_error $? "option --with-opengl only supported with --target=default --with-video=sdl!" "$LINENO" 5 fi with_opengl=no fi if [ "$with_opengl" != no ]; then have_opengl=no ac_fn_c_check_header_mongrel "$LINENO" "SDL_opengl.h" "ac_cv_header_SDL_opengl_h" "$ac_includes_default" if test "x$ac_cv_header_SDL_opengl_h" = xyes; then : have_opengl=yes else if [ "$with_opengl" = yes ]; then as_fn_error $? "unable to use OpenGL - SDL_opengl.h not found or not compilable." "$LINENO" 5 fi fi with_opengl=$have_opengl fi if [ "$with_opengl" = "yes" ]; then $as_echo "#define HAVE_OPENGL 1" >>confdefs.h # Check whether --enable-opengl-by-default was given. if test "${enable_opengl_by_default+set}" = set; then : enableval=$enable_opengl_by_default; WANT_VIDEO_ACCEL_ON_BY_DEFAULT=$enableval else WANT_VIDEO_ACCEL_ON_BY_DEFAULT=no fi if [ "$WANT_VIDEO_ACCEL_ON_BY_DEFAULT" = "yes" ]; then $as_echo "#define VIDEO_ACCEL_ON_BY_DEFAULT 1" >>confdefs.h fi fi if test "$with_opengl" = "yes"; then WITH_OPENGL_TRUE= WITH_OPENGL_FALSE='#' else WITH_OPENGL_TRUE='#' WITH_OPENGL_FALSE= fi if [ "$a8_host" = "falcon" ]; then # Check whether --enable-falconcpuasm was given. if test "${enable_falconcpuasm+set}" = set; then : enableval=$enable_falconcpuasm; WANT_FALCON_CPUASM=$enableval else WANT_FALCON_CPUASM=no fi if [ "$WANT_FALCON_CPUASM" = "yes" ]; then $as_echo "#define FALCON_CPUASM 1" >>confdefs.h fi fi if test "$WANT_FALCON_CPUASM" = "yes"; then WANT_FALCON_CPUASM_TRUE= WANT_FALCON_CPUASM_FALSE='#' else WANT_FALCON_CPUASM_TRUE='#' WANT_FALCON_CPUASM_FALSE= fi if [ "$a8_host" = "linux" ]; then case "$a8_target" in x11*) # Check whether --enable-linuxjoystick was given. if test "${enable_linuxjoystick+set}" = set; then : enableval=$enable_linuxjoystick; WANT_LINUX_JOYSTICK=$enableval else WANT_LINUX_JOYSTICK=yes fi if [ "$WANT_LINUX_JOYSTICK" = "yes" ]; then $as_echo "#define LINUX_JOYSTICK 1" >>confdefs.h fi esac fi if [ "$a8_target" = "windx" ]; then # Check whether --enable-cursorblock was given. if test "${enable_cursorblock+set}" = set; then : enableval=$enable_cursorblock; WANT_USE_CURSORBLOCK=$enableval else WANT_USE_CURSORBLOCK=no fi if [ "$WANT_USE_CURSORBLOCK" = "yes" ]; then $as_echo "#define USE_CURSORBLOCK 1" >>confdefs.h fi fi if [ "$WANT_XEP80_EMULATION" = "yes" ]; then $as_echo "#define XEP80_EMULATION 1" >>confdefs.h fi if test "$WANT_XEP80_EMULATION" = "yes"; then WANT_XEP80_EMULATION_TRUE= WANT_XEP80_EMULATION_FALSE='#' else WANT_XEP80_EMULATION_TRUE='#' WANT_XEP80_EMULATION_FALSE= fi if [ "$WANT_NTSC_FILTER" = "yes" ]; then $as_echo "#define NTSC_FILTER 1" >>confdefs.h fi if test "$WANT_NTSC_FILTER" = "yes"; then WANT_NTSC_FILTER_TRUE= WANT_NTSC_FILTER_FALSE='#' else WANT_NTSC_FILTER_TRUE='#' WANT_NTSC_FILTER_FALSE= fi if [ "$WANT_PAL_BLENDING" = "yes" ]; then $as_echo "#define PAL_BLENDING 1" >>confdefs.h fi if test "$WANT_PAL_BLENDING" = "yes"; then WANT_PAL_BLENDING_TRUE= WANT_PAL_BLENDING_FALSE='#' else WANT_PAL_BLENDING_TRUE='#' WANT_PAL_BLENDING_FALSE= fi if [ "$SUPPORTS_RDEVICE" = "yes" ]; then # Check whether --enable-riodevice was given. if test "${enable_riodevice+set}" = set; then : enableval=$enable_riodevice; WANT_R_IO_DEVICE=$enableval else WANT_R_IO_DEVICE=yes fi if [ "$WANT_R_IO_DEVICE" = "yes" ]; then $as_echo "#define R_IO_DEVICE 1" >>confdefs.h fi if [ "$WANT_R_IO_DEVICE" = "yes" ]; then # Check whether --enable-rnetwork was given. if test "${enable_rnetwork+set}" = set; then : enableval=$enable_rnetwork; WANT_R_NETWORK=$enableval else WANT_R_NETWORK=yes fi if [ "$WANT_R_NETWORK" = "yes" ]; then $as_echo "#define R_NETWORK 1" >>confdefs.h fi if [ "$a8_host" != "win" -a "$a8_host" != "macos" ]; then # Check whether --enable-rserial was given. if test "${enable_rserial+set}" = set; then : enableval=$enable_rserial; WANT_R_SERIAL=$enableval else WANT_R_SERIAL=yes fi if [ "$WANT_R_SERIAL" = "yes" ]; then $as_echo "#define R_SERIAL 1" >>confdefs.h fi else if [ "$a8_host" = "win" ]; then as_ac_Lib=`$as_echo "ac_cv_lib_ws2_32''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lws2_32" >&5 $as_echo_n "checking for main in -lws2_32... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lws2_32 $LIBS" if test x$ac_no_link = xyes; then as_fn_error $? "link tests are not allowed after AC_NO_EXECUTABLES" "$LINENO" 5 fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_LIBws2_32" | $as_tr_cpp` 1 _ACEOF LIBS="-lws2_32 $LIBS" else as_fn_error $? "\"ws2_32 library not found!\"" "$LINENO" 5 fi fi WANT_R_SERIAL="no" fi fi fi if test "$WANT_R_IO_DEVICE" = "yes"; then WANT_R_IO_DEVICE_TRUE= WANT_R_IO_DEVICE_FALSE='#' else WANT_R_IO_DEVICE_TRUE='#' WANT_R_IO_DEVICE_FALSE= fi CFLAGS_NOANSI=`echo $CFLAGS | sed -e 's/-ansi//' -e 's/-pedantic//'` ac_config_files="$ac_config_files Makefile DOC/Makefile src/Makefile tools/Makefile" if [ "$a8_target" = "android" ]; then ac_config_files="$ac_config_files src/android/jni/Android.mk" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_LIBPNG_TRUE}" && test -z "${WITH_LIBPNG_FALSE}"; then as_fn_error $? "conditional \"WITH_LIBPNG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_HOST_JAVANVM_TRUE}" && test -z "${CONFIGURE_HOST_JAVANVM_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_HOST_JAVANVM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_HOST_DOS_TRUE}" && test -z "${CONFIGURE_HOST_DOS_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_HOST_DOS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_HOST_WIN_TRUE}" && test -z "${CONFIGURE_HOST_WIN_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_HOST_WIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_TARGET_ANDROID_TRUE}" && test -z "${CONFIGURE_TARGET_ANDROID_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_TARGET_ANDROID\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_TARGET_FALCON_TRUE}" && test -z "${CONFIGURE_TARGET_FALCON_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_TARGET_FALCON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_TARGET_PS2_TRUE}" && test -z "${CONFIGURE_TARGET_PS2_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_TARGET_PS2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_TARGET_RPI_TRUE}" && test -z "${CONFIGURE_TARGET_RPI_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_TARGET_RPI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_TARGET_WINDX_TRUE}" && test -z "${CONFIGURE_TARGET_WINDX_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_TARGET_WINDX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_TARGET_LIBATARI800_TRUE}" && test -z "${CONFIGURE_TARGET_LIBATARI800_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_TARGET_LIBATARI800\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CONFIGURE_TARGET_X11_TRUE}" && test -z "${CONFIGURE_TARGET_X11_FALSE}"; then as_fn_error $? "conditional \"CONFIGURE_TARGET_X11\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_JAVANVM_TRUE}" && test -z "${WITH_VIDEO_JAVANVM_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_JAVANVM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_SDL_TRUE}" && test -z "${WITH_VIDEO_SDL_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_DOSVGA_TRUE}" && test -z "${WITH_VIDEO_DOSVGA_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_DOSVGA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_CURSES_TRUE}" && test -z "${WITH_VIDEO_CURSES_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_CURSES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_LIBATARI800_TRUE}" && test -z "${WITH_VIDEO_LIBATARI800_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_LIBATARI800\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_NO_TRUE}" && test -z "${WITH_VIDEO_NO_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_NO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_CURSES_BASIC_TRUE}" && test -z "${WANT_CURSES_BASIC_FALSE}"; then as_fn_error $? "conditional \"WANT_CURSES_BASIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_NEW_CYCLE_EXACT_TRUE}" && test -z "${WANT_NEW_CYCLE_EXACT_FALSE}"; then as_fn_error $? "conditional \"WANT_NEW_CYCLE_EXACT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_EMUOS_ALTIRRA_TRUE}" && test -z "${WANT_EMUOS_ALTIRRA_FALSE}"; then as_fn_error $? "conditional \"WANT_EMUOS_ALTIRRA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_PBI_MIO_TRUE}" && test -z "${WANT_PBI_MIO_FALSE}"; then as_fn_error $? "conditional \"WANT_PBI_MIO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_PBI_BB_TRUE}" && test -z "${WANT_PBI_BB_FALSE}"; then as_fn_error $? "conditional \"WANT_PBI_BB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_TRUE}" && test -z "${WITH_SOUND_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_JAVANVM_TRUE}" && test -z "${WITH_SOUND_JAVANVM_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND_JAVANVM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_FALCON_TRUE}" && test -z "${WITH_SOUND_FALCON_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND_FALCON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_OSS_TRUE}" && test -z "${WITH_SOUND_OSS_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND_OSS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_SDL_TRUE}" && test -z "${WITH_SOUND_SDL_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_WIN_TRUE}" && test -z "${WITH_SOUND_WIN_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND_WIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_DOSSB_TRUE}" && test -z "${WITH_SOUND_DOSSB_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND_DOSSB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_SOUND_LIBATARI800_TRUE}" && test -z "${WITH_SOUND_LIBATARI800_FALSE}"; then as_fn_error $? "conditional \"WITH_SOUND_LIBATARI800\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${A8_USE_SDL_TRUE}" && test -z "${A8_USE_SDL_FALSE}"; then as_fn_error $? "conditional \"A8_USE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_PBI_XLD_TRUE}" && test -z "${WANT_PBI_XLD_FALSE}"; then as_fn_error $? "conditional \"WANT_PBI_XLD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_VOICEBOX_TRUE}" && test -z "${WANT_VOICEBOX_FALSE}"; then as_fn_error $? "conditional \"WANT_VOICEBOX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_PBI_XLD_OR_VOICEBOX_TRUE}" && test -z "${WANT_PBI_XLD_OR_VOICEBOX_FALSE}"; then as_fn_error $? "conditional \"WANT_PBI_XLD_OR_VOICEBOX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_PBI_MIO_OR_BB_TRUE}" && test -z "${WANT_PBI_MIO_OR_BB_FALSE}"; then as_fn_error $? "conditional \"WANT_PBI_MIO_OR_BB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_AUDIO_CODEC_MP3_TRUE}" && test -z "${WITH_AUDIO_CODEC_MP3_FALSE}"; then as_fn_error $? "conditional \"WITH_AUDIO_CODEC_MP3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_MULTIMEDIA_TRUE}" && test -z "${WITH_MULTIMEDIA_FALSE}"; then as_fn_error $? "conditional \"WITH_MULTIMEDIA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_FILE_EXPORT_TRUE}" && test -z "${WITH_FILE_EXPORT_FALSE}"; then as_fn_error $? "conditional \"WITH_FILE_EXPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_RECORDING_TRUE}" && test -z "${WITH_VIDEO_RECORDING_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_RECORDING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_CODEC_PNG_TRUE}" && test -z "${WITH_VIDEO_CODEC_PNG_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_CODEC_PNG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VIDEO_CODEC_ZMBV_TRUE}" && test -z "${WITH_VIDEO_CODEC_ZMBV_FALSE}"; then as_fn_error $? "conditional \"WITH_VIDEO_CODEC_ZMBV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_IDE_TRUE}" && test -z "${WANT_IDE_FALSE}"; then as_fn_error $? "conditional \"WANT_IDE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_POKEYREC_TRUE}" && test -z "${WANT_POKEYREC_FALSE}"; then as_fn_error $? "conditional \"WANT_POKEYREC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_OPENGL_TRUE}" && test -z "${WITH_OPENGL_FALSE}"; then as_fn_error $? "conditional \"WITH_OPENGL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_FALCON_CPUASM_TRUE}" && test -z "${WANT_FALCON_CPUASM_FALSE}"; then as_fn_error $? "conditional \"WANT_FALCON_CPUASM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_XEP80_EMULATION_TRUE}" && test -z "${WANT_XEP80_EMULATION_FALSE}"; then as_fn_error $? "conditional \"WANT_XEP80_EMULATION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_NTSC_FILTER_TRUE}" && test -z "${WANT_NTSC_FILTER_FALSE}"; then as_fn_error $? "conditional \"WANT_NTSC_FILTER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_PAL_BLENDING_TRUE}" && test -z "${WANT_PAL_BLENDING_FALSE}"; then as_fn_error $? "conditional \"WANT_PAL_BLENDING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WANT_R_IO_DEVICE_TRUE}" && test -z "${WANT_R_IO_DEVICE_FALSE}"; then as_fn_error $? "conditional \"WANT_R_IO_DEVICE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Atari800 $as_me 5.0.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Atari800 config.status 5.0.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "DOC/Makefile") CONFIG_FILES="$CONFIG_FILES DOC/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "src/android/jni/Android.mk") CONFIG_FILES="$CONFIG_FILES src/android/jni/Android.mk" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "-------------------------------------------------------" echo " CONFIGURATION RESULTS:" echo "-------------------------------------------------------" echo "Host OS...............................: $a8_host" echo "Target ...............................: $a8_target" echo if [ "$a8_target" = default ]; then echo "Interface for video...................: $with_video" case "$with_video" in *curses) echo "Using no bitmap graphics emulation?...: $WANT_CURSES_BASIC" ;; esac fi if [ "$a8_target" != "default" -o "$with_video" != no ]; then if [ "$WANT_CURSES_BASIC" != "yes" ]; then echo "Supported screenshot formats..........: $supported_image_formats" echo "Using cycle exact?....................: $WANT_NEW_CYCLE_EXACT" echo "Using the very slow computer support?.: $WANT_VERY_SLOW" fi echo "Using the crash menu?.................: $WANT_CRASH_MENU" fi echo "Using the paged attribute array?......: $WANT_PAGED_ATTRIB" echo "Using per opcode cycles update?.......: $WANT_CYCLES_PER_OPCODE" echo "Using the buffered log?...............: $WANT_BUFFERED_LOG" echo "Using Altirra BIOS ROM?...............: $WANT_EMUOS_ALTIRRA" echo "Using the monitor assembler?..........: $WANT_MONITOR_ASSEMBLER" echo "Using code breakpoints and history?...: $WANT_MONITOR_BREAK" echo "Using user-defined breakpoints?.......: $WANT_MONITOR_BREAKPOINTS" echo "Using monitor hints?..................: $WANT_MONITOR_HINTS" echo "Using 6502 opcode profiling?..........: $WANT_MONITOR_PROFILE" echo "Using TRACE monitor command?..........: $WANT_MONITOR_TRACE" echo "Using readline support in monitor?....: $with_readline" echo "Using UTF-8 support in monitor?.......: $WANT_MONITOR_UTF8" echo "Using ANSI color support in monitor?..: $WANT_MONITOR_ANSI" echo "Using event recording?................: $WANT_EVENT_RECORDING" echo "Using MIO emulation?..................: $WANT_PBI_MIO" echo "Using Black Box emulation?............: $WANT_PBI_BB" echo "Using IDE emulation?..................: $WANT_IDE" echo "Using Pokey registers recording?......: $WANT_POKEYREC" echo "Interface for sound...................: $with_sound" if [ "$with_sound" != no ]; then echo " Using nonlinear mixing?...........: $WANT_NONLINEAR_MIXING" echo " Using synchronized sound?.........: $WANT_SYNCHRONIZED_SOUND" echo " Using sound interpolation?........: $WANT_INTERPOLATE_SOUND" echo " Using stereo sound?...............: $WANT_STEREO_SOUND" echo " Using volume only sound?..........: $WANT_VOL_ONLY_SOUND" if [ "$WANT_VOL_ONLY_SOUND" = "yes" ]; then echo " Using console sound?..........: $WANT_CONSOLE_SOUND" echo " Using serial I/O sound?.......: $WANT_SERIO_SOUND" else echo " (Volume only sound sub-options disabled)" fi echo " Using 1400XL/1450XLD emulation?...: $WANT_PBI_XLD" echo " Using sound clipping?.............: $WANT_CLIP_SOUND" echo " Supported audio codecs............: $supported_audio_codecs" if [ "$with_mp3" != "no" ]; then echo " Library for mp3 audio.........: $with_mp3" fi else echo " (Sound sub-options disabled)" fi echo "Using video recording?................: $WANT_VIDEO_RECORDING" if [ "$WANT_VIDEO_RECORDING" = "yes" ]; then echo " Supported video codecs............: $supported_video_codecs" fi if [ "$a8_host" = "falcon" ]; then echo "Using M68K assembler CPU core?........: $WANT_FALCON_CPUASM" fi if [ "$a8_host" = "linux" ]; then case "$a8_target" in x11*) echo "Using Linux joystick?.................: $WANT_LINUX_JOYSTICK" esac fi if [ "$a8_target" = "windx" ]; then echo "Using cursor/ctrl keys?...............: $WANT_USE_CURSORBLOCK" fi if [ "$SUPPORTS_RDEVICE" = "yes" ]; then echo "Using R: device?......................: $WANT_R_IO_DEVICE" if [ "$a8_host" != "win" -a "$a8_host" != "macos" -a "$WANT_R_IO_DEVICE" = "yes" ]; then echo " Using R: with the host serial port?...: $WANT_R_SERIAL" echo " Using R: with IP network support......: $WANT_R_NETWORK" fi fi if [ "$a8_target" = default -a "$with_video" = sdl ]; then echo "Using on-screen keyboard?.............: $WANT_USE_UI_BASIC_ONSCREEN_KEYBOARD" echo "Using OpenGL?.........................: $with_opengl" fi echo echo "Main build variables:" echo " CC......: \"$CC\"" echo " ASFLAGS.: \"$CCASFLAGS\"" echo " CFLAGS..: \"$CFLAGS\"" echo " CPPFLAGS: \"$CPPFLAGS\"" echo " LDFLAGS.: \"$LDFLAGS\"" echo " LIBS....: \"$LIBS\"" echo "-------------------------------------------------------" if [ "$WANT_VERY_SLOW" = "yes" ]; then echo echo "IMPORTANT: --enable-veryslow provides a bit better performance" echo "only when the compiled atari800 is run with the -refresh option." if [ "$WANT_FALCON_CPUASM" != "yes" ]; then if [ "$WANT_MONITOR_BREAK" = "yes" ]; then echo "It is better to use --disable-monitorbreak." fi if [ "$with_sound" != "no" ]; then echo "Try --without-sound, too." fi if [ "$WANT_PAGED_ATTRIB" != "yes" ]; then echo "Have you tried --enable-pagedattrib ?" fi if [ "$WANT_CYCLES_PER_OPCODE" != "yes" ]; then echo "Have you tried --enable-cyclesperopcode ?" fi fi fi echo echo "Now run \"gmake\" or \"make\"." echo atari800-5.0.0/configure.ac000066400000000000000000001647501425067567700153720ustar00rootroot00000000000000dnl configure.ac - Autoconf script for building configure dnl dnl Copyright (C) 2001 Krzysztof Nikiel dnl Copyright (C) 2001-2014 Atari800 development team (see DOC/CREDITS) dnl dnl This file is part of the Atari800 emulator project which emulates dnl the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. dnl dnl Atari800 is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl Atari800 is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with Atari800; if not, write to the Free Software dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA AC_PREREQ(2.57) AC_INIT(Atari800, 5.0.0, pstehlik@sophics.cz) AC_CONFIG_SRCDIR(src/atari.c) AC_CONFIG_HEADER(src/config.h) AC_CONFIG_MACRO_DIR([m4]) dnl Set a8_target... case "$target" in default | falcon | firebee | ps2 | rpi | android | windx | x11 | x11-shm | x11-motif | x11-xview | x11-xview-shm | libatari800) a8_target="$target" ;; shm | motif | xview | xview-shm) a8_target="x11-$target" ;; "") a8_target=default ;; *) echo echo "Usage: configure [--target=] " echo echo "The '--target' option, if not given, defaults to 'default'. Use '--help'" echo "to see other available options, including Atari800 specific '--enable' options." echo "Possible values for the '--target' option are:" echo " default (autodetect available graphics and sound libraries)" echo " android (Android devices)" echo " falcon (Atari Falcon: set --host=m68k-atari-mint)" echo " firebee (FireBee: set --host=m68k-atari-mint)" echo " ps2 (Sony PlayStation 2)" echo " rpi (Raspberry Pi: set --host=arm-linux)" echo " windx (Windows with DirectX only)" echo " libatari800 (Atari800 as a library (developers only))" echo " x11 (Standard X11)" echo " (x11-)motif (Motif on X11)" echo " (x11-)shm (Standard X11 with shared memory extensions)" echo " (x11-)xview (XView on X11)" echo " (x11-)xview-shm (XView on X11, with shared memory extensions)" echo exit 1; ;; esac AC_CANONICAL_HOST AM_INIT_AUTOMAKE AM_MAINTAINER_MODE([enable]) dnl Silent rules # Support silent build rules, requires at least automake-1.11. Disable # by either passing --disable-silent-rules to configure or passing V=1 # to make m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) WANT_IDE="yes" WANT_POKEYREC="yes" dnl Set a8_host... if [[ "$host_os" = "cygwin" ]]; then CC="gcc -mno-cygwin" echo echo "Using CC=\"$CC\" to disable cygwin library..."; echo host_os="mingw32" fi case $host_os in i386-pc-os2-emx) a8_host="os/2" ;; mingw32*) a8_host="win" if [[ "$a8_target" != "android" ]]; then dnl Android target uses normal slashes AC_DEFINE(DIR_SEP_BACKSLASH,1,[Define to use back slash as directory separator.]) fi AC_DEFINE(DOS_DRIVES,1,[Define to enable DOS style drives support.]) ;; msdosdjgpp) a8_host="dos" AC_DEFINE(DIR_SEP_BACKSLASH,1,[Define to use back slash as directory separator.]) AC_DEFINE(DEFAULT_CFG_NAME,"atari800.cfg",[Alternate config filename due to 8+3 fs limit.]) AC_DEFINE(DOS_DRIVES,1,[Define to enable DOS style drives support.]) AC_DEFINE(SYSTEM_WIDE_CFG_FILE,"c:\\atari800.cfg",[Alternate system-wide config file for non-Unix OS.]) ;; linux | linux-gnu) a8_host="linux" ;; darwin*) a8_host="macos" ;; mint) if [[ "$a8_target" = "firebee" ]]; then a8_host=firebee a8_target=default else a8_host=falcon fi AC_DEFINE(DIR_SEP_BACKSLASH,1,[Define to use back slash as directory separator.]) AC_DEFINE(DEFAULT_CFG_NAME,"atari800.cfg",[Alternate config filename due to 8+3 fs limit.]) AC_DEFINE(DOS_DRIVES,1,[Define to enable DOS style drives support.]) AC_DEFINE(SYSTEM_WIDE_CFG_FILE,"c:\\atari800.cfg",[Alternate system-wide config file for non-Unix OS.]) AC_DEFINE(BITPL_SCR,1,[Define to allocate the screen back buffer.]) WANT_IDE="no" ;; beos) a8_host="beos" ;; *unix*) a8_host="unix" ;; *) a8_host="$host_os" ;; esac dnl Set CFLAGS and LDFLAGS... if [[ "X_$CFLAGS" = "X_" ]]; then CFLAGS="-O2 -Wall" fi if [[ "X_$LDFLAGS" = "X_" ]]; then LDFLAGS="" fi if [[ "$a8_target" = "ps2" ]]; then CC="ee-gcc" CFLAGS="$CFLAGS -D_EE -G0 -mno-crt0 -fno-builtin-printf -nostartfiles" CFLAGS="$CFLAGS -I${PS2SDK}/common/include -I${PS2SDK}/ee/include" CFLAGS="$CFLAGS -I${GSKIT}/ee/dma/include -I${GSKIT}/ee/gs/include" CFLAGS="$CFLAGS -I${PS2DEV}/ee/lib/gcc-lib/ee/3.2.2/include" CFLAGS="$CFLAGS -I${PS2SDK}/ports/include" LDFLAGS="$LDFLAGS -T${PS2SDK}/ee/startup/linkfile" LDFLAGS="$LDFLAGS -L${PS2SDK}/ee/lib -L${GSKITSRC}/lib -L${PS2DEV}/ee/lib/gcc-lib/ee/3.2.2" LDFLAGS="$LDFLAGS -L${PS2SDK}/ports/lib" fi if [[ "$a8_target" = "rpi" ]]; then [[ -z "$RPI_SDK" ]] && RPI_SDK="/opt/vc" CC="arm-linux-gnueabihf-gcc" CFLAGS="$CFLAGS -I${RPI_SDK}/include -I${RPI_SDK}/include/SDL -I${RPI_SDK}/include/interface/vmcs_host/linux -I${RPI_SDK}/include/interface/vcos/pthreads" LDFLAGS="$LDFLAGS -Wl,--unresolved-symbols=ignore-in-shared-libs -L${RPI_SDK}/lib" fi if [[ "$a8_target" = "android" ]]; then CC="arm-linux-androideabi-gcc" CPP="arm-linux-androideabi-cpp" AC_NO_EXECUTABLES CPPFLAGS="$CPPFLAGS -I$ANDROID_NDK_ROOT/platforms/android-9/arch-arm/usr/include/" WANT_IDE=no with_readline=no WANT_EVENT_RECORDING=no AC_DEFINE(HAVE_GETTIMEOFDAY,1) # Take care of the ndk-build script name difference on Windows version of Android NDK. if [[ "$build_os" = "cygwin" -o "$build_os" = "mingw32" ]]; then NDK_BUILD=ndk-build.cmd else NDK_BUILD=ndk-build fi AC_SUBST(NDK_BUILD) fi if [[ "$a8_host" = "falcon" ]]; then CFLAGS="-m68020-60 -O2 -fomit-frame-pointer -Wall" LDFLAGS="-m68020-60" fi if [[ "$a8_host" = "firebee" ]]; then CFLAGS="-mcpu=5475 -O2 -fomit-frame-pointer -Wall" LDFLAGS="-mcpu=5475" fi if [[ "$a8_target" = "libatari800" ]]; then with_readline=no WANT_EVENT_RECORDING=no fi dnl Check for programs... AC_PROG_CC AC_PROG_CC_C_O AC_PROG_INSTALL AC_PROG_RANLIB AC_CHECK_TOOLS(WINDRES, [windres], :) dnl The A8_ADD_INCLUDE_PATH macro searches for include files in subdirectories of dnl a list of paths plus standard include paths. E.g. /usr/include/PACKAGE/package.h dnl is not found automatically because only /usr/include is searched, not dnl /usr/include/PACKAGE. This function takes standard include paths plus any dnl additional include paths in argument $3 and for each path there, looks in dnl any existing subdirs specified in argument $4. If found, the subdir is added dnl to the $CPPFLAGS variable. If not found in any path combination, the code in dnl $5 is executed. dnl $1 = the name of the feature for informational messages dnl $2 = header file to use as test for presense dnl $3 = the list of possible include directory paths to use as prefixes dnl to the combined path dnl $4 = the list of possible include subdirectories dnl $5 = code to execute if include not found AC_DEFUN([A8_ADD_INCLUDE_PATH], [ AC_CHECK_HEADER([$2],[],[ _a8_saved_cppflags=$CPPFLAGS _a8_found=no for _a8_dir in ${prefix}/include $3; do for _a8_subdir in $4; do _a8_fulldir="$_a8_dir/$_a8_subdir" test ! -d "$_a8_fulldir" && continue AC_MSG_CHECKING([for $1 headers in]) AC_MSG_RESULT([$_a8_fulldir]) AS_UNSET([AS_TR_SH([ac_cv_header_$2])]) CPPFLAGS="$_a8_saved_cppflags -I$_a8_fulldir" AC_CHECK_HEADER([$2],[_a8_found="yes"; break],[]) done if [[ "$_a8_found" = "yes" ]]; then break fi done if [[ "$_a8_found" != "yes" ]]; then CPPFLAGS=$_a8_saved_cppflags $5 fi AS_UNSET(_a8_found) AS_UNSET(_a8_dir) AS_UNSET(_a8_subdir) AS_UNSET(_a8_fulldir) AS_UNSET(_a8_saved_cppflags) ]) ]) AC_DEFUN([AM_PROG_AS], []) dnl dummy to make automake happy, since vasm is used instead CCAS=vasm CCASFLAGS="-quiet -devpac -opt-allbra -Faout" a8_use_sdl=no dnl Check if SDL library exists. If it's found, set a8_use_sdl to yes and AC_DEFINE the SDL symbol. dnl If called multiple times, it will check for the library only once. dnl Usage: TRY_USE_SDL() AC_DEFUN([TRY_USE_SDL], [ if [[ "$a8_use_sdl" = no ]]; then dnl Check for SDL SDL_VERSION=1.2.0 AM_PATH_SDL($SDL_VERSION, [ AC_DEFINE(SDL,1,[Target: SDL library.]) AC_DEFINE(SUPPORTS_PLATFORM_TIME,1,[Platform-specific time function.]) LIBS="$LIBS $SDL_LIBS" CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" if [[ "$a8_host" = "win" ]]; then dnl Defer redefinition of main - do it later, in src/Makefile.am. Otherwise dnl the autoconf tests would not work. CPPFLAGS=${CPPFLAGS/-Dmain=SDL_main/} dnl Avoid making stdout.txt on Windows sdl target by discarding libSDLmain and dnl compiling our own src/sdl/SDL_win32_main.c (copied from libSDL dources), dnl with the NO_STDIO_REDIRECT macro defined. LIBS=${LIBS/-lSDLmain/} CPPFLAGS="$CPPFLAGS -DNO_STDIO_REDIRECT" dnl Don't make this a windowed app, make it a console app. LIBS=${LIBS/-mwindows/} fi a8_use_sdl=yes ]) fi ]) dnl Check if host os Java NestedVM... if [[ "$a8_target" != "android" ]]; then dnl Android target cannot perform link tests AC_MSG_CHECKING([whether host is Java NestedVM]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern int _call_java(int a, int b, int c, int d);]], [[_call_java(0, 0, 0, 0);]] )], [ a8_host=javanvm EXEEXT=".mips" enable_unalignedwords=no if [[ "$build_os" = "cygwin" ]]; then JAVAFLAGS="-classpath '""`cygpath -wp $CLASSPATH`'" JAVACFLAGS="-source 1.4 -classpath '""`cygpath -wp $CLASSPATH`'" fi AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) ] ) fi dnl Check for header files... dnl Beware: AC_PATH_X must NOT be inside "case"! if [[ "$a8_target" != "android" ]]; then AC_PATH_X fi case "$a8_target" in x11*) if [[ "X_$x_includes" != "X_" ]]; then CFLAGS="$CFLAGS -I$x_includes" fi if [[ "X_$x_libraries" != "X_" ]]; then LDFLAGS="$LDFLAGS -L$x_libraries -Wl,-rpath,$x_libraries" fi ;; esac if [[ "$a8_target" = "android" ]]; then echo "hardcoding dirent.h header" AC_DEFINE(HAVE_DIRENT_H) else AC_HEADER_DIRENT fi AC_HEADER_STDC AC_HEADER_TIME AC_TYPE_UINTPTR_T AC_CHECK_HEADERS([direct.h errno.h file.h signal.h sys/time.h time.h unistd.h unixio.h]) AC_HEADER_TIOCGWINSZ SUPPORTS_SOUND_OSS=yes AC_CHECK_HEADERS([fcntl.h sys/ioctl.h sys/soundcard.h],,SUPPORTS_SOUND_OSS=no) SUPPORTS_RDEVICE=yes if [[ "$a8_host" = "win" ]]; then AC_CHECK_HEADERS([windows.h winsock2.h],,SUPPORTS_RDEVICE=no) else AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h sys/socket.h termios.h],,SUPPORTS_RDEVICE=no) fi dnl Check for libraries... AC_DEFUN([A8_NEED_LIB],AC_CHECK_LIB($1,main,,AC_MSG_ERROR("$1 library not found!"))) if [[ "$a8_target" = "android" ]]; then echo "hardcoding libz" LIBS="-lz $LIBS" AC_DEFINE(HAVE_LIBZ) dnl libm is automatically appended by the build system elif [[ "$a8_target" = "libatari800" ]]; then AC_CHECK_LIB(m,cos,[LIBS="-lm $LIBS"]) AC_CHECK_FUNCS(setjmp) else AC_CHECK_LIB(z,gzopen) dnl Need SUPPORTS_LIBPNG shell variable for PNG video codec test below AC_CHECK_LIB(png,png_get_libpng_ver,[LIBS="-lpng $LIBS"; SUPPORTS_LIBPNG=yes],[SUPPORTS_LIBPNG=no]) if [[ "$SUPPORTS_LIBPNG" = "yes" ]]; then AC_DEFINE(HAVE_LIBPNG,1,[Supports PNG image compression library.]) fi AC_CHECK_LIB(m,cos,[LIBS="-lm $LIBS"]) AC_CHECK_LIB(ossaudio,_oss_ioctl,[LIBS="-lossaudio $LIBS"]) fi AM_CONDITIONAL([WITH_LIBPNG], test "$SUPPORTS_LIBPNG" = "yes") dnl Set OBJS and libraries depending on host and target... case "$a8_target" in default) if [[ "$a8_host" != "dos" ]]; then dnl In DJGPP building with zlib fails with -ansi. CFLAGS="$CFLAGS -ansi" fi CFLAGS="$CFLAGS -pedantic -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Winline" if [[ "$a8_host" != "beos" ]]; then dnl BeOS has a real issue with redundant-decls CFLAGS="$CFLAGS -Wredundant-decls" fi ;; falcon) AC_DEFINE(SUPPORTS_PLATFORM_SLEEP,1,[Platform-specific sleep function.]) AC_DEFINE(SUPPORTS_PLATFORM_TIME,1,[Platform-specific time function.]) AC_DEFINE(FALCON,1,[Target: Atari Falcon system.]) AC_CHECK_LIB(gem, appl_init) ;; ps2) AC_DEFINE(PS2,1,[Target: Sony PlayStation 2.]) AC_DEFINE(SUPPORTS_PLATFORM_SLEEP,1,[Platform-specific sleep function.]) AC_DEFINE(SUPPORTS_PLATFORM_TIME,1,[Platform-specific time function.]) AC_DEFINE(DEFAULT_CFG_NAME,"mc0:/ATARI/ATARI800.CFG",[Alternate config filename due to 8+3 fs limit.]) A8_NEED_LIB(kernel) A8_NEED_LIB(audsrv) A8_NEED_LIB(debug) A8_NEED_LIB(syscall) A8_NEED_LIB(dmakit) A8_NEED_LIB(gskit) A8_NEED_LIB(pad) A8_NEED_LIB(kbd) A8_NEED_LIB(mc) A8_NEED_LIB(g) A8_NEED_LIB(z) A8_NEED_LIB(c) ;; rpi) AC_DEFINE(RPI,1,[Target: Raspberry Pi.]) AC_DEFINE(GUI_SDL,1,[Use SDL for graphics and input.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGURE,1,[Additional config file options.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGSAVE,1,[Save additional config file options.]) AC_DEFINE(SUPPORTS_PLATFORM_PALETTEUPDATE,1,[Update the Palette if it changed.]) AC_DEFINE(PLATFORM_MAP_PALETTE,1,[Platform-specific mapping of RGB palette to display surface.]) A8_NEED_LIB(brcmGLESv2) A8_NEED_LIB(brcmEGL) A8_NEED_LIB(SDL) A8_NEED_LIB(bcm_host) ;; android) AC_DEFINE(ANDROID,1,[Target: Android]) AC_DEFINE(SUPPORTS_PLATFORM_PALETTEUPDATE,1,[Update the Palette if it changed.]) AC_DEFINE(DIRTYRECT,1,[Define to use dirty screen partial repaints.]) dnl AC_DEFINE(NODIRTYCOMPARE,1,[Define to skip memory comparisons - Requires DIRTYRECT.]) ;; windx) AC_DEFINE(DIRECTX,1,[Target: Windows with DirectX.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGURE,1,[Additional config file options.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGSAVE,1,[Save additional config file options.]) AC_DEFINE(SUPPORTS_PLATFORM_PALETTEUPDATE,1,[Update the Palette if it changed.]) AC_DEFINE(SUPPORTS_SOUND_REINIT,1,[Reinitialise the sound system.]) A8_NEED_LIB(ddraw) A8_NEED_LIB(dinput) A8_NEED_LIB(dsound) A8_NEED_LIB(dxguid) A8_NEED_LIB(d3d9) A8_NEED_LIB(gdiplus) A8_NEED_LIB(stdc++) A8_NEED_LIB(ws2_32) A8_NEED_LIB(gdi32) CFLAGS="$CFLAGS -ansi -pedantic -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls -Wstrict-prototypes -Winline" LDFLAGS="$LDFLAGS -mwindows" ;; libatari800) AC_DEFINE(LIBATARI800,1,[Target: Atari800 as a library.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGURE,1,[Additional config file options.]) ;; x11*) AC_DEFINE(X11,1,[Target: Standard X11.]) AC_DEFINE(SUPPORTS_PLATFORM_PALETTEUPDATE,1,[Update the Palette if it changed.]) A8_NEED_LIB(X11) case "$a8_target" in *-shm) AC_DEFINE(SHM,1,[Target: X11 with shared memory extensions.]) A8_NEED_LIB(Xext) ;; esac case "$a8_target" in x11-xview*) AC_DEFINE(XVIEW,1,[Target: X11 with XView.]) dnl Dunno if this is the right way... CFLAGS="$CFLAGS -I/usr/openwin/include" dnl -lxview must come before -lolgx, otherwise it does not link. dnl Note that AC_CHECK_LIB (and therefore A8_NEED_LIB) _prepends_ dnl the found library to LIBS. A8_NEED_LIB(olgx) A8_NEED_LIB(xview) ;; x11-motif) AC_DEFINE(MOTIF,1,[Target: X11 with Motif.]) dnl According to the information I was able to find, dnl "-lgen -lsocket" is necessary only with old Sun Motif libs. AC_CHECK_LIB(socket,main,[LIBS="-lsocket $LIBS"]) AC_CHECK_LIB(gen,main,[LIBS="-lgen $LIBS"]) dnl -lXm must come before -lXt, otherwise I get the following dnl fatal error at runtime, when calling XtVaCreateManagedWidget: dnl X Error of failed request: BadWindow (invalid Window parameter) dnl See MOTIF FAQ "What order should the libraries be linked in?" dnl Note that AC_CHECK_LIB (and therefore A8_NEED_LIB) _prepends_ dnl the found library to LIBS. A8_NEED_LIB(Xt) A8_NEED_LIB(Xm) ;; esac WANT_X11=yes ;; esac AM_CONDITIONAL([CONFIGURE_HOST_JAVANVM], test "$a8_host" = javanvm) AM_CONDITIONAL([CONFIGURE_HOST_DOS], test "$a8_host" = dos) AM_CONDITIONAL([CONFIGURE_HOST_WIN], test "$a8_host" = win) AM_CONDITIONAL([CONFIGURE_TARGET_ANDROID], test "$a8_target" = android) AM_CONDITIONAL([CONFIGURE_TARGET_FALCON], test "$a8_target" = falcon) AM_CONDITIONAL([CONFIGURE_TARGET_PS2], test "$a8_target" = ps2) AM_CONDITIONAL([CONFIGURE_TARGET_RPI], test "$a8_target" = rpi) AM_CONDITIONAL([CONFIGURE_TARGET_WINDX], test "$a8_target" = windx) AM_CONDITIONAL([CONFIGURE_TARGET_LIBATARI800], test "$a8_target" = libatari800) AM_CONDITIONAL([CONFIGURE_TARGET_X11], test "$WANT_X11" = yes) dnl Check for typedefs, structures, and compiler characteristics... AC_C_BIGENDIAN AC_C_CONST AC_C_INLINE AC_C_VOLATILE AC_PROG_GCC_TRADITIONAL AC_STRUCT_TM AC_TYPE_SIGNAL AC_TYPE_SIZE_T dnl Set usage of unaligned word accesses... AC_ARG_ENABLE(unalignedwords,AC_HELP_STRING(--enable-unalignedwords,[Override usage of unaligned words])) if [[ "$enable_unalignedwords" != "yes" -a "$enable_unalignedwords" != "no" ]]; then case $host_cpu in alpha* | arm* | hppa* | ia64 | mips* | sparc*) enable_unalignedwords=no ;; i*86 | m68* | powerpc* | x86_64) enable_unalignedwords=yes ;; *) AC_MSG_WARN([$host_cpu architecture is unknown to this script.]) AC_MSG_WARN([Performance may be sub-optimal. Please contact Atari800 developers.]) enable_unalignedwords=no ;; esac fi if [[ "$enable_unalignedwords" = "yes" ]]; then dnl Make sure it is allowed AC_MSG_CHECKING([for unaligned word access validity]) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include ]],[[ unsigned char test_data[] = "Hello, I test unaligned word access validity."; unsigned char *p; /* step through test_data as far as 4 bytes are available via p */ for (p = test_data; p[2] != '\0'; p++) { unsigned int word_read = *(unsigned short *) p; if (word_read != (p[0] + (p[1] << 8)) && word_read != (p[1] + (p[0] << 8))) { printf("16-bit access at address %p yields bad data!\n" "Bytes: %02X %02X; Value read: %04X\n", p, p[0], p[1], word_read); return 1; } word_read = *(unsigned int *) p; if (word_read != (p[0] + (p[1] << 8) + (p[2] << 16) + (p[3] << 24)) && word_read != (p[3] + (p[2] << 8) + (p[1] << 16) + (p[0] << 24))) { printf("32-bit access at address %p yields bad data!\n" "Bytes: %02X %02X %02X %02X; Value read: %08X\n", p, p[0], p[1], p[2], p[3], word_read); return 1; } } ]])], AC_MSG_RESULT([yes]), [enable_unalignedwords=no; AC_MSG_RESULT([failed! disabling unaligned word access])], AC_MSG_RESULT([skipped because cross-compiling]) ) if [[ "$enable_unalignedwords" = "yes" ]]; then AC_DEFINE(WORDS_UNALIGNED_OK,1,[Define if unaligned word access is ok.]) fi fi dnl Check for library functions... # from "Autoconf Archive": AC_DEFUN([AX_FUNC_MKDIR], [AC_CHECK_FUNCS([mkdir _mkdir]) AC_CACHE_CHECK([whether mkdir takes one argument], [ac_cv_mkdir_takes_one_arg], [AC_TRY_COMPILE([ #include #if HAVE_UNISTD_H # include #endif ], [mkdir (".");], [ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])]) if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1, [Define if mkdir takes only one argument.]) fi ]) AC_FUNC_CLOSEDIR_VOID AC_FUNC_MEMCMP AC_FUNC_SELECT_ARGTYPES AC_FUNC_STAT if [[ "$a8_target" = "android" ]]; then echo "hardcoding libc funcs" AC_DEFINE(HAVE_VPRINTF) AC_DEFINE(HAVE_ATEXIT) AC_DEFINE(HAVE_CHMOD) AC_DEFINE(HAVE_FDOPEN) AC_DEFINE(HAVE_FFLUSH) AC_DEFINE(HAVE_FLOOR) AC_DEFINE(HAVE_FSTAT) AC_DEFINE(HAVE_GETCWD) AC_DEFINE(HAVE_GETTIMEOFDAY) AC_DEFINE(HAVE_LOCALTIME) AC_DEFINE(HAVE_MEMMOVE) AC_DEFINE(HAVE_MEMSET) AC_DEFINE(HAVE_MKSTEMP) AC_DEFINE(HAVE_MKTEMP) AC_DEFINE(HAVE_MODF) AC_DEFINE(HAVE_NANOSLEEP) AC_DEFINE(HAVE_OPENDIR) AC_DEFINE(HAVE_RENAME) AC_DEFINE(HAVE_REWIND) AC_DEFINE(HAVE_RMDIR) AC_DEFINE(HAVE_SIGNAL) AC_DEFINE(HAVE_SNPRINTF) AC_DEFINE(HAVE_STAT) AC_DEFINE(HAVE_STRCASECMP) AC_DEFINE(HAVE_STRCHR) AC_DEFINE(HAVE_STRDUP) AC_DEFINE(HAVE_STRERROR) AC_DEFINE(HAVE_STRRCHR) AC_DEFINE(HAVE_STRSTR) AC_DEFINE(HAVE_STRTOL) AC_DEFINE(HAVE_SYSTEM) AC_DEFINE(HAVE_TIME) AC_DEFINE(HAVE_TMPNAM) AC_DEFINE(HAVE_UCLOCK) AC_DEFINE(HAVE_UNLINK) AC_DEFINE(HAVE_VSNPRINTF) AC_DEFINE(HAVE_MKDIR) AC_DEFINE(HAVE_SELECT) AC_DEFINE(HAVE_USLEEP) AC_DEFINE(HAVE_STRNCPY) dnl Leave out tmpfile to force creation of temp files to external else AC_FUNC_VPRINTF AC_CHECK_FUNCS([atexit chmod clock fdopen fflush floor fstat getcwd]) AC_CHECK_FUNCS([gettimeofday localtime memmove memset mkstemp mktemp]) AC_CHECK_FUNCS([modf nanosleep opendir rename rewind rmdir signal snprintf]) AC_CHECK_FUNCS([stat strcasecmp strchr strdup strerror strrchr strstr]) AC_CHECK_FUNCS([strtol system time tmpfile tmpnam uclock unlink vsnprintf popen]) AX_FUNC_MKDIR dnl select usleep strncpy are broken on the NestedVM host if test "x$a8_host" != xjavanvm ; then AC_CHECK_FUNCS([select usleep strncpy]) fi fi if [[ "$a8_host" != "win" -a "$a8_target" != "android" ]]; then AC_CHECK_FUNCS([gethostbyaddr gethostbyname inet_ntoa socket],,SUPPORTS_RDEVICE=no) fi dnl Select/detect video interface. AC_ARG_WITH([video], [AC_HELP_STRING([--with-video@<:@=no|yes|curses|ncurses|pdcurses|dosvga|sdl|javanvm@:>@],[Select video interface to use @<:@default=check@:>@])], [ case "$withval" in no | yes | check | curses | ncurses | pdcurses | dosvga | sdl | javanvm) ;; *) AC_MSG_ERROR([unrecognized value for --with-video: "$withval"]) ;; esac ], [with_video=check]) if [[ "$a8_target" = default ]]; then if [[ "$with_video" != no ]]; then if [[ "$with_video" = check -o "$with_video" = yes -o "$with_video" = javanvm ]]; then if [[ "$a8_host" = javanvm ]]; then with_video=javanvm elif [[ "$with_video" = javanvm ]]; then AC_MSG_ERROR([--with-video=javanvm was given, but host system is not NestedVM!]) fi fi if [[ "$with_video" = check -o "$with_video" = yes -o "$with_video" = dosvga ]]; then if [[ "$a8_host" = dos ]]; then with_video=dosvga elif [[ "$with_video" = dosvga ]]; then AC_MSG_ERROR([--with-video=dosvga was given, but host system is not DOS!]) fi fi if [[ "$with_video" = check -o "$with_video" = yes -o "$with_video" = sdl ]]; then TRY_USE_SDL() if [[ "$a8_use_sdl" = yes ]]; then with_video=sdl elif [[ "$with_video" = sdl ]]; then AC_MSG_FAILURE([--with-video=sdl was given, but SDL library not found!]) fi fi if [[ "$with_video" = check -o "$with_video" = yes -o "$with_video" = curses ]]; then AC_CHECK_LIB([curses], [initscr], [LIBS="-lcurses $LIBS" with_video=curses ], [if [[ "$with_video" = curses ]]; then AC_MSG_FAILURE([--with-video=curses was given, but curses library not found!]) fi ]) fi if [[ "$with_video" = check -o "$with_video" = yes -o "$with_video" = ncurses ]]; then AC_CHECK_LIB([ncurses], [initscr], [LIBS="-lncurses $LIBS" with_video=ncurses AC_DEFINE(USE_NCURSES,1,[Target: Ncurses library.]) ], [if [[ "$with_video" = ncurses ]]; then AC_MSG_FAILURE([--with-video=ncurses was given, but ncurses library not found!]) fi ]) fi if [[ "$with_video" = check -o "$with_video" = yes -o "$with_video" = pdcurses ]]; then AC_CHECK_LIB([pdcurses], [initscr], [LIBS="-lpdcurses $LIBS" with_video=pdcurses ], [if [[ "$with_video" = pdcurses ]]; then AC_MSG_FAILURE([--with-video=pdcurses was given, but pdcurses library not found!]) fi ]) fi fi if [[ "$with_video" = check ]]; then with_video=no fi case "$with_video" in javanvm) AC_DEFINE(SUPPORTS_PLATFORM_PALETTEUPDATE,1,[Update the Palette if it changed.]) AC_DEFINE(SUPPORTS_PLATFORM_SLEEP,1,[Platform-specific sleep function.]) ;; sdl) AC_DEFINE(GUI_SDL,1,[Use SDL for graphics and input.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGURE,1,[Additional config file options.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGSAVE,1,[Save additional config file options.]) AC_DEFINE(SUPPORTS_PLATFORM_PALETTEUPDATE,1,[Update the Palette if it changed.]) AC_DEFINE(SUPPORTS_CHANGE_VIDEOMODE,1,[Can change video modes on the fly.]) AC_DEFINE(SUPPORTS_ROTATE_VIDEOMODE,1,[Can display the screen rotated sideways.]) AC_DEFINE(PLATFORM_MAP_PALETTE,1,[Platform-specific mapping of RGB palette to display surface.]) WANT_XEP80_EMULATION=yes WANT_NTSC_FILTER=yes WANT_PAL_BLENDING=yes AC_DEFINE(PBI_PROTO80,1,[A prototype 80 column card for the 1090 expansion box.]) AC_DEFINE(AF80,1,[The Austin Franklin 80 column card.]) AC_DEFINE(BIT3,1,[The Bit3 Full View 80 column card.]) ;; dosvga) AC_DEFINE(DOSVGA,1,[Target: DOS VGA.]) AC_DEFINE(SUPPORTS_PLATFORM_CONFIGURE,1,[Additional config file options.]) AC_DEFINE(SUPPORTS_PLATFORM_PALETTEUPDATE,1,[Update the Palette if it changed.]) ;; curses | ncurses | pdcurses) AC_DEFINE(USE_CURSES,1,[Target: Curses-compatible library.]) WANT_EVENT_RECORDING=no ;; no) AC_DEFINE(BASIC,1,[Target: standard I/O.]) WANT_EVENT_RECORDING=no ;; *) AC_MSG_ERROR([--with-video=$with_video was given, but no video/input library found!]) ;; esac fi AM_CONDITIONAL(WITH_VIDEO_JAVANVM, test "$with_video" = javanvm) AM_CONDITIONAL(WITH_VIDEO_SDL, test "$with_video" = sdl) AM_CONDITIONAL(WITH_VIDEO_DOSVGA, test "$with_video" = dosvga) AM_CONDITIONAL(WITH_VIDEO_CURSES, test "$with_video" = curses -o "$with_video" = ncurses -o "$with_video" = pdcurses) AM_CONDITIONAL(WITH_VIDEO_LIBATARI800, test "$a8_target" = libatari800) AM_CONDITIONAL(WITH_VIDEO_NO, test "$with_video" = no) dnl Select optional Atari800 features... dnl The A8_OPTION macro automates the calling of AC_ARG_ENABLE, AC_HELP_STRING and AC_DEFINE. dnl $1 = the name of the feature, what follows "--enable-". dnl $2 = "yes" or "no", determines if feature defaults to being active or not. dnl $3 = The right side of the help line. dnl The left side is always "--enable-$1". dnl $4 = The symbol name which goes to config.h, the C #define symbol. dnl A symbol called "WANT_$4" is defined for use in this configure.ac. dnl $5 = The help string which shows up in config.h for the $4 symbol. AC_DEFUN([A8_OPTION],[ AC_ARG_ENABLE($1,AC_HELP_STRING(--enable-$1,$3),WANT_$4=$enableval,WANT_$4=$2) if [[ "$WANT_$4" = "yes" ]]; then AC_DEFINE($4,1,$5) fi ]) if [[ "$a8_target" = "libatari800" ]]; then WANT_NEW_CYCLE_EXACT=yes WANT_VERY_SLOW=no WANT_CRASH_MENU=no WANT_CURSES_BASIC=no elif [[ "$a8_target" != "default" -o "$with_video" != no ]]; then case "$with_video" in *curses) A8_OPTION(cursesbasic,yes, [No bitmap graphics emulation (curses targets only) (default=ON)], CURSES_BASIC,[Define to disable bitmap graphics emulation in CURSES target.] ) ;; esac if [[ "$WANT_CURSES_BASIC" != "yes" ]]; then A8_OPTION(newcycleexact,yes, [Allow color changes inside a scanline (default=ON)], NEW_CYCLE_EXACT,[Define to allow color changes inside a scanline.] ) if [[ "$WANT_NEW_CYCLE_EXACT" = "yes" ]]; then CCASFLAGS="$CCASFLAGS -DNEW_CYCLE_EXACT" fi A8_OPTION(veryslow,no, [Use very slow computer support (use with the -refresh option) (default=OFF)], VERY_SLOW,[Define to use very slow computer support (faster -refresh).] ) fi A8_OPTION(crashmenu,yes, [Display a menu after a CIM instruction (default=ON)], CRASH_MENU,[Define to activate crash menu after CIM instruction.] ) if [[ "$WANT_CRASH_MENU" = "yes" ]]; then CCASFLAGS="$CCASFLAGS -DCRASH_MENU" fi fi AM_CONDITIONAL([WANT_CURSES_BASIC], test "$WANT_CURSES_BASIC" = "yes") AM_CONDITIONAL([WANT_NEW_CYCLE_EXACT], test "$WANT_NEW_CYCLE_EXACT" = "yes") A8_OPTION(pagedattrib,no, [Use page-based attribute array (default=OFF)], PAGED_ATTRIB,[Define to use page-based attribute array.] ) A8_OPTION(cyclesperopcode,no, [Update ANTIC counter in each opcode's emulation (default=OFF)], CYCLES_PER_OPCODE,[Define to update ANTIC counter in each opcode's emulation.] ) if [[ "$a8_target" = libatari800 ]]; then WANT_BUFFERED_LOG=yes AC_DEFINE(BUFFERED_LOG,1,[Define to use buffered debug output.]) else A8_OPTION(bufferedlog,no, [Use buffered debug output (until the graphics mode switches back to text mode) (default=OFF)], BUFFERED_LOG,[Define to use buffered debug output.] ) fi A8_OPTION(altirra_bios,yes, [Use Altirra OS to allow operation when real ROMs are not available (default=ON)], EMUOS_ALTIRRA,[Define to use Altirra emulated OS when real ROMs are not available.] ) AM_CONDITIONAL([WANT_EMUOS_ALTIRRA], test "$WANT_EMUOS_ALTIRRA" = "yes") if [[ "$a8_target" = libatari800 ]]; then WANT_MONITOR_ASSEMBLER=no WANT_MONITOR_BREAK=no WANT_MONITOR_BREAKPOINTS=no WANT_MONITOR_HINTS=no WANT_MONITOR_PROFILE=no WANT_MONITOR_TRACE=no WANT_MONITOR_ANSI=no WANT_MONITOR_UTF8=no else A8_OPTION(monitorasm,yes, [Provide an assembler in the monitor (default=ON)], MONITOR_ASSEMBLER,[Define to activate assembler in monitor.] ) A8_OPTION(monitorbreak,yes, [Support code breakpoints and execution history (slower emulation) (default=ON)], MONITOR_BREAK,[Define to activate code breakpoints and execution history.] ) if [[ "$WANT_MONITOR_BREAK" = "yes" ]]; then CCASFLAGS="$CCASFLAGS -DMONITOR_BREAK" fi A8_OPTION(monitorbreakpoints,no, [Support user-defined breakpoints (default=OFF)], MONITOR_BREAKPOINTS,[Define to activate user-defined breakpoints.] ) A8_OPTION(monitorhints,yes, [Provide hints in the disassembler (human-readable address labels) (default=ON)], MONITOR_HINTS,[Define to activate hints in disassembler.] ) A8_OPTION(monitorprofile,no, [6502 opcode profiling (default=OFF)], MONITOR_PROFILE,[Define to activate 6502 opcode profiling.] ) if [[ "$WANT_MONITOR_PROFILE" = "yes" ]]; then CCASFLAGS="$CCASFLAGS -DMONITOR_PROFILE" fi A8_OPTION(monitortrace,no, [Support TRACE command in the monitor (default=OFF)], MONITOR_TRACE,[Define to activate TRACE command in monitor.] ) A8_OPTION(monitoransi,yes, [Support ANSI terminal control (default=ON)], MONITOR_ANSI,[Define to use ANSI terminal control in the monitor.] ) A8_OPTION(monitorutf8,yes, [Support UTF-8 for printing ATASCII characters in the monitor (default=ON)], MONITOR_UTF8,[Define to use UTF-8 in the monitor.] ) fi if [[ "$WANT_EVENT_RECORDING" != "no" ]]; then dnl we already checked for libz and added it to LIBS AC_CHECK_LIB(z,adler32, [A8_OPTION(eventrecording,yes, [Support event recording (default=ON)], EVENT_RECORDING,[Define to enable event recording.] )], WANT_EVENT_RECORDING="no" ) fi A8_OPTION(pbi_mio,yes, [Emulate the MIO board (default=ON)], PBI_MIO,[Define to emulate the MIO board.] ) AM_CONDITIONAL([WANT_PBI_MIO], test "$WANT_PBI_MIO" = "yes") A8_OPTION(pbi_bb,yes, [Emulate the Black Box (default=ON)], PBI_BB,[Define to emulate the Black Box.] ) AM_CONDITIONAL([WANT_PBI_BB], test "$WANT_PBI_BB" = "yes") dnl Select/detect sound interface. AC_ARG_WITH([sound], [AC_HELP_STRING([--with-sound@<:@=no|yes|dossb|oss|falcon|win|sdl|javanvm@:>@],[Select sound interface to use @<:@default=check@:>@])], [ case "$withval" in no | yes | check | dossb | oss | falcon | win | sdl | javanvm) ;; *) AC_MSG_ERROR([unrecognized value for --with-sound: "$withval"]) ;; esac ], [with_sound=check]) if [[ "$a8_target" = libatari800 ]]; then if [[ "$with_sound" = check -o "$with_sound" = yes ]]; then with_sound=libatari800 WANT_SOUND_THIN_API=yes WANT_SOUND_CALLBACK=no WANT_CONSOLE_SOUND=yes WANT_SERIO_SOUND=yes WANT_VOL_ONLY_SOUND=no WANT_SYNCHRONIZED_SOUND=no dnl workaround for WANT_SYNCHRONIZED_SOUND being ignored by A8_OPTION macro enable_synchronized_sound=no else AC_MSG_ERROR([--with-audio option not needed to build libatari800!]) fi elif [[ "$a8_target" != "ps2" -a "$a8_target" != "android" ]]; then if [[ "$with_sound" != no ]]; then if [[ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = javanvm ]]; then if [[ "$a8_host" = javanvm ]]; then with_sound=javanvm elif [[ "$with_sound" = javanvm ]]; then AC_MSG_ERROR([--with-sound=javanvm was given, but host system is not NestedVM!]) fi fi if [[ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = win ]]; then AC_CHECK_LIB([winmm], [main], [LIBS="-lwinmm $LIBS" with_sound=win ], [if [[ "$with_sound" = win ]]; then AC_MSG_FAILURE([--with-sound=win was given, but WinMM library not found!]) fi ]) fi if [[ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = falcon ]]; then if [[ "$a8_host" = falcon -o "$a8_host" = firebee ]]; then with_sound=falcon elif [[ "$with_sound" = falcon ]]; then AC_MSG_ERROR([--with-sound=falcon was given, but host system is not Falcon!]) fi fi if [[ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = dossb ]]; then if [[ "$a8_host" = dos ]]; then with_sound=dossb elif [[ "$with_sound" = dossb ]]; then AC_MSG_ERROR([--with-sound=dossb was given, but host system is not DOS!]) fi fi if [[ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = sdl ]]; then TRY_USE_SDL() if [[ "$a8_use_sdl" = yes ]]; then with_sound=sdl elif [[ "$with_sound" = sdl ]]; then AC_MSG_FAILURE([--with-sound=sdl was given, but SDL library not found!]) fi fi if [[ "$with_sound" = check -o "$with_sound" = yes -o "$with_sound" = oss ]]; then if [[ "$SUPPORTS_SOUND_OSS" = yes ]]; then with_sound=oss elif [[ "$with_sound" = oss ]]; then AC_MSG_ERROR([--with-sound=oss was given, but OSS is not supported!]) fi fi fi if [[ "$with_sound" = check ]]; then with_sound=no fi case "$with_sound" in javanvm) WANT_SOUND_THIN_API=yes ;; sdl) WANT_SOUND_THIN_API=yes WANT_SOUND_CALLBACK=yes ;; win) AC_DEFINE(SUPPORTS_SOUND_REINIT,1,[Reinitialise the sound system.]) ;; falcon) AC_DEFINE(POKEYSND_SIGNED_SAMPLES,1,[Use 8-bit signed samples.]) WANT_SOUND_THIN_API=yes ;; oss) WANT_SOUND_THIN_API=yes ;; dossb) WANT_SOUND_THIN_API=yes WANT_SOUND_CALLBACK=yes ;; no) ;; *) AC_MSG_ERROR([--with-sound=$with_sound was given, but no sound library found!]) ;; esac fi AM_CONDITIONAL([WITH_SOUND], test "$with_sound" != no) AM_CONDITIONAL([WITH_SOUND_JAVANVM], test "$with_sound" = javanvm) AM_CONDITIONAL([WITH_SOUND_FALCON], test "$with_sound" = falcon) AM_CONDITIONAL([WITH_SOUND_OSS], test "$with_sound" = oss) AM_CONDITIONAL([WITH_SOUND_SDL], test "$with_sound" = sdl) AM_CONDITIONAL([WITH_SOUND_WIN], test "$with_sound" = win) AM_CONDITIONAL([WITH_SOUND_DOSSB], test "$with_sound" = dossb) AM_CONDITIONAL([WITH_SOUND_LIBATARI800], test "$with_sound" = libatari800) AM_CONDITIONAL([A8_USE_SDL], test "$a8_use_sdl" = yes) dnl Set sound support options... if [[ "$with_sound" != no ]]; then AC_DEFINE(SOUND, 1, [Define to activate sound support.]) if [[ "$WANT_SOUND_THIN_API" = "yes" ]]; then AC_DEFINE(SOUND_THIN_API,1,[Use new sound API.]) A8_OPTION(synchronized_sound,yes, [Use synchronized sound (default=ON)], SYNCHRONIZED_SOUND,[Define to use synchronized sound.] ) if [[ "$WANT_SOUND_CALLBACK" = "yes" ]]; then AC_DEFINE(SOUND_CALLBACK,1,[Platform updates sound buffer by callback function.]) fi else WANT_SYNCHRONIZED_SOUND="no" fi A8_OPTION(nonlinear_mixing,yes, [Use nonlinear POKEY mixing (default=ON)], NONLINEAR_MIXING,[Define to use nonlinear POKEY mixing.] ) A8_OPTION(interpolatesound,yes, [Use sound interpolation (default=ON)], INTERPOLATE_SOUND,[Define to allow sound interpolation.] ) A8_OPTION(stereosound,yes, [Use stereo sound (default=ON)], STEREO_SOUND,[Define to allow stereo sound.] ) if [[ "$WANT_SYNCHRONIZED_SOUND" != "yes" ]]; then A8_OPTION(volonlysound,yes, [Use volume only sound (digitized sound effects) (default=ON)], VOL_ONLY_SOUND,[Define to allow volume only sound.] ) fi if [[ "$WANT_SYNCHRONIZED_SOUND" = "yes" -o "$WANT_VOL_ONLY_SOUND" = "yes" ]]; then A8_OPTION(consolesound,yes, [Use console sound (keyboard clicks) (default=ON)], CONSOLE_SOUND,[Define to allow console sound (keyboard clicks).] ) A8_OPTION(seriosound,no, [Use serial in/out sound (default=OFF)], SERIO_SOUND,[Define to allow serial in/out sound.] ) else WANT_CONSOLE_SOUND="no" WANT_SERIO_SOUND="no" fi A8_OPTION(clipsound,no, [Use sound clipping (default=OFF)], CLIP_SOUND,[Define to allow sound clipping.] ) A8_OPTION(pbi_xld,yes, [Emulate 1450XLD (default=ON)], PBI_XLD,[Define to emulate the 1400XL/1450XLD.] ) A8_OPTION(voicebox,yes, [Emulate the Alien Group Voice Box (default=ON)], VOICEBOX,[Define to emulate the Alien Group Voice Box.] ) supported_audio_codecs="pcm adpcm mulaw" AC_ARG_WITH(mp3, [AC_HELP_STRING(--with-mp3@<:@=no|yes|lame@:>@,[Select mp3 audio @<:@default=check@:>@])], [ case "$withval" in no | yes | check | lame) ;; *) AC_MSG_ERROR([unrecognized value for --with-mp3: "$withval"]) ;; esac ], [with_mp3=check]) if [[ "$with_mp3" != "no" ]]; then if [[ "$with_mp3" = check -o "$with_mp3" = yes -o "$with_mp3" = lame ]]; then AC_CHECK_LIB(mp3lame, lame_init, [ A8_ADD_INCLUDE_PATH([lame],[lame.h],[/usr/include /usr/local/include],[lame],[ if [[ "$with_mp3" = yes -o "$with_mp3" = "lame" ]]; then AC_MSG_ERROR([lame.h not found, modify CPPFLAGS or use --with-mp3=check]) fi with_mp3=no ]) if [[ $with_mp3 != no ]]; then LIBS="-lmp3lame $LIBS" AC_DEFINE(AUDIO_CODEC_MP3,1,[Supports mp3 audio]) supported_audio_codecs="$supported_audio_codecs mp3" with_mp3="libmp3lame" fi ], [ if [[ "$with_mp3" = yes -o "$with_mp3" = "lame" ]]; then AC_MSG_ERROR([unable to find libmp3lame, modify LDFLAGS or use --with-mp3=check]) fi with_mp3="no" ]) fi fi else WANT_NONLINEAR_MIXING="no" WANT_SYNCHRONIZED_SOUND="no" WANT_INTERPOLATE_SOUND="no" WANT_STEREO_SOUND="no" WANT_VOL_ONLY_SOUND="no" WANT_CONSOLE_SOUND="no" WANT_SERIO_SOUND="no" WANT_CLIP_SOUND="no" WANT_PBI_XLD_SOUND="no" WANT_AUDIO_CODEC_MP3="no" fi AM_CONDITIONAL([WANT_PBI_XLD], test "$WANT_PBI_XLD" = "yes") AM_CONDITIONAL([WANT_VOICEBOX], test "$WANT_VOICEBOX" = "yes") AM_CONDITIONAL([WANT_PBI_XLD_OR_VOICEBOX], test "$WANT_PBI_XLD" = "yes" -o "$WANT_VOICEBOX" = "yes") AM_CONDITIONAL([WANT_PBI_MIO_OR_BB], test "$WANT_PBI_MIO" = "yes" -o "$WANT_PBI_BB" = "yes") AM_CONDITIONAL([WITH_AUDIO_CODEC_MP3], test "$with_mp3" != "no") if [[ "$with_video" != no -a "$WANT_CURSES_BASIC" != yes ]]; then have_bitmapped_screen=yes A8_OPTION(videorecording,"yes", [Support video recording to AVI files (default=ON)], VIDEO_RECORDING,[Define to enable support for AVI video/audio recording.] ) supported_image_formats="pcx" if [[ "$SUPPORTS_LIBPNG" = "yes" ]]; then supported_image_formats="$supported_image_formats png" fi else have_bitmapped_screen="no" WANT_VIDEO_RECORDING="no" fi if [[ "$with_sound" != no -o "$WANT_VIDEO_RECORDING" = yes ]]; then AC_DEFINE(MULTIMEDIA, 1, [Define to provide multimedia recording capability.]) fi AM_CONDITIONAL([WITH_MULTIMEDIA], test "$with_sound" != no -o "$WANT_VIDEO_RECORDING" = "yes") dnl file_export.c is needed when sound is enabled (for WAV recording) or when AVI recording dnl is enabled, or for screenshots when screen.c is compiled into the code. AM_CONDITIONAL([WITH_FILE_EXPORT], test "$with_sound" != no -o "$have_bitmapped_screen" = "yes") dnl Set video recording configuration options if [[ "$WANT_VIDEO_RECORDING" = "yes" ]]; then supported_video_codecs="rle" if [[ "$SUPPORTS_LIBPNG" = "yes" ]]; then A8_OPTION(pngcodec,"yes", [Support PNG video codec (default=ON)], VIDEO_CODEC_PNG,[Define to enable support for PNG video codec.] ) if [[ "$WANT_VIDEO_CODEC_PNG" = "yes" ]]; then supported_video_codecs="$supported_video_codecs png" fi else WANT_VIDEO_CODEC_PNG=no fi A8_OPTION(zmbvcodec,"yes", [Support ZMBV video codec (default=ON)], VIDEO_CODEC_ZMBV,[Define to enable support for ZMBV video codec.] ) if [[ "$WANT_VIDEO_CODEC_ZMBV" = "yes" ]]; then supported_video_codecs="$supported_video_codecs zmbv" fi fi AM_CONDITIONAL([WITH_VIDEO_RECORDING], test "$WANT_VIDEO_RECORDING" = "yes") AM_CONDITIONAL([WITH_VIDEO_CODEC_PNG], test "$WANT_VIDEO_RECORDING" = "yes" -a "$WANT_VIDEO_CODEC_PNG" = "yes") AM_CONDITIONAL([WITH_VIDEO_CODEC_ZMBV], test "$WANT_VIDEO_RECORDING" = "yes" -a "$WANT_VIDEO_CODEC_ZMBV" = "yes") A8_OPTION(ide,$WANT_IDE, [Provide IDE emulation (default=ON)], IDE,[Define to add IDE harddisk emulation.] ) if [[ "$WANT_IDE" = "yes" ]]; then AC_SYS_LARGEFILE AC_FUNC_FSEEKO fi AM_CONDITIONAL([WANT_IDE], test "$WANT_IDE" = "yes") A8_OPTION(pokeyrec,$WANT_POKEYREC, [Provide Pokey registers recording (default=ON)], POKEYREC,[Define to add Pokey registers recording.] ) if [[ "$WANT_POKEYREC" = "yes" ]]; then AC_SYS_LARGEFILE fi AM_CONDITIONAL([WANT_POKEYREC], test "$WANT_POKEYREC" = "yes") if [[ "$a8_use_sdl" = yes ]]; then A8_OPTION(onscreenkeyboard,no, [Enable on-screen keyboard (default=OFF)], USE_UI_BASIC_ONSCREEN_KEYBOARD,[Define to enable on-screen keyboard.] ) fi dnl Select/detect features based on external software... dnl Check for existence of the readline library and headers. AC_ARG_WITH(readline, [AC_HELP_STRING(--with-readline,[Use libreadline for input in monitor @<:@default=check@:>@])], [], [with_readline=check]) if [[ "$with_readline" != no ]]; then dnl Readline uses termcap internally. Termcap's functionality is nowadays dnl provided by several libraries (eg. ncurses). However, on some environments, dnl Readline is not linked to a Termcap-providing library at compile-time. dnl So, we check whether Readline is already linked to such library, by checking dnl existence of the tgetent symbol in readline. If not, we search for tgetent dnl in a few other libraries. All done with a single AC_SEARCH_LIBS statement. have_readline=no AC_SEARCH_LIBS(tgetent, [readline termcap ncursesw ncurses curses], [ AC_SEARCH_LIBS(readline, readline, [ AC_CHECK_HEADER([readline/readline.h], [ have_readline=yes ], [ if [[ "$with_readline" = yes ]]; then AC_MSG_ERROR([unable to use libreadline - readline/readline.h not found or not compilable.]) fi ]) ], [ if [[ "$with_readline" = yes ]]; then AC_MSG_ERROR([unable to link libreadline - the library is not installed on this system.]) fi ]) ], [ if [[ "$with_readline" = yes ]]; then AC_MSG_ERROR([unable to properly link libreadline - a library \ providing termcap functionality is not found. Try installing one of ncursew, \ ncurses, curses, termcap.]) fi ]) with_readline=$have_readline fi if [[ "$with_readline" = yes ]]; then AC_DEFINE(MONITOR_READLINE, 1, [Define to activate readline support in monitor.]) fi dnl Check for availability of the OpenGL header. AC_ARG_WITH(opengl, AC_HELP_STRING(--with-opengl,[Build support for OpenGL hardware video acceleration - only in SDL target @<:@default=check@:>@]), [], [with_opengl=check]) if [[ "$a8_target" != default -o "$with_video" != sdl ]]; then if [[ "$with_opengl" = "yes" ]]; then AC_MSG_ERROR([option --with-opengl only supported with --target=default --with-video=sdl!]) fi with_opengl=no fi if [[ "$with_opengl" != no ]]; then have_opengl=no AC_CHECK_HEADER([SDL_opengl.h], [ have_opengl=yes ], [ if [[ "$with_opengl" = yes ]]; then AC_MSG_ERROR([unable to use OpenGL - SDL_opengl.h not found or not compilable.]) fi ]) with_opengl=$have_opengl fi if [[ "$with_opengl" = "yes" ]]; then AC_DEFINE(HAVE_OPENGL, 1, [Support for OpenGL graphics acceleration.]) A8_OPTION(opengl-by-default,no, [Set VIDEO_ACCEL=1 in the config file created on first run after installation to enable OpenGL hardware acceleration (OpenGL-aware targets) (default set VIDEO_ACCEL=0)], VIDEO_ACCEL_ON_BY_DEFAULT,[Define for targets too slow to run without OpenGL video acceleration, supported only with --with-opengl] ) fi AM_CONDITIONAL([WITH_OPENGL], test "$with_opengl" = "yes") dnl Select host/target specific features... if [[ "$a8_host" = "falcon" ]]; then A8_OPTION(falconcpuasm,no, [Use m68k assembler CPU core for Falcon target (default=OFF)], FALCON_CPUASM,[Define to use m68k assembler CPU core for Falcon target.] ) fi AM_CONDITIONAL([WANT_FALCON_CPUASM], test "$WANT_FALCON_CPUASM" = "yes") if [[ "$a8_host" = "linux" ]]; then case "$a8_target" in x11*) A8_OPTION(linuxjoystick,yes, [Use LINUX joystick (linux x11 targets only) (default=ON)], LINUX_JOYSTICK,[Define to use LINUX joystick.] ) esac fi if [[ "$a8_target" = "windx" ]]; then A8_OPTION(cursorblock,no, [Using cursor/ctrl keys for keyboard joystick (windx targets only) (default=OFF)], USE_CURSORBLOCK,[Define for using cursor/ctrl keys for keyboard joystick.] ) fi if [[ "$WANT_XEP80_EMULATION" = "yes" ]]; then AC_DEFINE(XEP80_EMULATION,1,[Emulate the XEP80.]) fi AM_CONDITIONAL([WANT_XEP80_EMULATION], test "$WANT_XEP80_EMULATION" = "yes") if [[ "$WANT_NTSC_FILTER" = "yes" ]]; then AC_DEFINE(NTSC_FILTER,1,[Use NTSC video filter.]) fi AM_CONDITIONAL([WANT_NTSC_FILTER], test "$WANT_NTSC_FILTER" = "yes") if [[ "$WANT_PAL_BLENDING" = "yes" ]]; then AC_DEFINE(PAL_BLENDING,1,[Use accurate PAL color blending.]) fi AM_CONDITIONAL([WANT_PAL_BLENDING], test "$WANT_PAL_BLENDING" = "yes") if [[ "$SUPPORTS_RDEVICE" = "yes" ]]; then A8_OPTION(riodevice,yes, [Use the R: networking device (Linux/Unix/Win32) (default=ON)], R_IO_DEVICE,[Define to use R: device.] ) if [[ "$WANT_R_IO_DEVICE" = "yes" ]]; then A8_OPTION(rnetwork,yes, [Use IP network connection with the R: networking device (Linux/Unix/Win32) (default=ON)], R_NETWORK,[Define to use IP network connection with the R: device.] ) if [[ "$a8_host" != "win" -a "$a8_host" != "macos" ]]; then A8_OPTION(rserial,yes, [Use the host serial port with the R: networking device (Linux/Unix only) (default=ON)], R_SERIAL,[Define to use the host serial port with the R: device.] ) else if [[ "$a8_host" = "win" ]]; then A8_NEED_LIB(ws2_32) fi WANT_R_SERIAL="no" fi fi fi AM_CONDITIONAL([WANT_R_IO_DEVICE], test "$WANT_R_IO_DEVICE" = "yes") dnl Wrapup: export and write Makefile... AC_SUBST(JAVAFLAGS) AC_SUBST(JAVACFLAGS) AC_SUBST(CCAS) AC_SUBST(CCASFLAGS) CFLAGS_NOANSI=`echo $CFLAGS | sed -e 's/-ansi//' -e 's/-pedantic//'` AC_SUBST(CFLAGS_NOANSI) AC_CONFIG_FILES([ Makefile DOC/Makefile src/Makefile tools/Makefile ]) if [[ "$a8_target" = "android" ]]; then AC_CONFIG_FILES(src/android/jni/Android.mk) fi AC_OUTPUT dnl Print results of configure's work... echo "-------------------------------------------------------" echo " CONFIGURATION RESULTS:" echo "-------------------------------------------------------" echo "Host OS...............................: $a8_host" echo "Target ...............................: $a8_target" echo if [[ "$a8_target" = default ]]; then echo "Interface for video...................: $with_video" case "$with_video" in *curses) echo "Using no bitmap graphics emulation?...: $WANT_CURSES_BASIC" ;; esac fi if [[ "$a8_target" != "default" -o "$with_video" != no ]]; then if [[ "$WANT_CURSES_BASIC" != "yes" ]]; then echo "Supported screenshot formats..........: $supported_image_formats" echo "Using cycle exact?....................: $WANT_NEW_CYCLE_EXACT" echo "Using the very slow computer support?.: $WANT_VERY_SLOW" fi echo "Using the crash menu?.................: $WANT_CRASH_MENU" fi echo "Using the paged attribute array?......: $WANT_PAGED_ATTRIB" echo "Using per opcode cycles update?.......: $WANT_CYCLES_PER_OPCODE" echo "Using the buffered log?...............: $WANT_BUFFERED_LOG" echo "Using Altirra BIOS ROM?...............: $WANT_EMUOS_ALTIRRA" echo "Using the monitor assembler?..........: $WANT_MONITOR_ASSEMBLER" echo "Using code breakpoints and history?...: $WANT_MONITOR_BREAK" echo "Using user-defined breakpoints?.......: $WANT_MONITOR_BREAKPOINTS" echo "Using monitor hints?..................: $WANT_MONITOR_HINTS" echo "Using 6502 opcode profiling?..........: $WANT_MONITOR_PROFILE" echo "Using TRACE monitor command?..........: $WANT_MONITOR_TRACE" echo "Using readline support in monitor?....: $with_readline" echo "Using UTF-8 support in monitor?.......: $WANT_MONITOR_UTF8" echo "Using ANSI color support in monitor?..: $WANT_MONITOR_ANSI" echo "Using event recording?................: $WANT_EVENT_RECORDING" echo "Using MIO emulation?..................: $WANT_PBI_MIO" echo "Using Black Box emulation?............: $WANT_PBI_BB" echo "Using IDE emulation?..................: $WANT_IDE" echo "Using Pokey registers recording?......: $WANT_POKEYREC" echo "Interface for sound...................: $with_sound" if [[ "$with_sound" != no ]]; then echo " Using nonlinear mixing?...........: $WANT_NONLINEAR_MIXING" echo " Using synchronized sound?.........: $WANT_SYNCHRONIZED_SOUND" echo " Using sound interpolation?........: $WANT_INTERPOLATE_SOUND" echo " Using stereo sound?...............: $WANT_STEREO_SOUND" echo " Using volume only sound?..........: $WANT_VOL_ONLY_SOUND" if [[ "$WANT_VOL_ONLY_SOUND" = "yes" ]]; then echo " Using console sound?..........: $WANT_CONSOLE_SOUND" echo " Using serial I/O sound?.......: $WANT_SERIO_SOUND" else echo " (Volume only sound sub-options disabled)" fi echo " Using 1400XL/1450XLD emulation?...: $WANT_PBI_XLD" echo " Using sound clipping?.............: $WANT_CLIP_SOUND" echo " Supported audio codecs............: $supported_audio_codecs" if [[ "$with_mp3" != "no" ]]; then echo " Library for mp3 audio.........: $with_mp3" fi else echo " (Sound sub-options disabled)" fi echo "Using video recording?................: $WANT_VIDEO_RECORDING" if [[ "$WANT_VIDEO_RECORDING" = "yes" ]]; then echo " Supported video codecs............: $supported_video_codecs" fi if [[ "$a8_host" = "falcon" ]]; then echo "Using M68K assembler CPU core?........: $WANT_FALCON_CPUASM" fi if [[ "$a8_host" = "linux" ]]; then case "$a8_target" in x11*) echo "Using Linux joystick?.................: $WANT_LINUX_JOYSTICK" esac fi if [[ "$a8_target" = "windx" ]]; then echo "Using cursor/ctrl keys?...............: $WANT_USE_CURSORBLOCK" fi if [[ "$SUPPORTS_RDEVICE" = "yes" ]]; then echo "Using R: device?......................: $WANT_R_IO_DEVICE" if [[ "$a8_host" != "win" -a "$a8_host" != "macos" -a "$WANT_R_IO_DEVICE" = "yes" ]]; then echo " Using R: with the host serial port?...: $WANT_R_SERIAL" echo " Using R: with IP network support......: $WANT_R_NETWORK" fi fi if [[ "$a8_target" = default -a "$with_video" = sdl ]]; then echo "Using on-screen keyboard?.............: $WANT_USE_UI_BASIC_ONSCREEN_KEYBOARD" echo "Using OpenGL?.........................: $with_opengl" fi echo echo "Main build variables:" echo " CC......: \"$CC\"" echo " ASFLAGS.: \"$CCASFLAGS\"" echo " CFLAGS..: \"$CFLAGS\"" echo " CPPFLAGS: \"$CPPFLAGS\"" echo " LDFLAGS.: \"$LDFLAGS\"" echo " LIBS....: \"$LIBS\"" echo "-------------------------------------------------------" if [[ "$WANT_VERY_SLOW" = "yes" ]]; then echo echo "IMPORTANT: --enable-veryslow provides a bit better performance" echo "only when the compiled atari800 is run with the -refresh option." if [[ "$WANT_FALCON_CPUASM" != "yes" ]]; then if [[ "$WANT_MONITOR_BREAK" = "yes" ]]; then echo "It is better to use --disable-monitorbreak." fi if [[ "$with_sound" != "no" ]]; then echo "Try --without-sound, too." fi if [[ "$WANT_PAGED_ATTRIB" != "yes" ]]; then echo "Have you tried --enable-pagedattrib ?" fi if [[ "$WANT_CYCLES_PER_OPCODE" != "yes" ]]; then echo "Have you tried --enable-cyclesperopcode ?" fi fi fi echo echo "Now run \"gmake\" or \"make\"." echo atari800-5.0.0/data/000077500000000000000000000000001425067567700140005ustar00rootroot00000000000000atari800-5.0.0/data/atari2.png000066400000000000000000000201131425067567700156650ustar00rootroot00000000000000PNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATx}kpוwLO PEHdzX=:q\qŵ6mWJ Ǧ*GD ҮMicک&pVRdMR$0o~杞~fBW ܹs|{s]Z{Ϝ9q*@<ժ%`3gt6]AZmCCgϜ9]XTH)=B9" 0@s+!d&jjB]Iq^]!.;ivg/ fiҥKP(|ζBȆO)mOOO_طo_7%iyV1J)6s[٫'WWWabiw'}1VgdBN3./tql6rBi:\ׅ \ O=Ƙ}f8 u:+W,PJ|%۶(Cigff^q`Pi\Ka޿8ϥpܹ9KӜOzVyRK_r'TAsO~oNMM255U4NBD)eY`v Jy?~"ј۹o)cYιNsdeee*ooPV+͓Bpҥg0_2EZ3g/^G}t˜2DR㜃R ۶}sl6cnO*z(z@;qď~_?O;F i^X뺨"5d2h!زLSƘmh4b r(Aa\СCL&s m1ʆ@2 2 gB=wBtv#SNݻn!BCE ](NlbҎS zz*t 6<ϋ y7 Fa8NBQJ}0Dt)b1aljGd 9 9v}hX0xXuT(($t+DAst:йyzD.!=}5l_]Kb N ԭj_zR(C&WPP]Z t(EvRܹsy>O9mYvܹso|?MB@\us% YA 'L0P0)* E֫0B9|Z|̙iS >c |1pQGBA2/n(L&3 3cz?U|Z7P^ pُB(KsssVQV;8-a V..ccY4n"gY_v@ ė0B7|/: BȺoZzeY-깮Uj9hh_v-eid2ГBA]7q7]PNcr{ X$C~Qe:77nr4#:cixlUK)2N CA9L׋ŵŧ i1iff捣GzvvVMn#&)Fm<iT,:`Y|RB;Za/#BW Di|BIƊeB}|qqqeϞ= ! y;l0l?>9K/pR՛^ٳgO\./pK!)rOt+ADYy( d܅Ç7xsR 8r"i୷b0{YBH۶ |~s~w1#B 4XO_uBܦiooPNrAB'FՁ3Ɣ \v}!Q,f(*+eYsO! 0Mz=?4h(df[@{{J9OUd @yN..JWt]2T^(^+qV+V蚦!σR u "n;BT@)UU8*Au\9Ng m/J%kzz1;;mh4z=F ]PV[i٬~?s@B@map]7W\__-Cd݈n m 뉫 iG ]I"^h4:,[]`P($l6;  !CTv9jX)yiCGe*3*E}0ׂfu]G>Z+\.nc16 rqU\t /^D*}+_yR:%D@t: %q?K՟覢MP(|^__ztj4Mr9è@܍F#6,<_o2L1^Xf&DP|>o4M& lotR~_wkk]aÄ./mT9PTnJ h4f_۶tmCue> +KnW3r9_*n釂"O~R O)nlӡKxT ?C,C/[a(QeQl֯t:eJ&.5*!,!yEn!嬠y`T2x駏477wqf]r! K9]jϟn-A[ /+S THbSg[✟p5 333jr1*܉p- a࠵ضNP; DQB4mHA_!,t?KYH !۶/ iGnK"tG9dY7ɠ(J((byT=ZLV;Z i^*>HSM)mض}X,B;|ڵR0hE z Cuߚ% 7z aJ2q3t:/_I(U|48͉t܍܉ >+1MS>AmfZ8Q^ F!VdrU)r BToSܕk@NPQ8FǑr((<}{c4J\Ar\&T82el7n7v4B*JcJA˵J) ^__Hu 娨gt:cCq:Ip|U &k@Uv9win^T&*t¶ ']Mu$M _00Paخ%vX[5 {b-X0',҇XP/t>h%'Ǚh*Xij;C4?5QfP#˥@nHm>9`hrZG 0`Y/$8~)XPpuu|C)b a6Z_N?='5qLFm+w *hb}v7e@FZqLZRd'9}STMDΟ?:I(CdWi>-SAЃRNPZ-l&T G*S'(j%wqjZjADZ3IC, =V@lN)|yޘtҦ#LQx'"t1[%mo5Zy~MD>7:Nlz74#a1`U 2 _%TH~뺧ѯlzUٶ}ȶvIV[[V[x26s$MRǑLngp]&kE(6 H{ꩧz~gһ fffi333>SI/!Pi>Ÿ REF0]&TIKafpOJʷ'ވL|gffBpirDl4*G;c h@lvI̚YV;I)=9?M)=հF\msmIE((r"Ih>)ӄɭZ,\ Ӥcv|cPL=˲~^*V!]l^k>9 6`*8! jYR)XX(l6#< !x r܅b4MsA)bnC@H?W)BLz9۟ 01 \))W ^r0BHӶWŢci~"fh%}q2!;&$&*P1B宏`(ąi=V(~^(4MfŅ⺅G"R((g䎣HƘT3fjjJOܙTU0Ʈ7;>f|*|:@xiF JkHIXJ踴`9l4JUA1\<Bb-۶cwض}r#O]#7]\G\((=FQf3e%1Mbx1c-ض=eȂ臂iN'U9F=)A V(V?O,f/4rDZ1Xe*PID7Y7 G1sV RaxSS4JXl> ;)?l\Up]T+BAs- TQaZ;trEU磇F @ T[rbEH宒`D3U -TZJAH g-6ƣIoe9nn9>50ҙ0TqD4zϥb,Jţ ъ4s;{W\|NS8u8NZ-ΉIOFsX7;w D*loիv횿2'@)IUA#i 擢lUJRfjjj;ӵ#RC`O|A[ ?A_{Rmcz=V׎38x#!MR~BH;&|'K'NX(Lb9xh@ڪܩG=_pοucI\k(+D7X1JNA x_# EH?Y ӉM{%jRyEv1[|>cc]A1?T[T6TQt:O2Au{jZUV*MWbc .*`+X+`w1r(n` 1T*(,D)h4qBT*ɛmI]Eˠ>9SN򑐏U&lnVw>&!SBn ybJŦ@`yyY< o image/svg+xml atari800-5.0.0/data/atari800.ico000066400000000000000000000062761425067567700160370ustar00rootroot00000000000000  ( @ `sd$$$$$$$$$$$$.hn9VdssHsV$$$$$$$$$$$$C9d$$$Hss=[]=jmsd$$$^Y=iVKoq$$$$$$8JLlrFrqv̍VKoq̍Vs8JL$$$$$$KoqV>ZAKoq8RTyhTV>f$$$PupV>oz$$$/99oz\@=jmpt_nO8JLk̍V$$$S``}tzohVYB$$$]~YBkz/99$$$PupZAo}$$$$$$=jm\@cFdY=_DnOV$$$at̍V$$$=[]gjcF]Ewwg=[]=jm\FeJ=x{$$$$$$PupZAo}$$$$$$$$$fY=}oz\@$$$$$$atQ$$$$$$wQxĔnOcF`$$$fZA\FhV`$$$PupZAo}$$$$$$$$$4ZocJ\@\@q[=jm$$$$$$giyQ$$$$$$EdeOzNnO$$$$$$$$$HyhT\Fy~8JLPupZAo}$$$$$$$$$$$$_}x\@\@`$$$ntzNo4SUzNz^Koq5=>sssrYB~}/99PupZAo}$$$$$$$$$$$$5=>|xf~}/99=jmY=nOnOzNQŠU̍VaKoqQe$$$fwZA\F\F\FYBN$$$PupZAo}$$$$$$$$$$$$$$$H=jm5=>coosx$$$e/3R9jywywywywysQ$$$$$$CoR.pv$$$$$$Q4~/99$$$$$$$$$$$$$$$$$$$$$$$$$$$)JM.pv.pv)JM$$$$$$$$$$$$$$$$$$$$$$$$$$$)JMC~=[],n{/x$$$=pu$$$6=g:CA4G8JL$$$$$$$$$$$$$$$$$$=[]$$$28N4Y{$$$$$$$$$$$$$$$$$$Hpr2+.9$$$$$$$$$.hn$$$$$$w:CA4A4A4Iu)JM$$$$$$$$$$$$iw}s^$$$$$$$$$$$$4Zo@[A4:C+.9UB9YBnOl$$$$$$u{zw|}|}A4A4B7D$$$$$$$$$|}z|}dw$$$$$$$$$FA4A4=;hbnOnOnOnOur$$$$$$ozt_zxsuptA4A4=h$$$$$$gxxdw$$$$$$=A4A4_SzonOnOnOnO`>pob$$$$$$/99QMwxރA4A49jy$$$dۇxn$$$=bA4\^z}sz~zonOfV=pu/99$$$$$$$$$$$$$$$$$$8RTޮA4Bb5=>dۍ^4ZoA4B7z|}|}„vd/99$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$rʵYeHjrʭlBbh{xxH$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$n4]gA4ʽYs$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$${Ry{{l$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=[]{dt_[`yܵ+.9$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$urnOt]Xܵb$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$KoqtNnOgµ=[]$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4ZoWtNrrY|}n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=[]`{RqrNnObz~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$(((mmmqqq///$$$$$$$$$%%%ZZZvvv4UX`nOuzQqN$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$fff䗗$$$777~tNqᳳ$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$000JJJ$$$lOײQ$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$hhh((($$$$$$$$$}}}f鿱t_s$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&&&###ż######LLL##########################################jjjggg###չ###,,,###...ttt###...㪪####################################iiiPPP000###]]]pppLLL###VVVQQQwwwggg####################################$$$~~~@@@######fff'''######kkkhhh#######################################atari800-5.0.0/data/atari_xe.ico000066400000000000000000000013761425067567700162770ustar00rootroot00000000000000 ( @xwyxxwwwwxxpwwxxwwxxwwxxxwxwxxxxxxwxxxwxxxwxxxwwxxwwxxxwpxwpxxxxxxxxxxxxxxxxxxwx???xatari800-5.0.0/depcomp000077500000000000000000000560171425067567700144550ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # 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, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atari800-5.0.0/emuos/000077500000000000000000000000001425067567700142175ustar00rootroot00000000000000atari800-5.0.0/emuos/LICENSE000066400000000000000000000004761425067567700152330ustar00rootroot00000000000000Altirra - Atari 800/800XL emulator Kernel ROM replacement Copyright (C) 2008-2020 Avery Lee Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. atari800-5.0.0/emuos/Makefile000066400000000000000000000035301425067567700156600ustar00rootroot00000000000000# Altirra - Atari 800/800XL emulator # Kernel ROM replacement # Copyright (C) 2008-2020 Avery Lee # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. MADS=mads OUT=build CDIR=../src/roms/ SRC_SHARED=\ src/atarifont.inc \ src/boot.s \ src/cassette.s \ src/cio.inc \ src/cio.s \ src/disk.s \ src/editor.s \ src/hardware.inc \ src/init.s \ src/interrupt.s \ src/irq.s \ src/kerneldb.inc \ src/keyboard.s \ src/keytable.s \ src/mathpack.s \ src/misc.s \ src/printer.s \ src/screenext.s \ src/screen.s \ src/sio.inc \ src/sio.s \ src/vbi.s \ src/version.inc \ SRC_800=\ src/blackboard.s \ SRC_XL=\ src/atariifont.inc \ src/bootscreen.s \ src/driveimage.inc \ src/pbi.s \ src/phandler.s \ src/selftestentry.s \ all:\ $(CDIR)/altirraos_xl.c \ $(CDIR)/altirraos_800.c \ # Rules to assemble XL and 800 kernel ROM $(OUT)/altirraos_xl.rom: main.xasm $(SRC_XL) $(SRC_SHARED) | $(OUT) $(MADS) -d:_KERNEL_XLXE=1 -s -p -i:src -i:fnt -b:49152 -l:$(@:.rom=.lst) -t:$(@:.rom=.lab) -o:$@ $< $(OUT)/altirraos_800.rom: main.xasm $(SRC_800) $(SRC_SHARED) | $(OUT) $(MADS) -d:_KERNEL_XLXE=0 -s -p -i:src -i:fnt -b:55296 -l:$(@:.rom=.lst) -t:$(@:.rom=.lab) -o:$@ $< # Rules to convert ROM into HEX file $(OUT)/%.hex: $(OUT)/%.rom hexdump -ve '"\t" 8/1 "0x%02x," "\n"' < $< | sed -e '$$ s/,$$//' > $@ # Join the HEX file with the headers to get the C source files $(CDIR)/%.c: %_head.in $(OUT)/%.hex template_tail.in cat $^ > $@ $(OUT): mkdir -p $(OUT) clean: -rm -f $(OUT)/altirraos_800.lab -rm -f $(OUT)/altirraos_800.lst -rm -f $(OUT)/altirraos_800.rom -rm -f $(OUT)/altirraos_xl.lab -rm -f $(OUT)/altirraos_xl.lst -rm -f $(OUT)/altirraos_xl.rom -rmdir $(OUT) atari800-5.0.0/emuos/README000066400000000000000000000004721425067567700151020ustar00rootroot00000000000000This folder contains the sources for the Altirra Kernel ROM replacement, used to build the internal emulator OS. To rebuild the files, you need the MAD assembler in your path, download from here: https://github.com/tebe6502/Mad-Assembler/releases Just type make in this directory and the C files will be built. atari800-5.0.0/emuos/altirraos_800_head.in000066400000000000000000000010211425067567700201110ustar00rootroot00000000000000/* * altirraos_800.c - 400/800 OS ROM replacement * * Compiled from the sources in the emuos folder. * * Altirra - Atari 800/800XL emulator * Kernel ROM replacement, version 3.11 * Copyright (C) 2008-2018 Avery Lee * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. This file is offered as-is, * without any warranty. */ #include "atari.h" UBYTE const ROM_altirraos_800[0x2800] = { atari800-5.0.0/emuos/altirraos_xl_head.in000066400000000000000000000010221425067567700202260ustar00rootroot00000000000000/* * altirraos_xl.c - XL/XE/XEGS OS ROM replacement * * Compiled from the sources in the emuos folder. * * Altirra - Atari 800/800XL emulator * Kernel ROM replacement, version 3.11 * Copyright (C) 2008-2018 Avery Lee * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. This file is offered as-is, * without any warranty. */ #include "atari.h" UBYTE const ROM_altirraos_xl[0x4000] = { atari800-5.0.0/emuos/fnt/000077500000000000000000000000001425067567700150065ustar00rootroot00000000000000atari800-5.0.0/emuos/fnt/atarifont.bin000066400000000000000000000020001425067567700174570ustar00rootroot00000000000000fffffff>`<|fl0fF68of;p88pf< 80 0 ~~`0 0```nf>ff~fff~~f<flxxlf`````~cwkccfv~~nf8pp8?ww<~~~<x`x`~<~~<0~0 ~ <~~<<>f>``|ff|<```<>ff>>ff>|``|fff8<<``lxlf8<fkc|ffffff>|f```>`<|~ffff>fff<ck>6f< x~ 0~<~~<~x|nf8x8atari800-5.0.0/emuos/fnt/atariifont.bin000066400000000000000000000020001425067567700176300ustar00rootroot00000000000000fffffff>`<|fl0fF68of;p88pf< 80 0 ~~`0 0```nf>ff~fff~~f<flxxlf`````~cwkccfv~~nff>0fff>6lvv~n ~`|`~<``<06<>f>f f>f>0<>f>f>``|ff|<```<>ff>>ff>|``|fff8<<``lxlf8<fkc|ffffff>|f```>`<|~ffff>fff<ck>6f< x~ 0~ff ', *-?@_kernel_lastpt, '(', :2, ')', ' ', :1 .def ?@_kernel_lastpt = * .endm icl 'misc.s' _KERNEL_REPORT_MODULE_MARK icl 'cio.inc' .ifdef _KERNEL_816 icl 'cio816.s' .else icl 'cio.s' .endif _KERNEL_REPORT_MODULE_SIZE 'Central Input/Output (CIO)', $E6D5-$E4A6 .if !_KERNEL_XLXE icl 'vbi.s' icl 'interrupt.s' icl 'irq.s' .endif _KERNEL_REPORT_MODULE_SIZE 'Interrupt routines', $E944-$E6D5 icl 'sio.inc' icl 'sio.s' _KERNEL_REPORT_MODULE_SIZE 'Serial Input/Output (SIO)', $EDEA-$E944 icl 'disk.s' _KERNEL_REPORT_MODULE_SIZE 'Disk Handler', $EE78-$EDEA icl 'printer.s' _KERNEL_REPORT_MODULE_SIZE 'Printer Handler', $EF41-$EE78 icl 'cassette.s' _KERNEL_REPORT_MODULE_SIZE 'Cassette Handler', $F0E3-$EF41 .ifdef _KERNEL_816 icl 'init816.s' .else icl 'init.s' .endif icl 'boot.s' _KERNEL_REPORT_MODULE_SIZE 'Monitor routines', $F3E4-$F0E3 icl 'screen.s' icl 'editor.s' .ifdef _KERNEL_816 icl 'screenext816.s' .else icl 'screenext.s' .endif _KERNEL_REPORT_MODULE_SIZE 'Display routines', 0 .ifdef _KERNEL_816 icl 'keyboard816.s' .else icl 'keyboard.s' .endif icl 'keytable.s' _KERNEL_REPORT_MODULE_SIZE 'Keyboard routines', 0 .if _KERNEL_XLXE .echo 'Free space: ', $FFEE-*, ' bytes' .else .echo 'Free space: ', $FFFA-*, ' bytes' .endif ;============================================================================== ; version block (XL/XE) ;============================================================================== .ifdef _KERNEL_816 org $ffe4 dta a(IntDispatchNativeCop) ;$FFE4 dta a(IntDispatchNativeBreak) ;$FFE6 dta a(IntDispatchNativeAbort) ;$FFE8 dta a(IntDispatchNativeNmi) ;$FFEA dta a(0) ;$FFEC dta a(IntDispatchNativeIrq) ;$FFEE dta $13 ;$FFF0 dta $02 ;$FFF1 option byte - !!CHECKED BY ARCHON dta 'CX' ;$FFF2 dta a(IntDispatchCop) ;$FFF4 dta a(0) ;$FFF6 dta a(IntDispatchAbort) ;$FFF8 .elif _KERNEL_XLXE org $ffee dta $01,$01,$13 dta $02 ;option byte - !!CHECKED BY ARCHON dta 'CX',$00,$00,$00 dta $00 dta a(0) .endif ;============================================================================== ; reset vectors ;============================================================================== org $fffa dta a(IntDispatchNMI) dta a(InitReset) dta a(IntDispatchIRQ) end atari800-5.0.0/emuos/src/000077500000000000000000000000001425067567700150065ustar00rootroot00000000000000atari800-5.0.0/emuos/src/atarifont.inc000066400000000000000000000006101425067567700174650ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Character Font ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ins 'atarifont.bin',$0,$400 atari800-5.0.0/emuos/src/atariifont.inc000066400000000000000000000006111425067567700176370ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Character Font ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ins 'atariifont.bin',$0,$400 atari800-5.0.0/emuos/src/blackboard.s000066400000000000000000000014201425067567700172530ustar00rootroot00000000000000; Altirra - Atari 800/800XL emulator ; Kernel ROM replacement - Blackboard ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .proc Blackboard ;print banner mva #blackboard_banner icbah sta icbll ldx #0 stx icblh lda #CIOCmdPutRecord echoloop: sta iccmd jsr ciov stx icbll lda #CIOCmdGetChars bne echoloop .endp .if *>$e480 && *<$e4c0 ;anchor version for emulator purposes org $e4a6 .endif blackboard_banner: dta 'AltirraOS ' _KERNELSTR_VERSION dta ' memo pad',$9B atari800-5.0.0/emuos/src/boot.s000066400000000000000000000102651425067567700161410ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Boot Code ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; Disk boot routine. ; ; Exit: ; DBUFLO/DBUFHI = $0400 (Undoc; required by Ankh and the 1.atr SMB demo) ; Last sector in $0400 (Undoc; required by Ankh) ; .proc BootDisk ;issue a status request first to see if the disk is active; if this ;doesn't come back, don't bother trying to read lda #$53 sta dcomnd ldx #1 stx dunit jsr dskinv bmi xit ;read first sector to $0400 ldx #1 stx dunit stx daux1 dex stx dbuflo stx daux2 mva #$52 dcomnd mva #$04 dbufhi jsr dskinv bmi fail sector1_ok: ldx #dosini jsr BootInitHeaders ;load remaining sectors sectorloop: ;copy sector from $0400 to destination (required by Ankh; see above) ;bump destination address for next sector copy jsr BootCopyBlock ;exit if this was the last sector (note that 0 means to load 256 sectors!) dec dbsect beq loaddone ;increment sector (yes, this can overflow to 256) inw daux1 ;read next sector jsr dskinv ;keep going if we succeeded bpl sectorloop ;read failed fail: cpy #SIOErrorTimeout bne failmsg xit: rts failmsg: .if _KERNEL_USE_BOOT_SCREEN st_loop: lda portb eor #$80 sta portb bmi sector1_ok jsr BootScreen.boot_entry jmp st_loop .else jsr BootShowError jmp BootDisk .endif loaddone: jsr BootRunLoader bcs failmsg ;Diskette Boot Process, step 7 (p.161 of the OS Manual) is misleading. It ;says that DOSVEC is invoked after DOSINI, but actually that should NOT ;happen here -- it happens AFTER cartridges have had a chance to run. ;This is necessary for BASIC to gain control before DOS goes to load ;DUP.SYS. jsr InitDiskBoot ;Must not occur until after init routine is called -- SpartaDOS 3.2 does ;an INC on this flag and never exits. mva #1 boot? rts .endp ;============================================================================ .proc BootCassette ;set continuous mode -- must do this as CSOPIV doesn't lda #$80 sta ftype ;open cassette device jsr csopiv ;read first block jsr rblokv bmi load_failure ldx #casini jsr BootInitHeaders block_loop: ;copy 128 bytes from CASBUF+3 ($0400) to destination ;update destination pointer jsr BootCopyBlock ;read next block ;we always need to do one more to catch the EOF block, which is ;required by STDBLOAD2 jsr rblokv bmi load_failure dec dbsect bne block_loop ;run loader jsr BootRunLoader ;run cassette init routine jsr InitCassetteBoot ;clear cassette boot key flag lda #0 sta ckey ;set cassette boot flag mva #2 boot? ;run application jmp (dosvec) load_failure: lda #0 sta ckey jsr CassetteClose jmp BootShowError .endp ;============================================================================ .proc BootInitHeaders ;copy the first four bytes to DFLAGS, DBSECT, and BOOTAD ldy #$fc mva:rne $0400-$fc,y dflags-$fc,y+ ;copy boot address in BOOTAD to BUFADR sta bufadr+1 lda bootad sta bufadr ;copy init vector mwa $0404 0,x rts .endp ;============================================================================ .proc BootRunLoader ;loader is at load address + 6 lda bootad add #$05 tax lda bootad+1 adc #0 pha txa pha rts .endp ;============================================================================ .proc BootCopyBlock ldy #$7f mva:rpl $0400,y (bufadr),y- lda bufadr eor #$80 sta bufadr smi:inc bufadr+1 rts .endp ;============================================================================ .proc BootShowError ldx #$f5 msgloop: txa pha lda errormsg-$f5,x jsr EditorPutByte pla tax inx bne msgloop rts errormsg: dta 'BOOT ERROR',$9B .endp atari800-5.0.0/emuos/src/bootscreen.s000066400000000000000000000276231425067567700173470ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Boot Screen ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. opt o-f-l- org $80 canboot dta 0 chardt1 dta 0 chardt2 dta 0 charpos dta 0 charadr dta a(0) charmsk dta 0 charodd dta 0 char_x dta 0 char_y dta 0 scrnad1 dta a(0) scrnad2 dta a(0) msgadr dta a(0) spracl dta 0 sprach dta 0 spricl dta 0 sprich dta 0 rtcsav dta 0,0,0 rtctmp dta 0,0,0 phase dta 0 opt l+ org $5000,$d000 opt o+f+ .proc BootScreen clc dta {bit $00} boot_entry: sec php jsr BootClearRam plp ror canboot ;relocate data down to RAM mwa #[.adr BootRamDataStart]+$5000-$D000 scrnad1 mwa #BootRamDataStart scrnad2 .if >[BootRamDataEnd-BootRamDataStart] ldx #>[BootRamDataEnd-BootRamDataStart] ldy #0 page_copy: mva:rne (scrnad1),y (scrnad2),y+ inc scrnad1+1 inc scrnad2+1 dex bne page_copy .endif .if <[BootRamDataEnd-BootRamDataStart] byte_copy: mva (scrnad1),y (scrnad2),y+ cpy #<[BootRamDataEnd-BootRamDataStart] bne byte_copy .endif ;copy down bitmap graphics mwa #playfield3+19 scrnad2 mwa #BootDriveImage scrnad1 ldx #40 blit_loop: ldy #12 mva:rpl (scrnad1),y (scrnad2),y- clc lda scrnad2 adc #$20 sta scrnad2 scc:inc scrnad2+1 lda scrnad1 clc adc #13 sta scrnad1 scc:inc scrnad1+1 dex bne blit_loop ;set up display and interrupts sei jsr BootSwapVectors mva #0 nmien mva #$c0 nmien mva #>player0 pmbase ldx #$0c mva:rpl gtia_data,x hposp0,x- mva #$03 gractl cli ;init sprites 0,1 ldx #0 ldy #32 sprinit: mva spr0dat,x player0,y mva spr1dat,x player1,y+ tya and #$0f bne sprinit inx cpx #8 bne sprinit lda #0 sta char_x sta char_y sta msgadr imloop: ldy msgadr inc msgadr lda BootMessage,y cmp #$ff beq imdone jsr PlotChar jmp imloop imdone: lda #0 sta phase loop1: ldx #0 txa sprclr: sta player2,x sta player3,x dex bne sprclr ;save off the current RTCLOK lda:rne vcount ldx #2 mva:rpl rtclok,x rtcsav,x- ;clear the break key in case it was pressed to interrupt the last read stx brkkey ;issue status request to D1: lda #1 sta dunit mva #$53 dcomnd jsr dskinv bmi loop2 ;try to read sector #1 on D1: mva #$52 dcomnd mwa #$0400 dbuflo mwa #1 daux1 jsr dskinv bmi loop2 jmp BootScreenExit loop2: lda rtclok+2 cmp:req rtclok+2 lda rtclok+2 cmp:req rtclok+2 ldx phase mwa phasetab+1,x spricl ldy phasetab,x lda #0 sta spracl sta sprach clloop: sta missiles,y sta player2,y sta player3,y dey bmi clloop ldy phasetab,x lda #$ff blitloop: ldx sprach lda sprdat2,x sta player2,y lda sprdat3,x sta player3,y iny adw spracl spricl spracl lda sprach cmp #$20 bcc blitloop lda #0 blitloop2: sta missiles,y sta player2,y sta player3,y iny cpy #$40 bne blitloop2 ;if this is the first animation frame, wait a bit after it lda phase bne no_wait ldx #25 waitloop: lda rtclok+2 cmp:req rtclok+2 dex bne waitloop txa no_wait: clc adc #3 sta phase cmp #phasetab_end-phasetab scs:jmp loop2 lda #0 sta phase jmp loop1 phasetab: :48 dta $7a+[48-#]/3, a([$200+#*#*3]/3) phasetab_end: gtia_data: dta $40,$60,$a4,$98,$68,$60,$00,$00 dta $03,$03,$00,$03,$0f .endp ;========================================================================== .proc BootScreenExit sei lda #0 sta nmien ;wait for vertical blank ldx #248/2 cpx:rne vcount ;shut off display sta dmactl sta sdmctl ;reset GTIA (but not VBXE) sta:rpl $d000,x+ ;check if we can continue the initial boot process bit canboot bmi continue_boot ;invoke cold start jmp coldsv continue_boot: ;swap interrupt handler registers back jsr BootSwapVectors ;re-wipe RAM areas we used jsr BootClearRam ;re-enable IRQs (but VBI is still disabled) cli ;print a clear screen character to clear any latent BOOT ERRORs lda #$7d ldx #0 stx icbll stx icblh ldy #CIOCmdPutChars sty iccmd jsr ciov ;re-enable VBI and wait for VBI stage 2 to run once mva #$40 nmien lda #$ff sta ptrig7 bit:rmi ptrig7 ;all done, return to boot code with sector 1 loaded at $0400 rts .endp ;========================================================================== .proc BootClearRam ;clear $2000-$37FF lda #0 tay sta charadr ldx #$20 stx charadr+1 ldx #$18 clear_loop: sta:rne (charadr),y+ inc charadr+1 dex bne clear_loop ;clear user page zero sta:rpl $80,x+ ;all done rts .endp ;========================================================================== .proc BootScreenVbi lda pfadr+1 eor #$05 sta pfadr+1 lda color1 sta colpf1 lda color2 sta colpf2 jmp (BootVecVbi) .endp ;========================================================================== .proc BootScreenIrq bit nmist bpl do_irq .def :BootScreenDli pha txa pha lda vcount cmp #72 bcs split lsr lsr tax lda coltab-5,x sta wsync sta colpm0 sta colpm1 xit: sta nmires pla tax pla rti do_irq: jmp (BootVecIrq) split: lda #$50 ldx #$5c sta wsync sta colpf2 stx colpf1 jmp xit .endp ;========================================================================== .local BootMessage ; 0123456789012345678901234567890123456789012345678901234567890123 dta d"AltirraOS" _KERNELSTR_BIOS_NAME_INTERNAL dta d" " _KERNELSTR_VERSION_INTERNAL dta $9b .ifdef _KERNEL_816 dta d"Copyright (C) 2018-2019 Avery Lee",$9b .else dta d"Copyright (C) 2012-2019 Avery Lee",$9b .endif dta d"All Rights Reserved",$9b dta d"This is a substitute for the standard OS ROM. See the help file",$9b dta d"for how to use real Atari ROM images for higher compatibility." dta $ff .endl ;========================================================================== plotchar: cmp #$9b bne not_eol mva #0 char_x inc char_y rts not_eol: sta charadr lda #0 sta scrnad1 sta scrnad2 lda char_y ora #>playfield sta scrnad1+1 clc adc #$05 sta scrnad2+1 lda char_x lsr sta charpos ror sta charodd lda #$e0/8 ldx #3 shlloop: asl charadr rol dex bne shlloop sta charadr+1 clc rowloop: ldx #4 ldy #0 lda (charadr),y lsr bitloop: lsr ror chardt1 lsr ror chardt2 dex bne bitloop ldy charpos bit charodd bmi odd lda chardt2 eor (scrnad2),y and #$0f eor chardt2 sta (scrnad2),y lda chardt1 eor (scrnad1),y and #$0f bpl even odd: lda chardt1 lsr lsr lsr lsr sta chardt1 lda chardt2 lsr lsr lsr lsr sta chardt2 eor (scrnad2),y and #$f0 eor chardt2 sta (scrnad2),y lda chardt1 eor (scrnad1),y and #$f0 even: eor chardt1 sta (scrnad1),y inc charadr tya clc adc #$20 sta charpos bcc rowloop ;update position inc char_x ldx char_x cpx #64 bcc done mva #0 char_x inc char_y done: rts ;========================================================================== spr0dat: dta %00000000 dta %00000011 dta %00001111 dta %00111100 dta %00111100 dta %00111111 dta %00111100 dta %00000000 spr1dat: dta %00000000 dta %11000000 dta %11110000 dta %00111100 dta %00111100 dta %11111100 dta %00111100 dta %00000000 sprdat2: dta %00000000 dta %00000000 dta %00011000 dta %00111100 dta %00111100 dta %00111100 dta %00111100 dta %00111100 dta %00111100 dta %00011000 dta %00000000 dta %00000000 dta %11100111 dta %10000001 dta %10000001 dta %00000000 dta %00000000 dta %10000001 dta %10000001 dta %11100111 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 dta %00000000 sprdat3: dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11100111 dta %11100111 dta %11100111 dta %11100111 dta %11100111 dta %11100111 dta %11100111 dta %11100111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %01111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 dta %11111111 ;========================================================================== ;========================================================================== coltab: dta $1a dta $fa dta $ea dta $da dta $ca dta $ba dta $aa dta $9a dta $8a dta $7a dta $6a dta $5a dta $0E,$50 ;========================================================================== .proc BootSwapVectors ldx #vec_offsets_end-vec_offsets-1 loop: ldy vec_offsets,x lda $0200,y pha lda BootVectors,x sta $0200,y pla sta BootVectors,x dex bpl loop rts vec_offsets: dta vvblki-$0200 dta vvblki-$0200+1 dta vimirq-$0200 dta vimirq-$0200+1 dta vdslst-$0200 dta vdslst-$0200+1 dta sdlstl-$0200 dta sdlsth-$0200 dta pcolr0-$0200 dta pcolr1-$0200 dta pcolr2-$0200 dta pcolr3-$0200 dta color0-$0200 dta color1-$0200 dta color2-$0200 dta color3-$0200 dta color4-$0200 dta sdmctl-$0200 dta gprior-$0200 dta coldst-$0200 vec_offsets_end: .endp ;========================================================================== .proc BootDriveImage icl 'driveimage.inc' .endp ;========================================================================== ; Data relocated to RAM ; org $3000,*-$5000+$d000 BootRamDataStart = * BootVectors: BootVecVbi dta a(BootScreenVbi) BootVecIrq dta a(BootScreenIrq) BootVecDli dta a(BootScreenDli) BootVecDlist dta a(BootDlist) color_table: dta $00 dta $00 dta $02 dta $00 dta $08 dta $0C dta $02 dta $14 dta $50 dta $3d ;sdmctl dta $01 ;gprior dta $ff ;coldst, to force cold reboot if RESET pressed BootDlist: :4 dta $70 :8 dta $F0 ;drive image (40 lines x 32 bytes = $500 bytes dta $4E,a(playfield3) :6 dta $0E dta $8E :4 dta $0E,$0E,$0E,$0E,$0E,$0E,$0E,$8E dta $F0 dta $70 ;80-col text screen (2x 40 rows) dta $4F,a(playfield) pfadr = *-2 :7 dta $0F :8 dta $0F :8 dta $0F dta $70 :8 dta $0F :8 dta $0F dta $41,a(BootDlist) BootRamDataEnd = * ;========================================================================== ; Version block for emulator ; org $d7f8 _KERNELSTR_VERSION dta 0 org $d7ff dta 0 opt l-f- org $2000 playfield: org $2500 playfield2: org $2b00 missiles: org $2c00 player0: org $2d00 player1: org $2e00 player2: org $2f00 player3: org $3200 playfield3: opt l+ org $d800 atari800-5.0.0/emuos/src/cassette.s000066400000000000000000000175101425067567700170110ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Cassette tape support ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== .proc CassetteInit ;Set CBAUDL/CBAUDH to $05CC, the nominal POKEY divisor for 600 ;baud. We don't care about this, but it's documented in the OS ;Manual. mwa #$05CC cbaudl rts .endp ;========================================================================== ; Cassette open routine. ; ; XL/XE OS behavior notes: ; - Attempting to open for none (AUX1=$00) or read/write (AUX1=$0C) ; results in a Not Supported error (146). ; - Open for read gives one beep, while open for write gives two beeps. ; - Break will break out of the wait. ; - Ctrl+3 during the keypress causes an EOF error (!). This is a side ; effect of reusing the keyboard handler. ; ; CSOPIV behavior: ; - Does NOT set FTYPE (continuous mode flag). ; - Sets read mode (WMODE). ; - Does NOT require ICAX1Z or ICAX2Z to be set. ; CassetteOpenRead = CassetteOpen.do_open_read .proc CassetteOpen ;stash continuous mode flag lda icax2z ;!! FIRST TWO BYTES CHECKED BY ARCHON sta ftype ;check mode byte for read/write modes ldx #$80 lda icax1z and #$0c cmp #$04 ;read? beq found_read_mode cmp #$08 ;write? beq found_write_mode ;invalid mode -- return not supported rts do_open_read: found_read_mode: ldx #$00 found_write_mode: stx wmode ;set cassette buffer size to 128 bytes and mark it empty lda #$80 sta bptr sta blim ;clear EOF flag asl sta feof ;request one beep for read, or two for write bit wmode bpl one_ping_only asl bptr ;!! - set bptr=0 when starting write jsr CassetteBell one_ping_only: jsr CassetteBell ;wait for a key press jsr KeyboardGetByte bmi aborted ;need to set up POKEY for writes now to write leader bit wmode bpl no_write_init lda #$ff sta casflg jsr SIOSendEnable.no_irq_setup no_write_init: ;turn on motor (continuous mode or not) lda #$34 sta pactl ;wait for leader (9.6 seconds read, 19.2s write) ldx #0 bit wmode smi:ldx #1 jsr CassetteWait ;all done ldy #1 aborted: rts .endp ;========================================================================== .proc CassetteClose ;check if we are in write mode lda wmode ;!! FIRST TWO BYTES CHECKED BY ARCHON bpl notwrite ;check if we have data to write lda bptr beq nopartial ;flush partial record ($FA) jsr CassetteFlush nopartial: ;write EOF record ($FE) jsr CassetteFlush notwrite: ;stop the motor lda #$3c sta pactl ;kill audio ldy #0 sty audc1 sty audc2 sty audc4 ;all done iny rts .endp ;========================================================================== .proc CassetteGetByte ;check if we have an EOF condition lda feof ;!! FIRST TWO BYTES CHECKED BY ARCHON bne xit_eof fetchbyte: ;check if we can still fetch a byte ldx bptr cpx blim beq nobytes lda casbuf+3,x inc bptr ldy #1 rts nobytes: ;fetch more bytes jsr CassetteReadBlock bmi error ;check control byte lda casbuf+2 cmp #$fe bne noteofbyte ;found $FE (EOF) - set flag and return EOF sta feof xit_eof: ldy #CIOStatEndOfFile error: rts noteofbyte: ;reset buffer ptr mvx #0 bptr ;assume full block first (128 bytes) ldx #$80 ;check if it actually is one cmp #$fc bne not_full_block init_new_block: ;reset block length and loop back stx blim jmp fetchbyte not_full_block: ;check if we have a partial block cmp #$fa bne not_partial_block ;set length of partial block and the jump to init+loop ldx casbuf+130 bcs init_new_block not_partial_block: ;uh oh... bad control byte. ldy #CIOStatFatalDiskIO rts .endp ;========================================================================== .proc CassettePutByte ;put a byte into the buffer ldx bptr ;!! FIRST TWO BYTES CHECKED BY ARCHON sta casbuf+3,x ;bump and check if it's time to write inx stx bptr cpx blim bcs CassetteFlush ;all done ldy #1 rts .endp ;========================================================================== .proc CassetteFlush lda #0 ;set control byte based on buffer level ldx #$fe ;empty -> EOF ldy bptr ;get buffer level bne not_empty ;skip not empty ;clear buffer for EOF sta:rpl casbuf+3,y+ bmi is_empty ;!! - unconditional not_empty: ldx #$fc ;load complete code cpy blim ;check if buffer is full bcs is_complete ;skip if so ldx #$fa ;load partial code sty casbuf+130 ;store level in last byte is_complete: is_empty: ;store code stx casbuf+2 ;reset buffer level sta bptr ;setup sync bytes lda #$55 sta casbuf sta casbuf+1 ;issue write request and exit ldx #$80 ldy #'P' jmp CassetteDoIO .endp ;========================================================================== CassetteGetStatus = CIOExitSuccess CassetteSpecial = CIOExitNotSupported ;========================================================================== ; CassetteDoIO ; ; X = DSTATS value ; Y = SIO command byte ; ; Note that SOUNDR must take effect each time a cassette I/O operation ; occurs. ; CassetteDoIO = _CassetteDoIO.do_io CassetteReadBlock = _CassetteDoIO.read_block .proc _CassetteDoIO read_block: ldx #$40 ldy #'R' do_io: ;start the motor if not already running lda #$34 sta pactl ;set up SIO read/write stx dstats sty dcomnd mwa #casbuf dbuflo mwa #131 dbytlo mva #$60 ddevic mva #0 dunit mva ftype daux2 ;do it jsr siov ;check if we are in continuous mode (again) lda ftype bmi rolling_stop ;not in continuous mode -- wait for post-write tone if writing bit wmode bpl no_pwt ldx #6 jsr CassetteWait no_pwt: ;stop the motor lda #$3c sta pactl rolling_stop: ldy status rts .endp ;========================================================================== ;Entry: ; X = delay type ; CassetteWait = CassetteWaitLongShortCheck.normal_entry .proc CassetteWaitLongShortCheck bit daux2 spl:inx normal_entry: jsr SIOSetTimeoutVector ldy wait_table_lo,x lda wait_table_hi,x tax lda #1 sta timflg jsr VBISetVector lda:rne timflg rts wait_table_lo: dta <$0480 ;$00 - write file leader (19.2 seconds NTSC) dta <$0240 ;$01 - read leader delay (9.6 seconds NTSC) dta <$00B4 ;$02 - long pre-record write tone (3.0s NTSC) dta <$000F ;$03 - short pre-record write tone (0.25s NTSC) dta <$0078 ;$04 - long read IRG (2.0s NTSC) dta <$000A ;$05 - short read IRG (0.16s NTSC) dta <$003C ;$06 - post record gap (1s NTSC) wait_table_hi: dta >$0480 ;$00 - write file leader (19.2 seconds NTSC) dta >$0240 ;$01 - read leader delay (9.6 seconds NTSC) dta >$00B4 ;$02 - long pre-record write tone (3.0s NTSC) dta >$000F ;$03 - short pre-record write tone (0.25s NTSC) dta >$0078 ;$04 - long read IRG (2.0s NTSC) dta >$000A ;$05 - short read IRG (0.16s NTSC) dta >$003C ;$06 - post record gap (1s NTSC) .endp ;========================================================================== ; Sound a bell using the console speaker (cassette version) ; ; Modified: ; A, X, Y ; .proc CassetteBell ldy #0 tya soundloop: ldx #10 pha delay: lda vcount cmp:req vcount dex bne delay pla eor #$08 sta consol bne soundloop dey bne soundloop rts .endp atari800-5.0.0/emuos/src/cio.inc000066400000000000000000000041331425067567700162540ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Character Input/Output Definitions ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .ifndef f_CIO_INC .def f_CIO_INC CIOStatBreak = $80 ;break key abort CIOStatIOCBInUse = $81 ;IOCB in use CIOStatUnkDevice = $82 ;unknown device CIOStatWriteOnly = $83 ;opened for write only CIOStatInvalidCmd = $84 ;invalid command CIOStatNotOpen = $85 ;device or file not open CIOStatInvalidIOCB = $86 ;invalid IOCB number CIOStatReadOnly = $87 ;opened for read only CIOStatEndOfFile = $88 ;end of file reached CIOStatTruncRecord = $89 ;record truncated CIOStatTimeout = $8A ;device timeout CIOStatNAK = $8B ;device NAK CIOStatSerFrameErr = $8C ;serial bus framing error CIOStatCursorRange = $8D ;cursor out of range CIOStatSerOverrun = $8E ;serial frame overrun error CIOStatSerChecksum = $8F ;serial checksum error CIOStatDeviceDone = $90 ;device done error CIOStatBadScrnMode = $91 ;bad screen mode CIOStatNotSupported = $92 ;function not supported by handler CIOStatOutOfMemory = $93 ;not enough memory CIOStatDriveNumErr = $A0 ;disk drive # error CIOStatTooManyFiles = $A1 ;too many open disk files CIOStatDiskFull = $A2 ;disk full CIOStatFatalDiskIO = $A3 ;fatal disk I/O error CIOStatFileNumDiff = $A4 ;internal file # mismatch CIOStatFileNameErr = $A5 ;filename error CIOStatPointDLen = $A6 ;point data length error CIOStatFileLocked = $A7 ;file locked CIOStatInvDiskCmd = $A8 ;invalid command for disk CIOStatDirFull = $A9 ;directory full (64 files) CIOStatFileNotFound = $AA ;file not found CIOStatInvPoint = $AB ;invalid point CIOCmdOpen = $03 CIOCmdGetRecord = $05 CIOCmdGetChars = $07 CIOCmdPutRecord = $09 ; $0A ;PUT CHARS alias (required by K-Razy Shoot Out) CIOCmdPutChars = $0B CIOCmdClose = $0C CIOCmdGetStatus = $0D CIOCmdSpecial = $0E ;$0E and up is escape .endif atari800-5.0.0/emuos/src/cio.s000066400000000000000000000362211425067567700157500ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Character Input/Output Facility ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .proc CIOInit sec ldx #$70 iocb_loop: lda #$ff sta ichid,x jsr CIOSetPutByteClosed txa sbc #$10 tax bpl iocb_loop rts .endp ;============================================================================== ; Character I/O entry vector ; ; On entry: ; X = IOCB offset (# x 16) ; ; Returns: ; A = depends on operation ; X = IOCB offset (# x 16) ; Y = status (reflected in P) ; ; Notes: ; BUFADR must not be touched from CIO. DOS XE relies on this for ; temporary storage and breaks if it is modified. ; ; XL/XE mode notes: ; HNDLOD is always set to $00 afterward, per Sweet 16 supplement 3. ; ; CIO can optionally attempt a provisional open by doing a type 4 poll ; over the SIO bus. This happens unconditionally if HNDLOD is non-zero ; and only after the device is not found in HATABS if HNDLOD is zero. ; If this succeeds, the IOCB is provisionally opened. Type 4 polling ; ONLY happens for direct opens -- it does not happen for a soft open. ; .proc CIO ;stash IOCB offset (X) and acc (A) sta ciochr stx icidno jsr process xit: ;copy status back to IOCB ldx icidno tya sta icsta,x php .if _KERNEL_XLXE mva #0 hndlod .endif lda ciochr plp rts process: ;validate IOCB offset txa and #$8f beq validIOCB ;return invalid IOCB error ldy #CIOStatInvalidIOCB rts cmdInvalid: ;invalid command <$03 ldy #CIOStatInvalidCmd rts validIOCB: jsr CIOLoadZIOCB ;check if we're handling the OPEN command lda iccomz cmp #CIOCmdOpen beq cmdOpen bcc cmdInvalid ;check if the IOCB is open ldy ichidz .if !_KERNEL_XLXE bpl isOpen .else bmi not_open ;check for a provisionally open IOCB iny bpl isOpen ;okay, it's provisionally open... check if it's a close cmp #CIOCmdClose sne:jmp cmdCloseProvisional ;check if we're allowed to load a handler lda hndlod beq not_open ;try to load the handler jsr CIOLoadHandler bpl isOpen rts .endif not_open: ;IOCB isn't open - issue error ; ;Special cases; ; - No error issued for close ($0C). This is needed so that extra CLOSE ; commands from BASIC don't trip errors. ; - Get status ($0D) and special ($0E+) do soft open and close if needed. ; $0D case is required for Top Dos 1.5a to boot; $0E+ case is encountered ; with R: device XIO commands. ; ldy #1 lda iccomz cmp #CIOCmdClose beq ignoreOpen cmp #CIOCmdGetStatus bcs preOpen ;closed IOCB is OK for get status and special not_open_handler: ldy #CIOStatNotOpen ignoreOpen: rts preOpen: ;If the device is not open when a SPECIAL command is issued, parse the path ;and soft-open the device in the zero page IOCB. jsr CIOParsePath ;check for special command lda iccomz cmp #CIOCmdGetStatus beq cmdGetStatusSoftOpen cmp #CIOCmdSpecial bcs cmdSpecialSoftOpen isOpen: ldx iccomz cpx #CIOCmdSpecial scc:ldx #$0e ;do permissions check lda perm_check_table-4,x bmi skip_perm_check bit icax1z beq perm_check_fail skip_perm_check: ;load command table vector lda command_table_hi-4,x pha lda command_table_lo-4,x pha ;preload dispatch vector and dispatch to command ldy vector_preload_table-4,x load_vector: ldx ichidz mwa hatabs+1,x icax3z lda (icax3z),y tax dey lda (icax3z),y sta icax3z stx icax3z+1 ;many commands want to check length=0 on entry lda icbllz ora icblhz rts perm_check_fail: ;at this point we have A=$04 if we failed a get perm check, and A=$08 ;if we failed a put perm check -- these need to be translated to Y=$83 ;and Y=$87. clc adc #$7f tay rts ;-------------------------------------------------------------------------- cmdGetStatusSoftOpen: ldy #9 dta {bit $0100} cmdSpecialSoftOpen: ldy #11 invoke_and_soft_close_xit: jmp CIOInvoke ;-------------------------------------------------------------------------- ; Open command ($03). ; cmdOpen: ;check if the IOCB is already open ldy ichidz iny beq notAlreadyOpen ;IOCB is already open - error ldy #CIOStatIOCBInUse rts notAlreadyOpen: ;attempt to parse and open -- note that this will fail out directly ;on an unknown device or provisional open jsr CIOParsePath open_entry: ;request open ldy #1 jsr CIOInvoke ;move handler ID and device number to IOCB ldx icidno mva ichidz ichid,x mva icdnoz icdno,x tya bpl openOK rts openOK: ;copy PUT BYTE vector for Atari Basic ldx ichidz mwa hatabs+1,x icax3z ldy #6 lda (icax3z),y ldx icidno sta icptl,x iny lda (icax3z),y sta icpth,x ldy #1 rts cmdGetStatus = CIOInvoke.invoke_vector cmdSpecial: jsr CIOInvoke.invoke_vector ;need to copy AUX1/2 back for R: ldx icidno mva icax1z icax1,x mva icax2z icax2,x rts ;-------------------------------------------------------------------------- cmdGetRecord: ;check if buffer is full on entry beq cmdGetRecordBufferFull cmdGetRecordLoop: cmdGetRecordGetByte: ;fetch byte jsr CIOInvoke.invoke_vector cpy #0 bmi cmdGetRecordXit ;store byte (even if EOL) ldx #0 sta (icbalz,x) ;check for EOL eor #$9b cmp #1 ;increment buffer pointer and decrement length jsr advance_pointers ;skip buffer full check if we had an EOL bcc cmdGetRecordXit ;loop back for more bytes if buffer not full bne cmdGetRecordLoop cmdGetRecordBufferFull: ;read byte to discard jsr CIOInvoke.invoke_vector cpy #0 bmi cmdGetRecordXit ;continue if not EOL cmp #$9b bne cmdGetRecordBufferFull ;return truncated record ldy #CIOStatTruncRecord cmdGetRecordXit: cmdGetPutDone: ;update byte count in IOCB ldx icidno sec lda icbll,x sbc icbllz sta icbllz ;required by Lightspeed DOS sta icbll,x lda icblh,x sbc icblhz sta icblhz sta icblh,x ;NOMAM 2013 BASIC Ten-Liners disk requires ICBALZ to be untouched :P mwa icbal,x icbalz ;Pacem in Terris requires Y=1 exit. ;DOS 3.0 with 128K/XE mode requires Y=3 for EOF imminent. rts ;-------------------------------------------------------------------------- cmdGetChars: beq cmdGetCharsSingle cmdGetCharsLoop: jsr CIOInvoke.invoke_vector cpy #0 bmi cmdGetCharsError ldx #0 sta ciochr ;required by HOTEL title screen sta (icbalz,x) jsr advance_pointers bne cmdGetCharsLoop cmdGetCharsError: jmp cmdGetPutDone cmdGetCharsSingle: jsr CIOInvoke.invoke_vector sta ciochr rts ;-------------------------------------------------------------------------- ; PUT RECORD handler ($09) ; ; Exit: ; ICBAL/ICBAH: Not changed ; ICBLL/ICBLH: Number of bytes processed ; ; If the string does not contain an EOL character, one is printed at the ; end. Also, in this case CIOCHR must reflect the last character in the ; buffer and not the EOL. (Required by Atari DOS 2.5 RAMDISK banner) ; ; If length=0, the character in the A register is output without an EOL. ; This behavior is required by the graphics library for Mad Pascal. ; cmdPutRecord: beq cmdPutCharsSingle cmdPutRecordLoop: ldy #0 lda (icbalz),y jsr CIOInvoke.invoke_vector tya bmi cmdPutRecordError jsr advance_pointers beq cmdPutRecordEOL lda #$9b cmp ciochr beq cmdPutRecordDone bne cmdPutRecord cmdPutRecordEOL: lda #$9b jsr CIOInvoke.invoke_vector cmdPutRecordError: cmdPutRecordDone: jmp cmdGetPutDone ;-------------------------------------------------------------------------- cmdPutChars: beq cmdPutCharsSingle cmdPutCharsLoop: ldy #0 lda (icbalz),y jsr CIOInvoke.invoke_vector tya bmi cmdPutRecordError jsr advance_pointers bne cmdPutCharsLoop jmp cmdGetPutDone cmdPutCharsSingle: jmp CIOInvoke.invoke_vector_ciochr ;-------------------------------------------------------------------------- advance_pointers: inw icbalz dew icbllz sne:lda icblhz rts ;-------------------------------------------------------------------------- cmdClose: jsr CIOInvoke.invoke_vector cmdCloseProvisional: ldx icidno jsr CIOSetPutByteClosed mva #$ff ichid,x rts perm_check_table: dta $04 ;$04 (get record) dta $04 ;$05 (get record) dta $04 ;$06 (get chars) dta $04 ;$07 (get chars) dta $08 ;$08 (put record) dta $08 ;$09 (put record) dta $08 ;$0A (put chars) dta $08 ;$0B (put chars) dta $ff ;$0C (close) dta $ff ;$0D (get status) dta $ff ;$0E (special) vector_preload_table: dta $05 ;$04 (get record) dta $05 ;$05 (get record) dta $05 ;$06 (get chars) dta $05 ;$07 (get chars) dta $07 ;$08 (put record) dta $07 ;$09 (put record) dta $07 ;$0A (put chars) dta $07 ;$0B (put chars) dta $03 ;$0C (close) dta $09 ;$0D (get status) dta $0b ;$0E (special) command_table_lo: dta <(cmdGetRecord-1) ;$04 dta <(cmdGetRecord-1) ;$05 dta <(cmdGetChars-1) ;$06 dta <(cmdGetChars-1) ;$07 dta <(cmdPutRecord-1) ;$08 dta <(cmdPutRecord-1) ;$09 dta <(cmdPutChars-1) ;$0A dta <(cmdPutChars-1) ;$0B dta <(cmdClose-1) ;$0C dta <(cmdGetStatus-1) ;$0D dta <(cmdSpecial-1) ;$0E command_table_hi: dta >(cmdGetRecord-1) ;$04 dta >(cmdGetRecord-1) ;$05 dta >(cmdGetChars-1) ;$06 dta >(cmdGetChars-1) ;$07 dta >(cmdPutRecord-1) ;$08 dta >(cmdPutRecord-1) ;$09 dta >(cmdPutChars-1) ;$0A dta >(cmdPutChars-1) ;$0B dta >(cmdClose-1) ;$0C dta >(cmdGetStatus-1) ;$0D dta >(cmdSpecial-1) ;$0E .endp ;========================================================================== ; Invoke device vector. ; ; Entry (standard): ; A, X = ignored ; Y = offset to high vector byte in device table ; ; Entry (invoke_vector): ; A = byte to pass to PUT CHAR vector ; X, Y = ignored ; ; Exit: ; A = byte returned from GET CHAR vector ; Y = status ; .proc CIOInvoke jsr CIO.load_vector invoke_vector: sta ciochr invoke_vector_ciochr: lda icax3z+1 pha lda icax3z pha ldy #CIOStatNotSupported ldx icidno lda ciochr rts .endp ;========================================================================== ; Copy IOCB to ZIOCB. ; ; Entry: ; X = IOCB ; ; [OSManual p236] "Although both the outer level IOCB and the Zero-page ; IOCB are defined to be 16 bytes in size, only the first 12 bytes are ; moved by CIO." ; .proc CIOLoadZIOCB ;We used to do a trick here where we would count Y from $F4 to $00... ;but we can't do that because the 65C816 doesn't wrap abs,Y within ;bank 0 even in emulation mode. Argh! ldy #0 copyToZIOCB: lda ichid,x sta ziocb,y inx iny cpy #12 bne copyToZIOCB rts .endp ;========================================================================== .proc CIOParsePath ;default to device #1 ldx #1 ;pull first character of filename and stash it lda (icbalz-1,x) sta icax4z ;Check for a device number. ; ; - D1:-D9: is supported. D0: also gives unit 1, and any digits beyond ; the first are ignored. ; ; We don't validate the colon anymore -- Atari OS allows opening just "C" to get ; to the cassette. ; ldy #1 lda (icbalz),y sec sbc #'0' beq nodevnum cmp #10 bcs nodevnum tax iny nodevnum: stx icdnoz .if _KERNEL_XLXE ;check if we are doing a true open and if we should do a type 4 poll lda iccomz cmp #CIOCmdOpen bne skip_poll ;clear DVSTAT+0/+1 to indicate no poll lda #0 sta dvstat sta dvstat+1 ;check if we should do an unconditional poll (HNDLOD nonzero). lda hndlod bne unconditional_poll ;search handler table jsr CIOFindHandler beq found unconditional_poll: ;do type 4 poll jsr CIOPollForDevice bmi unknown_device ;mark provisionally open ldx icidno mva #$7f ichid,x mva icax4z icax3,x mva dvstat+2 icax4,x mwa #CIOPutByteLoadHandler-1 icptl,x mva icdnoz icdno,x ;do direct exit, bypassing regular open path pla pla ldy #1 rts skip_poll: .endif ;search handler table jsr CIOFindHandler beq found unknown_device: ;return unknown device error ldy #CIOStatUnkDevice pla pla found: rts .endp ;========================================================================== .proc CIOSetPutByteClosed lda #<[CIO.not_open_handler-1] sta icptl,x lda #>[CIO.not_open_handler-1] sta icpth,x rts .endp ;========================================================================== ; Attempt to find a handler entry in HATABS. ; .proc CIOFindHandler ;search for handler lda icax4z ldx #11*3 findHandler: cmp hatabs,x beq foundHandler dex dex dex bpl findHandler foundHandler: ;store handler ID stx ichidz rts .endp ;========================================================================== ; Poll SIO bus for CIO device ; ; Issues a type 4 poll ($4F/$40/devname/devnumber). ; .if _KERNEL_XLXE .proc CIOPollForDevice lda icax4z sta daux1 lda icdnoz sta daux2 ldx #9 mva:rpl cmd_tab,x ddevic,x- jmp siov cmd_tab: dta $4f ;device dta $01 ;unit dta $40 ;command dta $40 ;status (transfer flags) dta dvstat ;dbufhi dta $40 ;dtimlo dta $00 ;unused dta $04 ;dbytlo dta $00 ;dbythi .endp .endif ;========================================================================== ; Load handler for a provisionally open IOCB. ; .if _KERNEL_XLXE .proc CIOLoadHandler ;load handler over SIO bus mwa dvstat+2 loadad ldx icidno mva icax4,x ddevic jsr PHLoadHandler bcs fail ;let's see if we can look up the handler now ldx icidno mva icax3,x icax4z jsr CIOFindHandler bne fail ;follow through with open jsr CIO.open_entry bpl ok fail: ldy #CIOStatUnkDevice ok: rts .endp .endif ;========================================================================== ; PUT BYTE handler for provisionally open IOCBs. ; ; This handler is used when an IOCB has been provisionally opened pending ; a handler load over the SIO bus. It is used when a direct call is made ; through ICPTL/ICPTH. If HNDLOD=0, the call fails as handler loading is ; not set up; if it is nonzero, the handler is loaded over the SIO bus and ; then the PUT BYTE call continues if everything is good. ; .if _KERNEL_XLXE .proc CIOPutByteLoadHandler ;save off A/X sta ciochr stx icidno ;check if we're allowed to load a handler and bail if not lda hndlod beq load_error ;copy IOCB to ZIOCB jsr CIOLoadZIOCB ;try to load the handler jsr CIOLoadHandler bmi load_error ;all good... let's invoke the standard handler ldy #7 jsr CIOInvoke jmp xit load_error: ldy #CIOStatUnkDevice xit: php lda ciochr ldx icidno plp rts .endp .endif atari800-5.0.0/emuos/src/cio816.s000066400000000000000000000365251425067567700162160ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 Character Input/Output Facility ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .proc CIOInit sec ldx #$70 iocb_loop: lda #$ff sta ichid,x jsr CIOSetPutByteClosed txa sbc #$10 tax bpl iocb_loop rts .endp ;============================================================================== ; Character I/O entry vector ; ; On entry: ; X = IOCB offset (# x 16) ; ; Returns: ; A = depends on operation ; X = IOCB offset (# x 16) ; Y = status (reflected in P) ; ; Notes: ; BUFADR must not be touched from CIO. DOS XE relies on this for ; temporary storage and breaks if it is modified. ; ; XL/XE mode notes: ; HNDLOD is always set to $00 afterward, per Sweet 16 supplement 3. ; ; CIO can optionally attempt a provisional open by doing a type 4 poll ; over the SIO bus. This happens unconditionally if HNDLOD is non-zero ; and only after the device is not found in HATABS if HNDLOD is zero. ; If this succeeds, the IOCB is provisionally opened. Type 4 polling ; ONLY happens for direct opens -- it does not happen for a soft open. ; .proc CIO ;stash IOCB offset (X) and acc (A) sta ciochr stx icidno jsr process xit: ;copy status back to IOCB ldx icidno tya sta icsta,x php stz hndlod lda ciochr plp rts process: ;validate IOCB offset txa bit #$8f beq validIOCB ;check if it's the special X=$FF used by 816os for first unused ;IOCB inc bne iocb_invalid ;find first unused IOCB lda #0 clc iocb_search_loop: tax ldy ichid,x bmi found_iocb adc #$10 bpl iocb_search_loop iocb_invalid: ;return invalid IOCB error ldy #CIOStatInvalidIOCB rts cmdInvalid: ;invalid command <$03 ldy #CIOStatInvalidCmd rts found_iocb: stx icidno ldy #1 rts validIOCB: jsr CIOLoadZIOCB ;check if we're handling the OPEN command lda iccomz cmp #CIOCmdOpen beq cmdOpen bcc cmdInvalid ;check if the IOCB is open ldy ichidz bmi not_open ;check for a provisionally open IOCB iny bpl isOpen ;okay, it's provisionally open... check if it's a close cmp #CIOCmdClose sne:jmp cmdCloseProvisional ;check if we're allowed to load a handler lda hndlod beq not_open ;try to load the handler jsr CIOLoadHandler bpl isOpen rts not_open: ;IOCB isn't open - issue error ; ;Special cases; ; - No error issued for close ($0C). This is needed so that extra CLOSE ; commands from BASIC don't trip errors. ; - Get status ($0D) and special ($0E+) do soft open and close if needed. ; $0D case is required for Top Dos 1.5a to boot; $0E+ case is encountered ; with R: device XIO commands. ; ldy #1 lda iccomz cmp #CIOCmdClose beq ignoreOpen cmp #CIOCmdGetStatus bcs preOpen ;closed IOCB is OK for get status and special not_open_handler: ldy #CIOStatNotOpen ignoreOpen: rts preOpen: ;If the device is not open when a SPECIAL command is issued, parse the path ;and soft-open the device in the zero page IOCB. jsr CIOParsePath ;check for special command lda iccomz cmp #CIOCmdGetStatus beq cmdGetStatusSoftOpen cmp #CIOCmdSpecial bcs cmdSpecialSoftOpen isOpen: ldx iccomz cpx #CIOCmdSpecial scc:ldx #$0e ;do permissions check lda perm_check_table-4,x bmi skip_perm_check bit icax1z beq perm_check_fail skip_perm_check: ;load command table vector lda command_table_hi-4,x pha lda command_table_lo-4,x pha ;preload dispatch vector and dispatch to command ldy vector_preload_table-4,x load_vector: ldx ichidz mwa hatabs+1,x icax3z lda (icax3z),y tax dey lda (icax3z),y sta icax3z stx icax3z+1 ;many commands want to check length=0 on entry lda icbllz ora icblhz rts perm_check_fail: ;at this point we have A=$04 if we failed a get perm check, and A=$08 ;if we failed a put perm check -- these need to be translated to Y=$83 ;and Y=$87. clc adc #$7f tay rts ;-------------------------------------------------------------------------- cmdGetStatusSoftOpen: ldy #9 dta {bit $0100} cmdSpecialSoftOpen: ldy #11 invoke_and_soft_close_xit: jmp CIOInvoke ;-------------------------------------------------------------------------- ; Open command ($03). ; cmdOpen: ;check if the IOCB is already open ldy ichidz iny beq notAlreadyOpen ;IOCB is already open - error ldy #CIOStatIOCBInUse rts notAlreadyOpen: ;attempt to parse and open -- note that this will fail out directly ;on an unknown device or provisional open jsr CIOParsePath open_entry: ;request open ldy #1 jsr CIOInvoke ;move handler ID and device number to IOCB ldx icidno mva ichidz ichid,x mva icdnoz icdno,x tya bpl openOK rts openOK: ;copy PUT BYTE vector for Atari Basic ldx ichidz mwa hatabs+1,x icax3z ldy #6 lda (icax3z),y ldx icidno sta icptl,x iny lda (icax3z),y sta icpth,x ldy #1 rts cmdGetStatus = CIOInvoke.invoke_vector cmdSpecial: jsr CIOInvoke.invoke_vector ;need to copy AUX1/2 back for R: ldx icidno mva icax1z icax1,x mva icax2z icax2,x rts ;-------------------------------------------------------------------------- cmdGetRecord: ;check if buffer is full on entry beq cmdGetRecordBufferFull cmdGetRecordLoop: cmdGetRecordGetByte: ;fetch byte jsr CIOInvoke.invoke_vector cpy #0 bmi cmdGetRecordXit ;store byte (even if EOL) ldx #0 sta (icbalz,x) ;check for EOL eor #$9b cmp #1 ;increment buffer pointer and decrement length jsr advance_pointers ;skip buffer full check if we had an EOL bcc cmdGetRecordXit ;loop back for more bytes if buffer not full bne cmdGetRecordLoop cmdGetRecordBufferFull: ;read byte to discard jsr CIOInvoke.invoke_vector cpy #0 bmi cmdGetRecordXit ;continue if not EOL cmp #$9b bne cmdGetRecordBufferFull ;return truncated record ldy #CIOStatTruncRecord cmdGetRecordXit: cmdGetPutDone: ;update byte count in IOCB ldx icidno sec lda icbll,x sbc icbllz sta icbll,x lda icblh,x sbc icblhz sta icblh,x ;NOMAM 2013 BASIC Ten-Liners disk requires ICBALZ to be untouched :P mwa icbal,x icbalz ;Pacem in Terris requires Y=1 exit. ;DOS 3.0 with 128K/XE mode requires Y=3 for EOF imminent. rts ;-------------------------------------------------------------------------- cmdGetChars: beq cmdGetCharsSingle cmdGetCharsLoop: jsr CIOInvoke.invoke_vector cpy #0 bmi cmdGetCharsError ldx #0 sta ciochr ;required by HOTEL title screen sta (icbalz,x) jsr advance_pointers bne cmdGetCharsLoop cmdGetCharsError: jmp cmdGetPutDone cmdGetCharsSingle: jsr CIOInvoke.invoke_vector sta ciochr rts ;-------------------------------------------------------------------------- ; PUT RECORD handler ($09) ; ; Exit: ; ICBAL/ICBAH: Not changed ; ICBLL/ICBLH: Number of bytes processed ; ; If the string does not contain an EOL character, one is printed at the ; end. Also, in this case CIOCHR must reflect the last character in the ; buffer and not the EOL. (Required by Atari DOS 2.5 RAMDISK banner) ; ; If length=0, the character in the A register is output without an EOL. ; This behavior is required by the graphics library for Mad Pascal. ; cmdPutRecord: beq cmdPutCharsSingle cmdPutRecordLoop: ldy #0 lda (icbalz),y jsr CIOInvoke.invoke_vector tya bmi cmdPutRecordError jsr advance_pointers beq cmdPutRecordEOL lda #$9b cmp ciochr beq cmdPutRecordDone bne cmdPutRecord cmdPutRecordEOL: lda #$9b jsr CIOInvoke.invoke_vector cmdPutRecordError: cmdPutRecordDone: jmp cmdGetPutDone ;-------------------------------------------------------------------------- cmdPutChars: beq cmdPutCharsSingle cmdPutCharsLoop: ldy #0 lda (icbalz),y jsr CIOInvoke.invoke_vector tya bmi cmdPutRecordError jsr advance_pointers bne cmdPutCharsLoop jmp cmdGetPutDone cmdPutCharsSingle: jmp CIOInvoke.invoke_vector_ciochr ;-------------------------------------------------------------------------- advance_pointers: inw icbalz dew icbllz sne:lda icblhz rts ;-------------------------------------------------------------------------- cmdClose: jsr CIOInvoke.invoke_vector cmdCloseProvisional: ldx icidno jsr CIOSetPutByteClosed mva #$ff ichid,x rts perm_check_table: dta $04 ;$04 (get record) dta $04 ;$05 (get record) dta $04 ;$06 (get chars) dta $04 ;$07 (get chars) dta $08 ;$08 (put record) dta $08 ;$09 (put record) dta $08 ;$0A (put chars) dta $08 ;$0B (put chars) dta $ff ;$0C (close) dta $ff ;$0D (get status) dta $ff ;$0E (special) vector_preload_table: dta $05 ;$04 (get record) dta $05 ;$05 (get record) dta $05 ;$06 (get chars) dta $05 ;$07 (get chars) dta $07 ;$08 (put record) dta $07 ;$09 (put record) dta $07 ;$0A (put chars) dta $07 ;$0B (put chars) dta $03 ;$0C (close) dta $09 ;$0D (get status) dta $0b ;$0E (special) command_table_lo: dta <(cmdGetRecord-1) ;$04 dta <(cmdGetRecord-1) ;$05 dta <(cmdGetChars-1) ;$06 dta <(cmdGetChars-1) ;$07 dta <(cmdPutRecord-1) ;$08 dta <(cmdPutRecord-1) ;$09 dta <(cmdPutChars-1) ;$0A dta <(cmdPutChars-1) ;$0B dta <(cmdClose-1) ;$0C dta <(cmdGetStatus-1) ;$0D dta <(cmdSpecial-1) ;$0E command_table_hi: dta >(cmdGetRecord-1) ;$04 dta >(cmdGetRecord-1) ;$05 dta >(cmdGetChars-1) ;$06 dta >(cmdGetChars-1) ;$07 dta >(cmdPutRecord-1) ;$08 dta >(cmdPutRecord-1) ;$09 dta >(cmdPutChars-1) ;$0A dta >(cmdPutChars-1) ;$0B dta >(cmdClose-1) ;$0C dta >(cmdGetStatus-1) ;$0D dta >(cmdSpecial-1) ;$0E .endp ;========================================================================== ; Invoke device vector. ; ; Entry (standard): ; A, X = ignored ; Y = offset to high vector byte in device table ; ; Entry (invoke_vector): ; A = byte to pass to PUT CHAR vector ; X, Y = ignored ; ; Exit: ; A = byte returned from GET CHAR vector ; Y = status ; .proc CIOInvoke jsr CIO.load_vector invoke_vector: sta ciochr invoke_vector_ciochr: lda icax3z+1 pha lda icax3z pha ldy #CIOStatNotSupported ldx icidno lda ciochr rts .endp ;========================================================================== ; Copy IOCB to ZIOCB. ; ; Entry: ; X = IOCB ; ; [OSManual p236] "Although both the outer level IOCB and the Zero-page ; IOCB are defined to be 16 bytes in size, only the first 12 bytes are ; moved by CIO." ; .proc CIOLoadZIOCB ;We used to do a trick here where we would count Y from $F4 to $00... ;but we can't do that because the 65C816 doesn't wrap abs,Y within ;bank 0 even in emulation mode. Argh! ldy #0 copyToZIOCB: lda ichid,x sta ziocb,y inx iny cpy #12 bne copyToZIOCB rts .endp ;========================================================================== .proc CIOParsePath ;default to device #1 ldx #1 ;pull first character of filename and stash it lda (icbalz-1,x) sta icax4z ;Check for a device number. ; ; - D1:-D9: is supported. D0: also gives unit 1, and any digits beyond ; the first are ignored. ; ; We don't validate the colon anymore -- Atari OS allows opening just "C" to get ; to the cassette. ; ldy #1 lda (icbalz),y sec sbc #'0' beq nodevnum cmp #10 bcs nodevnum tax iny nodevnum: stx icdnoz .if _KERNEL_XLXE ;check if we are doing a true open and if we should do a type 4 poll lda iccomz cmp #CIOCmdOpen bne skip_poll ;clear DVSTAT+0/+1 to indicate no poll lda #0 sta dvstat sta dvstat+1 ;check if we should do an unconditional poll (HNDLOD nonzero). lda hndlod bne unconditional_poll ;search handler table jsr CIOFindHandler beq found unconditional_poll: ;do type 4 poll jsr CIOPollForDevice bmi unknown_device ;mark provisionally open ldx icidno mva #$7f ichid,x mva icax4z icax3,x mva dvstat+2 icax4,x mwa #CIOPutByteLoadHandler-1 icptl,x mva icdnoz icdno,x ;do direct exit, bypassing regular open path pla pla ldy #1 rts skip_poll: .endif ;search handler table jsr CIOFindHandler beq found unknown_device: ;return unknown device error ldy #CIOStatUnkDevice pla pla found: rts .endp ;========================================================================== .proc CIOSetPutByteClosed lda #<[CIO.not_open_handler-1] sta icptl,x lda #>[CIO.not_open_handler-1] sta icpth,x rts .endp ;========================================================================== ; Attempt to find a handler entry in HATABS. ; .proc CIOFindHandler ;search for handler lda icax4z ldx #11*3 findHandler: cmp hatabs,x beq foundHandler dex dex dex bpl findHandler foundHandler: ;store handler ID stx ichidz rts .endp ;========================================================================== ; Poll SIO bus for CIO device ; ; Issues a type 4 poll ($4F/$40/devname/devnumber). ; .if _KERNEL_XLXE .proc CIOPollForDevice lda icax4z sta daux1 lda icdnoz sta daux2 ldx #9 mva:rpl cmd_tab,x ddevic,x- jmp siov cmd_tab: dta $4f ;device dta $01 ;unit dta $40 ;command dta $40 ;status (transfer flags) dta dvstat ;dbufhi dta $40 ;dtimlo dta $00 ;unused dta $04 ;dbytlo dta $00 ;dbythi .endp .endif ;========================================================================== ; Load handler for a provisionally open IOCB. ; .if _KERNEL_XLXE .proc CIOLoadHandler ;load handler over SIO bus mwa dvstat+2 loadad ldx icidno mva icax4,x ddevic jsr PHLoadHandler bcs fail ;let's see if we can look up the handler now ldx icidno mva icax3,x icax4z jsr CIOFindHandler bne fail ;follow through with open jsr CIO.open_entry bpl ok fail: ldy #CIOStatUnkDevice ok: rts .endp .endif ;========================================================================== ; PUT BYTE handler for provisionally open IOCBs. ; ; This handler is used when an IOCB has been provisionally opened pending ; a handler load over the SIO bus. It is used when a direct call is made ; through ICPTL/ICPTH. If HNDLOD=0, the call fails as handler loading is ; not set up; if it is nonzero, the handler is loaded over the SIO bus and ; then the PUT BYTE call continues if everything is good. ; .if _KERNEL_XLXE .proc CIOPutByteLoadHandler ;save off A/X sta ciochr stx icidno ;check if we're allowed to load a handler and bail if not lda hndlod beq load_error ;copy IOCB to ZIOCB jsr CIOLoadZIOCB ;try to load the handler jsr CIOLoadHandler bmi load_error ;all good... let's invoke the standard handler ldy #7 jsr CIOInvoke jmp xit load_error: ldy #CIOStatUnkDevice xit: php lda ciochr ldx icidno plp rts .endp .endif atari800-5.0.0/emuos/src/disk.s000066400000000000000000000037161425067567700161330ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Disk Routines ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .proc DiskInit .if _KERNEL_XLXE ;set disk sector size to 128 bytes mwa #$80 dsctln .endif rts .endp ;========================================================================== ; Disk handler routine (pointed to by DSKINV) ; ; Exit: ; A = command byte (undocumented; required by Pooyan) ; Y = status ; N = 1 if error, 0 if success (high bit of Y) ; C = 1 if command is >=$21 (undocumented; required by Arcade Machine) ; .proc DiskHandler mva #$31 ddevic mva #$0f dtimlo ;check for status command lda dcomnd sta ccomnd cmp #$53 bne notStatus lda #dvstat sta dbufhi asl ;hack to save a byte to get $04 since >dvstat is $02 sta dbytlo lda #0 sta dbythi jsr do_read bmi xit ;update format timeout mvx dvstat+2 dsktim tax xit: rts notStatus: ;set disk sector length .if _KERNEL_XLXE mwy dsctln dbytlo .else mwy #$80 dbytlo .endif ;check for put/write .if _KERNEL_XLXE cmp #$50 beq do_write .endif cmp #$57 beq do_write ;check for format, or else assume it's a read command ($52) or similar cmp #$21 bne do_read ;it's format... use the format timeout mva dsktim dtimlo do_read: lda #$40 do_io: sta dstats jsr siov ;load disk command back into A (required by Pooyan) ;emulate compare against format command (required by Arcade Machine) ;sort-of emulate compare against status (required by Micropainter) lda dcomnd cpy #0 ;!! Atari800WinPlus's SIO patch doesn't set STATUS sec rts do_write: lda #$80 bne do_io .endp atari800-5.0.0/emuos/src/driveimage.inc000066400000000000000000000125641425067567700176250ustar00rootroot00000000000000;Made from driveimage.bmp using driveimageconv.cpp dta %00000000,%00000000,%00000000,%00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000,%00000000,%00000000,%00000000 dta %00000010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101000,%00000000 dta %00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000 dta %00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000 dta %00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000 dta %00001010,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01011010,%00000000 dta %00101010,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01011010,%10000000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10000000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10000000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10000000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10000000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10100101,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010101,%10100000 dta %10100101,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010101,%10100000 dta %10100101,%01010101,%01010111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11010101,%10100000 dta %10100101,%01010101,%01010111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11010101,%10100000 dta %10100101,%01010101,%01010111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11111111,%11010101,%10100000 dta %10100101,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010101,%10100000 dta %10100101,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010101,%10100000 dta %10100101,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010101,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %10101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10100000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%11111111,%11111111,%01010101,%01010101,%01010101,%01010110,%10000000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010110,%10000000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010110,%10000000 dta %00101001,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010110,%10000000 dta %00101010,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01011010,%10000000 dta %00001010,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101,%01011010,%00000000 dta %00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000 dta %00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000 dta %00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000 dta %00000010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101000,%00000000 dta %00000000,%00000000,%00000000,%00001010,%10101010,%10101010,%10101010,%10101010,%10101010,%00000000,%00000000,%00000000,%00000000 atari800-5.0.0/emuos/src/editor.s000066400000000000000000000575671425067567700165040ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Editor Handler ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== .proc EditorOpen jsr ScreenResetLogicalLineMap stx dspflg ;!! relies on X=0 from ScreenResetLogicalLineMap stx escflg ;we must force mode 0 here -- ACTION calls this with $0C in AUX2 and ;expects mode 0 to be set jmp ScreenOpenMode0 .endp ;========================================================================== EditorClose = ScreenClose ;========================================================================== ; ; === Forced read mode === ; ; If bit 0 if AUX1 is set on the IOCB, it means to read in forced read ; mode. In forced read mode, no keyboard input is fetched and instead ; line read immediately commences, as if ENTER were pressed. ; ; Note that since AUX1 is tested on the IOCB used, it is possible to have ; E: open on more than one IOCB with different forced read modes. ; .proc EditorGetByte ;check if we have anything left in the current line lda bufcnt bne have_line ;nope, fetch a line jsr EditorGetLine bpl have_line rts have_line: ;swap to text context jsr EditorSwapToText ;subtract off a char dec bufcnt ;check if we're at the EOL bne have_char ;yes, we're at the EOL -- print it and return it (this will re-enable ;the cursor, too) lda #$9b jsr ScreenPutByte lda #$9b bne done have_char: ;read a char from the screen jsr ScreenGetByte done: jmp EditorSwapToScreen .endp ;========================================================================== ; This behavior is quite complex: ; - The editor remembers the cursor position within the initial logical ; line. Only contents beyond the initial position are returned. This ; is true even if the cursor is moved out of the logical line and back ; in again. ; - Margins are not included. ; - Trailing spaces at the end of a logical line are not returned even ; if the cursor is after them. ; - If the cursor is moved to another logical line, that logical line is ; read instead. There is no memory of the line start for previous ; logical lines, so if there was a prompt on that line it will be ; picked up too. ; - If the logical line length is exceeded, a beep sounds near the end ; and after three lines (120ch) the logical line is terminated and a ; new logical line is started. However, the previous logical line that ; was overflowed is still returned. This still happens if the new ; logical line extends to more than one physical line or even if ; itself overflows (!). If the physical line is changed with up/down, ; this memory is lost, but left/right don't do this. ; - If a logical line extends exactly to the end of a physical line, an ; extra blank line is printed on EOL. ; - If a logical line extends exactly to the end of the screen, a cursor ; out of bounds error results. (We currently do not implement this... ; feature.) ; ; === The BUFSTR variable === ; ; The BUFSTR variable is critical to the way that the get line algorithm ; works. It actually consists of two bytes, the row followed by the column ; of the origin of the line to be read. This is updated whenever a read ; request arrives that starts a new line or whenever the cursor is moved ; to a different logical line. This is how the screen editor knows to ; read at the end of a prompt or from a different line that you have moved ; to, and how it tracks that when scrolling occurs. It does not, however, ; get updated when regular characters are typed, even when spilling to a ; new logical line. ; ; === BUFCNT === ; ; BUFCNT contains the number of characters left to return before we have ; to get a new line: $00 means we will wait for keys, $01 is the EOL, and ; >$01 returns a typed character. We need to follow this convention or ; else the combination of S_VBXE.SYS + CON.SYS /E from SDX 4.46 acts ; strangely on launch. ; .proc EditorGetLine _start_x equ bufstr+1 _start_y equ bufstr ;Set line buffer start to current position (NOT the start of the logical ;line -- this is a special case). jsr EditorSwapToText mva colcrs _start_x mva rowcrs _start_y jsr EditorSwapToScreen ;check if forced read is enabled on the IOCB -- if so, assume we've gotten ;an EOL lda icax1z lsr bcs do_eol read_loop: ;get a character jsr KeyboardGetByte bpl read_ok read_error: rts read_ok: cmp #$9b beq is_eol ;echo the character jsr EditorPutByte bmi read_error ;check if we've hit the warning point (logical pos 113) lda colcrs cmp #33 bne read_loop ;convert current row to logical start row jsr EditorGetCurLogicalRow ;check if we're on the third row clc adc #2 cmp rowcrs ;if so, sound the bell bne read_loop jsr EditorBell jmp read_loop do_eol: lda #$9b is_eol: ;echo the character jsr EditorPutByte bmi read_error ;swap to text screen context jsr EditorSwapToText ;hide the cursor so we can scan text properly jsr ScreenHideCursor ;compute address ldx #0 stx logcol ldy _start_y sty rowcrs jsr ScreenComputeToAddr ldy _start_x char_loop: inc logcol lda (toadr),y beq blank mva logcol bufcnt blank: cpy rmargn iny bcc char_loop jsr EditorNextLineAddr ;check if we're at the bottom of the screen inc rowcrs lda rowcrs cmp botscr bcs scan_scroll ;check if we're at the end of the logical line jsr EditorTestLogicalLineBit bne scan_done ldy lmargn jmp char_loop scan_scroll: ;we're below the screen... need to scroll up jsr EditorDeleteLine0 scan_done: ;adjust BUFCNT so it is the number of chars to read (scanned + EOL) inc bufcnt ;mark this as the start of a new logical line, trimming off any extra ;blank lines lda rowcrs jsr EditorGetLogicalLineInfo ora logmap,y sta logmap,y ;reset cursor to line start, but leave the cursor off mvx _start_x colcrs mvy _start_y rowcrs ;swap back to main context and exit successfully jmp EditorSwapToScreen_Y1 .endp ;========================================================================== ; This routine must NOT write BUFADR -- doing so breaks the DLT flasher. ; ; Behavior notes: ; - Ctrl+1 (suspend display) does not affect control codes handled only ; by E:. In particular, EOL, move up/down/left/right, ESC, insert, and ; delete are not affected by it. CLEAR on the other hand, is, because ; it's handled by S:. ; .proc EditorPutByte ;open the text screen if it is not open already ldy dindex beq screenok ldy botscr cpy #4 beq screenok pha jsr ScreenOpenGr0 pla screenok: ;swap to text context jsr EditorSwapToText ;hide the cursor -- this must be done before we suspend display on ;Ctrl+1. jsr ScreenHideCursor ;save off character to free up acc tay ;Check if [esc] is active ; ;Note that the ASL trick relies on ESCFLG being $80 when set; this ;is in fact guaranteed by the spec in the OS Manual, Appendix L, B26. ; asl escflg ;test and clear escape flag bcs not_special ;check if this might be a special character and #$1f cmp #$1b bcc not_special ;might be special, but not EOL... search the special char table ldx #special_code_tab_end-special_code_tab-1 tya jsr EditorIsSpecial bne not_special special_found: ;check if display of control codes is desired; if so, we need to ignore this lda dspflg bne not_special ;jump to routine jsr dispatch jsr EditorRecomputeCursorAddr jsr ScreenShowCursorAndXitOK bpl xit2 ;!! - unconditional jump not_special: ;ok, just put the char to the screen sty atachr jsr ScreenPutByte.not_clear xit2: ;swap back to main context and exit lda atachr ;required by Monkey Wrench II jmp EditorSwapToScreen ;--------------- special_code_tab: dta $1b dta $1c dta $1d dta $1e dta $1f dta $7d dta $7e dta $7f dta $9c dta $9d dta $9e dta $9f dta $fd dta $fe dta $ff special_code_tab_end: dta $9b ;these are only for the K: check dta $7c special_code_tab_end_2: ;---------------- special_dispatch_lo_tab: dta <(special_escape-1) dta <(special_up-1) dta <(special_down-1) dta <(special_left-1) dta <(special_right-1) dta <(special_clear-1) dta <(special_backspace-1) dta <(special_tab-1) dta <(special_delete_line-1) dta <(special_insert_line-1) dta <(special_clear_tab-1) dta <(special_set_tab-1) dta <(special_bell-1) dta <(special_delete_char-1) dta <(special_insert_char-1) .if [((special_escape-1)^(special_insert_char-1))&$ff00] .error 'Special character routines cross a page boundary: ',special_escape,'-',special_insert_char .endif ;--------------- special_escape: mva #$80 escflg rts ;--------------- special_clear: jmp ScreenClear ;--------------- special_up: ldx rowcrs bne isup2 ldx botscr isup2: dex bpl vmoveexit ;--------------- special_down: ldx rowcrs inx cpx botscr scc:ldx #0 vmoveexit: stx rowcrs ;check if we have moved into a different logical line -- if so, ;we need to reset the read row txa jsr EditorPhysToLogicalRow cmp bufstr beq moveexit ;we switched rows -- reset read row sta bufstr mva lmargn bufstr+1 moveexit: rts ;--------------- special_backspace: ;check if we are at the left column lda lmargn cmp colcrs bcs sbks_wrap ;nope, we can just back up dec colcrs ;recompute pos and clear character sbks_recomp: jsr EditorRecomputeCursorAddr ldy #0 tya sta (oldadr),y sbks_xit: rts sbks_wrap: ;check if we're at the start of the logical line lda rowcrs jsr EditorTestLogicalLineBit bne sbks_xit ;no, so we need to wrap to the right column of the prev line... dec rowcrs lda rmargn sta colcrs ;recompute everything and exit jmp sbks_recomp ;---------------- special_bell: jmp EditorBell ;---------------- special_set_tab: jsr special_common_tab ora tabmap,x bne special_common_exit_tab special_clear_tab: jsr special_common_tab eor #$ff and tabmap,x special_common_exit_tab: sta tabmap,x rts special_common_tab: jsr EditorGetLogicalColumn tay jmp EditorSetupTabIndex ;-------------------------------------------------------------------------- ; Tab behavior: ; - Moves cursor to the next tab position within the logical line. ; - If there are no more tabs, moves cursor to beginning of next line. ; This may cause a scroll. ; - Tab does NOT adjust the read row. ; special_tab: jsr EditorGetLogicalColumn tay txa sec adc rowcrs sta rowcrs ;scan forward until we find the next bit set, or we hit position 120 tab_scan_loop: iny cpy #120 bcs tab_found jsr EditorSetupTabIndex and tabmap,x beq tab_scan_loop tab_found: sty colcrs tab_adjust_row: lda colcrs sec sbc #40 ;subtract a row worth of columns bcc tab_adjust_done ;exit if <40 sta colcrs inc rowcrs ;next row lda rowcrs ; cmp botscr ;check if we're below the screen bcs tab_adjust_scroll ;if so, do a scroll jsr EditorTestLogicalLineBit ;check if we're on a new log line beq tab_adjust_row ;if not, keep adjusting bpl tab_adjust_left ;position at beginning of new line tab_adjust_scroll: jsr EditorDeleteLine0 tab_adjust_left: hmove_to_lmargn: ;move to left margin ldx lmargn hmove_to_x: stx colcrs tab_adjust_done: rts ;-------------------------------------------------------------------------- special_left: ldx colcrs beq slft_to_right dex cpx lmargn bcs hmove_to_x ;move to right margin slft_to_right: ldx rmargn bcc hmove_to_x ;-------------------------------------------------------------------------- special_right: ldx colcrs cpx rmargn bcs hmove_to_lmargn ;right one char inc colcrs rts ;-------------------------------------------------------------------------- ; Delete line behavior: ; - The entire logical line that the cursor is in is deleted. ; - The cursor is positioned at the beginning of the next logical line. ; special_delete_line: ;delete current logical line jsr EditorGetCurLogicalRow jmp EditorDeleteLine ;---------------- special_insert_line: ;insert a new logical line at this point; note that this may split ;the current line sec jsr ScreenInsertLine jmp tab_adjust_left ;-------------------------------------------------------------------------- ; Delete character behavior: ; - Erases the current character and drags in characters from the ; remainder of the logical line, excluding the margins. ; - If the last physical line is blank and not the only physical line in ; the logical line, it is deleted and the logical line is shortened. ; Only one line is removed even if the last two lines are blank. The ; cursor does not move when this happens and may be shifted into the ; next logical line. This also does not change the input line! ; special_delete_char: ;compute base address of current row (not char) ldy rowcrs sty hold1 jsr ScreenComputeToAddrX0 ;begin shifting in the first column at the current pos ldy colcrs ;delete chars to end jmp delete_shift_loop_entry ;-------------------------------------------------------------------------- ; Insert character behavior: ; - Inserts a blank at the current position and shifts characters forward ; within the margins. ; - If the character shifted out of the end of the logical line is non- ; blank, the logical line will be extended if possible. This can cause ; a scroll. If the logical line is already three rows, the last ; character is lost. ; special_insert_char: ;get logical line start jsr EditorGetCurLogicalRow ;compute line at which we cannot add another physical line add #3 sta deltar ;compute address of row ldy rowcrs sty hold1 jsr ScreenComputeToAddrX0 ldy colcrs ;end shift at current column ldx #0 ;insert blank character at start beq insert_line_loop_entry insert_line_loop: ldy lmargn ;end shift at left column ldx tmpchr ;character to shift in (from last line) insert_line_loop_entry: sty adress+1 ;stash shift origin ldy rmargn ;begin shift at right column lda (toadr),y ;get character being shifted out sta tmpchr ;save it off to later shift in on the next row insert_shift_loop: dey lda (toadr),y iny sta (toadr),y dey cpy adress+1 bne insert_shift_loop ;put character shifted out from previous line into beginning of this one txa sta (toadr),y ;next row inc hold1 jsr EditorNextLineAddr ;check if we're at the end of the logical line lda hold1 cmp botscr bcs insert_crossed_lline jsr EditorTestLogicalLineBit beq insert_line_loop insert_crossed_lline: ;check if we shifted out a non-blank character lda tmpchr beq insert_done ;save current row lda rowcrs pha ;check if the logical line is already 3 rows -- if so, we cannot extend and ;the last char goes into the bit bucket, but we still must scroll (!) ldx hold1 cpx deltar php ;move to the bottom line +1; we use ROWCRS so it stays updated with the scrolling stx rowcrs ;check if we are at the bottom of the screen; if so we must scroll lda #0 sta deltar cpx botscr bcc insert_no_scroll ;scroll the screen jsr EditorDeleteLine0 insert_no_scroll: ;if we can't extend, we are done plp bcs insert_cant_extend ;just insert a blank line at the end of this logical row to extend it jsr ScreenInsertPhysLine ;restore shifted character and put it in place ldy rowcrs jsr ScreenComputeToAddrX0 lda tmpchr ldy lmargn sta (toadr),y insert_cant_extend: ;restore cursor row, adjusting for any scroll pla sec sbc deltar sta rowcrs insert_done: rts ;--------------------------------- dispatch: lda #>special_escape pha lda special_dispatch_lo_tab,x pha rts ;--------------------------------- delete_line_loop: ;copy first character into right margin of previous row ldy lmargn lda (toadr),y ldy rmargn sta (frmadr),y ;start shifting new row at left margin ldy lmargn delete_shift_loop: iny lda (toadr),y dey sta (toadr),y iny delete_shift_loop_entry: cpy rmargn bne delete_shift_loop ;next line jsr EditorNextLineAddr ;check if the next row is a logical line start ldx hold1 inx cpx botscr bcs delete_stop_shifting stx hold1 txa jsr EditorTestLogicalLineBit ;keep going if not beq delete_line_loop delete_stop_shifting: ;blank the last character of the last line ldy rmargn lda #0 sta (frmadr),y ;check if the last line is blank delete_blank_test_loop: lda (frmadr),y bne delete_not_blank dey cpy lmargn bcs delete_blank_test_loop ;the last line is blank... check if it is a logical line start dec hold1 lda hold1 jsr EditorTestLogicalLineBit ;skip if so -- we can't delete the entire logical line bne delete_not_blank ;delete this physical line... however, do not move the cursor and ;do not change the read line even if the cursor hops to a new one lda colcrs pha lda hold1 jsr EditorDeleteLine pla sta colcrs delete_not_blank: ;re-show cursor and exit rts .endp ;========================================================================== .proc EditorIsSpecial special_binsearch: cmp EditorPutByte.special_code_tab,x beq special_found dex bpl special_binsearch special_found: rts .endp ;========================================================================== .proc EditorRecomputeCursorAddr ldx colcrs ldy rowcrs jsr ScreenComputeAddr stx oldadr sta oldadr+1 rts .endp ;========================================================================== ; Delete a logical line on screen, and scroll the remainder of the screen ; upward. ; ; Inputs: ; A = physical line row to delete ; ; Outputs: ; DELTAR = number of lines scrolled ; EditorDeleteLine = EditorDeleteLine0.use_line .proc EditorDeleteLine0 lda #0 use_line: sta hold1 ldx #0 stx deltar scroll_loop: ;compute base address and set that as destination ldy hold1 .if _KERNEL_XLXE sec bne nofine ldx fine beq nofine ldx #0 xloop: lda rtclok+2 cmp:req rtclok+2 inx stx vscrol cpx #7 bne xloop lda #32/2 cmp:rcc vcount cmp:rcs vcount nofine: php ;C=0 for fine scroll, C=1 for coarse scroll .endif ;set TOADR to the line to be deleted jsr ScreenComputeToAddrX0 ldx hold1 bpl line_loop_start line_loop: ;bump line: FRMADR <- TOADR, TOADR += 40 jsr EditorNextLineAddr ;move line -- note that we are copying backwards (TOADR to FRMADR)! ldy #39 mva:rpl (toadr),y (frmadr),y- line_loop_start: inx cpx botscr bne line_loop ;clear the last line ldy #39 lda #0 sta:rpl (toadr),y- .if _KERNEL_XLXE plp bcs nofinescroll2 sta vscrol nofinescroll2: .endif jsr adjust_lines ;delete bits out of the logical mask until we get to the next ;logical line, computing the number of lines to scroll lda hold1 jsr EditorGetLogicalLineInfo ldx update_table,y ;get number of masks to shift sec ;setup to add a new logical line at the end beq do_mask ;jump to masking if we're on byte 2 rol logmap+2 ;shift byte 2 dex ; beq do_mask ;jump to masking if we're on byte 1 rol logmap+1 ;shift byte 1 do_mask: sta adress ;stash mask eor #$ff ;invert mask and logmap,y ;kill target bit sta adress+1 ;stash modified mask dec adress ;form mask for LSBs below bit and adress ;isolate those bits adc adress+1 ;shift those up and the bit from the next byte in sta logmap,y ;write to logmap inc deltar ;increment line count inc adress ;revert mask bit adress ;test if we still have a logical line ;loop back if we need to delete more physical lines beq scroll_loop ;all done rts update_table: dta 2,1,0 adjust_lines: lda lmargn ;prep for line adjustments ;adjust the read row if it is affected by the deletion ldx # $ff-$fd) ; .proc EditorGetLogicalColumn ;get starting row of logical line lda rowcrs jsr EditorPhysToLogicalRow ;subtract off current row clc sbc rowcrs tax ;multiply negated difference by 40 lda EditorLineLengthTab-$fc,x ;add in physical column adc colcrs rts .endp ;========================================================================== .proc EditorSetupTabIndex tya and #7 tax lda ReversedBitMasks,x pha tya lsr lsr lsr tax pla rts .endp ;========================================================================== ; Copy TOADR to FRMADR and add 40 to TOADR. ; .proc EditorNextLineAddr lda toadr sta frmadr add #40 sta toadr lda toadr+1 sta frmadr+1 adc #0 sta toadr+1 rts .endp ;========================================================================== .proc EditorLineLengthTab dta 120, 80, 40, 0 .endp atari800-5.0.0/emuos/src/hardware.inc000066400000000000000000000051601425067567700173000ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Hardware register definitions ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .ifndef f_HARDWARE_INC .def f_HARDWARE_INC ;========================================================================== ; GTIA ; m0pf equ $d000 m1pf equ $d001 m2pf equ $d002 m3pf equ $d003 p0pf equ $d004 p1pf equ $d005 p2pf equ $d006 p3pf equ $d007 m0pl equ $d008 m1pl equ $d009 m2pl equ $d00a m3pl equ $d00b p0pl equ $d00c p1pl equ $d00d p2pl equ $d00e p3pl equ $d00f hposp0 equ $d000 hposp1 equ $d001 hposp2 equ $d002 hposp3 equ $d003 hposm0 equ $d004 hposm1 equ $d005 hposm2 equ $d006 hposm3 equ $d007 sizep0 equ $d008 sizep1 equ $d009 sizep2 equ $d00a sizep3 equ $d00b sizem equ $d00c grafp0 equ $d00d grafp1 equ $d00e grafp2 equ $d00f grafp3 equ $d010 grafm equ $d011 trig0 equ $d010 trig1 equ $d011 trig2 equ $d012 colpm0 equ $d012 trig3 equ $d013 colpm1 equ $d013 pal equ $d014 colpm2 equ $d014 colpm3 equ $d015 colpf0 equ $d016 colpf1 equ $d017 colpf2 equ $d018 colpf3 equ $d019 colbk equ $d01a prior equ $d01b vdelay equ $d01c gractl equ $d01d hitclr equ $d01e consol equ $d01f ;========================================================================== ; POKEY ; pot0 equ $d200 audf1 equ $d200 pot1 equ $d201 audc1 equ $d201 pot2 equ $d202 audf2 equ $d202 pot3 equ $d203 audc2 equ $d203 pot4 equ $d204 audf3 equ $d204 pot5 equ $d205 audc3 equ $d205 pot6 equ $d206 audf4 equ $d206 pot7 equ $d207 audc4 equ $d207 audctl equ $d208 kbcode equ $d209 skres equ $d20a potgo equ $d20b serin equ $d20d serout equ $d20d irqen equ $d20e irqst equ $d20e skctl equ $d20f skstat equ $d20f ;========================================================================== ; PIA ; porta equ $d300 portb equ $d301 pactl equ $d302 pbctl equ $d303 ;========================================================================== ; ANTIC ; dmactl equ $d400 chactl equ $d401 dlistl equ $d402 dlisth equ $d403 hscrol equ $d404 vscrol equ $d405 pmbase equ $d407 chbase equ $d409 wsync equ $d40a vcount equ $d40b penh equ $d40c penv equ $d40d nmien equ $d40e nmist equ $d40f nmires equ $d40f ;========================================================================== ; 6502 ; nmivec equ $fffa resvec equ $fffc irqvec equ $fffe .endif atari800-5.0.0/emuos/src/init.s000066400000000000000000000331241425067567700161400ustar00rootroot00000000000000; Altirra - Atari 800/800XL emulator ; Kernel ROM replacement - Initialization ; Copyright (C) 2008-2019 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .if _KERNEL_XLXE .proc InitBootSignature dta $5C,$93,$25 .endp .endif .proc InitHandlerTable dta c'P',a(printv) dta c'C',a(casetv) dta c'E',a(editrv) dta c'S',a(screnv) dta c'K',a(keybdv) .endp .nowarn .proc _InitReset run_diag: ; start diagnostic cartridge jmp ($bffe) .def :InitReset ;mask interrupts and initialize CPU sei cld ldx #$ff txs .if _KERNEL_XLXE ;wait for everything to stabilize (0.1s) (XL/XE only) ldy #140 stabilize_loop: dex:rne dey bne stabilize_loop ;check for warmstart signature (XL/XE) ldx #2 warm_check: lda pupbt1,x cmp InitBootSignature,x bne cold_boot dex bpl warm_check jmp InitWarmStart .endif .def :InitColdStart cold_boot: ; 1. initialize CPU sei cld ldx #$ff txs ; 2. clear warmstart flag inx stx warmst ; 3. test for diagnostic cartridge lda $bffc bne not_diag ldx #$ff cpx $bfff ;prevent diagnostic cart from activating if addr is $FFxx beq not_diag stx $bffc cmp $bffc sta $bffc bne not_diag ; is it enabled? bit $bffd bmi run_diag not_diag: jsr InitHardwareReset .if _KERNEL_XLXE ;check for OPTION and enable BASIC (note that we do NOT set BASICF just yet) lda #4 bit consol beq no_basic .ifdef _KERNEL_SOFTKICK ldx #$fc .else ldx #$fd .endif ;check for keyboard present + SELECT or no keyboard + no SELECT and enable game if so lda trig2 ;check keyboard present (1 = present) asl eor consol ;XOR against select (0 = pressed) and #$02 .ifdef _KERNEL_SOFTKICK seq:ldx #$be .else seq:ldx #$bf .endif stx portb ;enable GAME or BASIC no_basic: .endif ; 4. measure memory -> tramsz jsr InitMemory ; 6. clear memory from $0008 up to [tramsz,0] .ifdef _KERNEL_SOFTKICK ldx #$50 .else ldx tramsz .endif ldy #8 mva #0 a1 sta a1+1 clearloop: sta:rne (a1),y+ inc a1+1 dex bne clearloop .if _KERNEL_XLXE ;Blip the self test ROM for a second -- this is one way that Altirra detects ;that Option has been used by the OS. The XL/XE OS does this as part of its ;ROM checksum routine (which we don't bother with). ldx portb txa and #$7f sta portb stx portb .endif ; 7. set dosvec to blackboard routine .if _KERNEL_USE_BOOT_SCREEN mwa #SelfTestEntry dosvec .else mwa #Blackboard dosvec .endif ; 8. set coldstart flag dec coldst ;!! coldst=0 from clear loop above, now $ff .if _KERNEL_XLXE ; set BASIC flag lda portb and #$02 sta basicf .endif ; 9. set screen margins ; 10. initialize RAM vectors ; 11. set misc database values ; 12. enable IRQ interrupts ; 13. initialize device table ; 14. initialize cartridges ; 15. use IOCB #0 to open screen editor (E) ; 16. wait for VBLANK so screen is initialized ; 17. do cassette boot, if it was requested ; 18. do disk boot ; 19. reset coldstart flag ; 20. run cartridges or blackboard jmp InitEnvironment .endp ;============================================================================== .proc InitWarmStart ; A. initialize CPU ; ; Undocumented: Check if cold start completed (COLDST=0); if not, force ; a cold start. ACTris 2.1 relies on this since its boot doesn't reset ; COLDST. This is also required to work on Atari800WinPLus, which doesn't ; clear memory on a cold start. ; sei ;!! FIRST TWO BYTES CHECKED BY ARCHON lda coldst bne InitColdStart cld ldx #$ff txs ; B. set warmstart flag stx warmst ; reinitialize hardware without doing a full clear jsr InitHardwareReset .if _KERNEL_XLXE ; reinitialize BASIC lda basicf sne:mva #$fd portb .endif ; C. check for diag, measure memory, clear hw registers jsr InitMemory ; D. zero 0010-007F and 0200-03EC (must not clear BASICF). ldx #$60 lda #0 sta:rne $0f,x- dbclear: sta $0200,x sta $02ed,x inx bne dbclear ; E. steps 9-16 above ; F. if cassette boot was successful on cold boot, execute cassette init ; G. if disk boot was successful on cold boot, execute disk init ; H. same as steps 19 and 20 jmp InitEnvironment .endp ;============================================================================== .proc InitHardwareReset ; clear all hardware registers ldy #0 tya hwclear: sta $d000,y sta $d200,y sta $d400,y iny bne hwclear ;initialize PIA lda #$3c ldx #$38 .ifdef _KERNEL_SOFTKICK stx pactl ;switch to DDRA sty porta ;portA -> input sta pactl ;switch to IORA sty porta ;portA -> $00 sta pbctl ;switch to IORB dey dey sty portb ;portB -> $FE stx pbctl ;switch to DDRB iny sty portb ;portB -> all output sta pbctl ;switch to IORB .elseif _KERNEL_XLXE stx pactl ;switch to DDRA sty porta ;portA -> input sta pactl ;switch to IORA sty porta ;portA -> $00 sta pbctl ;switch to IORB dey sty portb ;portB -> $FF stx pbctl ;switch to DDRB sty portb ;portB -> all output sta pbctl ;switch to IORB .else stx pactl ;switch to DDRA stx pbctl ;switch to DDRB sty porta ;portA -> input sty portb ;portB -> input sta pactl ;switch to IORA sta pbctl ;switch to IORB sty porta ;portA -> $00 sty portb ;portB -> $00 .endif rts .endp ;============================================================================== .proc InitMemory ; 4. measure memory -> tramsz ldy #$00 sty adress ldx #$02 pageloop: stx adress+1 lda (adress),y eor #$ff sta (adress),y cmp (adress),y bne notRAM eor #$ff sta (adress),y inx .if _KERNEL_XLXE cpx #$c0 .else cpx #$d0 .endif bne pageloop notRAM: stx tramsz rts .endp ;============================================================================== .proc InitVectorTable1 dta a(IntExitHandler_None) ;$0200 VDSLST dta a(IntExitHandler_A) ;$0202 VPRCED dta a(IntExitHandler_A) ;$0204 VINTER dta a(IntExitHandler_A) ;$0206 VBREAK dta a(KeyboardIRQ) ;$0208 VKEYBD dta a(SIOInputReadyHandler) ;$020A VSERIN dta a(SIOOutputReadyHandler) ;$020C VSEROR dta a(SIOOutputCompleteHandler) ;$020E VSEROC dta a(IntExitHandler_A) ;$0210 VTIMR1 dta a(IntExitHandler_A) ;$0212 VTIMR2 dta a(IntExitHandler_A) ;$0214 VTIMR4 dta a(IrqHandler) ;$0216 VIMIRQ end: .endp .proc InitVectorTable2 dta a(VBIStage1) ;$0222 VVBLKI dta a(VBIExit) ;$0224 VVBLKD dta a(0) ;$0226 CDTMA1 .endp krpdel_table: dta 48,40 ;============================================================================== .proc InitEnvironment mva tramsz ramsiz .if _KERNEL_XLXE ; set warmstart signature -- must be done before cart init, because ; SDX doesn't return. ldx #3 mva:rne InitBootSignature-1,x pupbt1-1,x- .endif ; 9. set screen margins mva #2 lmargn mva #39 rmargn ;set PAL/NTSC flag (XL/XE only) .if _KERNEL_XLXE ldx #0 lda pal ldy #6 and #$0e bne is_ntsc sne:inx dey is_ntsc: stx palnts sty keyrep mva krpdel_table,x krpdel .endif ; 10. initialize RAM vectors ;VDSLST-VIMIRQ ldx #[.len InitVectorTable1]-1 mva:rpl InitVectorTable1,x vdslst,x- ;VVBLKI-CDTMA1 ldx #[.len InitVectorTable2]-1 mva:rpl InitVectorTable2,x vvblki,x- mwa #KeyboardBreakIRQ brkky ; 11. set misc database values ldx #$ff stx brkkey inx stx memtop stx memlo mva tramsz memtop+1 mvx #$07 memlo+1 jsr DiskInit jsr ScreenInit ;jsr DisplayInit jsr KeyboardInit .if _KERNEL_PRINTER_SUPPORT jsr PrinterInit .endif ; 13. initialize device table (HATABS has already been cleared) ; NOTE: The R: emulation relies on this being before CIOINV is invoked. ldx #14 mva:rpl InitHandlerTable,x hatabs,x- ;jsr CassetteInit jsr cioinv jsr SIOInit jsr IntInitInterrupts ; check for START key, and if so, set cassette boot flag lda consol and #1 eor #1 sta ckey .if _KERNEL_PBI_SUPPORT jsr PBIScan .endif ; 12. enable IRQ interrupts ; ; We do this later than the original OS specification because the PBI scan needs ; to happen with IRQs disabled (a PBI device with interrupts may not have been ; inited yet) and that PBI scan in turn needs to happen after HATABS has been ; set up. There's no harm in initing HATABS with interrupts masked, so we do so. cli ; 14. initialize cartridges mva #0 tstdat .if !_KERNEL_XLXE lda $9ffc bne skipCartBInit lda $9ffb tax eor #$ff sta $9ffb cmp $9ffb stx $9ffb beq skipCartBInit jsr InitCartB mva #1 tstdat skipCartBInit: .endif mva #0 tramsz lda $bffc bne skipCartAInit lda $bffb tax eor #$ff sta $bffb cmp $bffb stx $bffb beq skipCartAInit jsr InitCartA mva #1 tramsz skipCartAInit: ; 15. use IOCB #0 ($0340) to open screen editor (E) ; ; NOTE: We _must_ leave $0C in the A register when invoking CIO. Pooyan ; relies on $0C being left in CIOCHR after the last call to CIO before ; disk boot! mva #$03 iccmd ;OPEN mwa #ScreenEditorName icbal mva #$0c icax1 ;read/write, no forced read ldx #0 stx icax2 ;mode 0 jsr ciov ; 16. wait for VBLANK so screen is initialized lda rtclok+2 waitvbl: cmp rtclok+2 beq waitvbl ;------------------------------------------------------------------------- ; Pre-boot hook (AltirraOS-specific) ; .ifdef _KERNEL_PRE_BOOT_HOOK jsr InitPreBootHook .endif ;------------------------------------------------------------------------- ; Run cartridge/cassette/disk ; ; 17. do cassette boot, if it was requested ; F. if cassette boot was successful on cold boot, execute cassette init ; The cold boot path must check the warm start flag and switch paths if ; necessary. SpartaDOS X relies on being able to set the warm start ; flag from its cart init handler. ; ; Disk boot must be attempted after cassette boot. Besides support for ; using DOS from tape-based software, this is also required by the tape ; version of Fun With Spelling (featuring Heathcliff), which depends on ; the SIO request causing the tape start vector to be invoked shortly ; after VBI so it can do an unsafe screen swap. ; lda warmst bne reinitcas lda ckey beq postcasboot jsr BootCassette jmp postcasboot reinitcas: lda #2 bit boot? beq postcasboot jsr InitCassetteBoot postcasboot: ;------------------------------------------------------------------------- ; 18. do disk boot ; G. if disk boot was successful on cold boot, execute disk init ; ; For 800 mode, we must check if either cart A or cart B is present, ; doing a disk boot if either there are no carts or one of the carts ; requests disk boot. For the XL/XE case, cart B doesn't exist and we ; can simplify the logic. ; lda warmst bne reinitDisk .if !_KERNEL_XLXE ;check if we have cart B lda tstdat bne have_cart_b ;no cart B -- if no cart A either, do disk boot ldx tramsz ;cart A beq boot_disk bne have_cart_a have_cart_b: ;have cart B - grab boot disk flag (bit 0) lda $9ffd ;merge cart A's flags if it is present ldx tramsz beq no_cart_a have_cart_a: ora $bffd no_cart_a: ;skip disk boot if neither cart requested it lsr bcc skip_disk_boot .else ;check for cart A requesting boot lda tramsz beq boot_disk ;have cart A - boot disk if requested lda $bffd lsr bcc skip_disk_boot .endif boot_disk: jsr BootDisk jmp post_disk_boot reinitDisk: lda boot? lsr bcc skip_disk_boot jsr InitDiskBoot post_disk_boot: .if _KERNEL_XLXE ; (XL/XE only) do type 3 poll or reinit handlers ; !! - must only do this if a disk boot occurs; Pole Position audio breaks if ; we do this and hit SKCTL before booting the cart lda warmst bne reinit_handlers jsr PHStartupPoll jmp post_reinit reinit_handlers: jsr PHReinitHandlers post_reinit: .endif skip_disk_boot: ;------------------------------------------------------------------------- ; H. same as steps 19 and 20 ; 19. reset coldstart flag ldx #0 stx coldst ;------------------------------------------------------------------------- ; 20. run cartridges or blackboard ; ; Weird quirk here: if the left cart is absent or doesn't request ; cart start, and the right cart is present and also doesn't request ; cart start, OS-B endlessly does disk boots instead of running (DOSVEC). ; We don't emulate this behavior for now since in practice it just seems ; useless, boot looping until DOS crashes. It is moot starting with the ; 1200XL DOS due to support for cart B being dropped. ; ; try to boot cart A lda #$04 ldx tramsz beq NoBootCartA bit $bffd seq:jmp ($bffa) NoBootCartA: ; try to boot cart B ldx tstdat beq NoBootCartB bit $9ffd seq:jmp ($9ffa) NoBootCartB: ; run blackboard jmp (dosvec) InitCartA: jmp ($bffe) InitCartB: jmp ($9ffe) ScreenEditorName: dta c"E" .endp ;============================================================================== .proc InitDiskBoot jmp (dosini) .endp .proc InitCassetteBoot .endp jmp (casini) ;============================================================================== nop atari800-5.0.0/emuos/src/init816.s000066400000000000000000000272531425067567700164050ustar00rootroot00000000000000; Altirra - Atari 800/800XL emulator ; Kernel ROM replacement - 65C816 Initialization ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .nowarn .proc _InitReset run_diag: ; start diagnostic cartridge jmp ($bffe) .def :InitReset ;mask interrupts and initialize CPU sei cld ldx #$ff txs ;wait for everything to stabilize (0.1s) ldy #140 inx ;!! x=0 stabilize_loop: dex:rne dey bne stabilize_loop .if _KERNEL_XLXE ;check if we successfully completed cold start ; ;!! This is required to work on Atari800WinPlus, which doesn't clear memory on ; cold reset! lda coldst bne cold_boot ;check for warmstart signature (XL/XE) ldx #2 warm_check: lda pupbt1,x cmp InitBootSignature,x bne cold_boot dex bpl warm_check jmp InitWarmStart .endif .def :InitColdStart cold_boot: ; 1. initialize CPU sei cld ldx #$ff txs ; 2. clear warmstart flag inx stx warmst ; 3. test for diagnostic cartridge lda $bffc bne not_diag ldx #$ff cpx $bfff ;prevent diagnostic cart from activating if addr is $FFxx beq not_diag stx $bffc cmp $bffc sta $bffc bne not_diag ; is it enabled? bit $bffd bmi run_diag not_diag: jsr InitHardwareReset ;check for OPTION and enable BASIC (note that we do NOT set BASICF just yet) lda #4 bit consol beq no_basic ldx #$fd ;check for keyboard present + SELECT or no keyboard + no SELECT and enable game if so lda trig2 ;check keyboard present (1 = present) asl eor consol ;XOR against select (0 = pressed) and #$02 seq:ldx #$bf stx portb ;enable GAME or BASIC no_basic: ; 4. measure memory -> tramsz jsr InitMemory ; 6. clear memory from $0008 up to [tramsz,0] ldx tramsz ldy #8 mva #0 a1 sta a1+1 clearloop: sta:rne (a1),y+ inc a1+1 dex bne clearloop ;Blip the self test ROM for a second -- this is one way that Altirra detects ;that Option has been used by the OS. The XL/XE OS does this as part of its ;ROM checksum routine (which we don't bother with). ldx portb txa and #$7f sta portb stx portb ; 7. set dosvec to blackboard routine .if _KERNEL_USE_BOOT_SCREEN mwa #SelfTestEntry dosvec .else mwa #Blackboard dosvec .endif ; 8. set coldstart flag dec coldst ;!! coldst=0 from clear loop above, now $ff .if _KERNEL_XLXE ; set BASIC flag lda portb and #$02 sta basicf .endif ; 9. set screen margins ; 10. initialize RAM vectors ; 11. set misc database values ; 12. enable IRQ interrupts ; 13. initialize device table ; 14. initialize cartridges ; 15. use IOCB #0 to open screen editor (E) ; 16. wait for VBLANK so screen is initialized ; 17. do cassette boot, if it was requested ; 18. do disk boot ; 19. reset coldstart flag ; 20. run cartridges or blackboard jmp InitEnvironment .endp ;============================================================================== .proc InitWarmStart ; A. initialize CPU ; Undocumented: Check if cold start completed (COLDST=0); if not, force ; a cold start. ACTris 2.1 relies on this since its boot doesn't reset ; COLDST. ; sei ;!! FIRST TWO BYTES CHECKED BY ARCHON lda coldst bne InitColdStart cld ldx #$ff txs ; B. set warmstart flag stx warmst ; reinitialize hardware without doing a full clear jsr InitHardwareReset .if _KERNEL_XLXE ; reinitialize BASIC lda basicf sne:mva #$fd portb .endif ; C. check for diag, measure memory, clear hw registers jsr InitMemory ; D. zero 0010-007F and 0200-03EC (must not clear BASICF). ldx #$60 lda #0 sta:rne $0f,x- dbclear: sta $0200,x sta $02ed,x inx bne dbclear ; E. steps 9-16 above ; F. if cassette boot was successful on cold boot, execute cassette init ; G. if disk boot was successful on cold boot, execute disk init ; H. same as steps 19 and 20 jmp InitEnvironment .endp ;============================================================================== .proc InitHardwareReset ; clear all hardware registers ldx #0 hwclear: stz $d000,x stz $d200,x stz $d400,x inx bne hwclear ;initialize PIA lda #$3c ldy #$38 sty pactl ;switch to DDRA stz porta ;portA -> input sta pactl ;switch to IORA stz porta ;portA -> $00 sta pbctl ;switch to IORB dex stx portb ;portB -> $FF sty pbctl ;switch to DDRB stx portb ;portB -> all output sta pbctl ;switch to IORB rts .endp ;============================================================================== .proc InitMemory ; 4. measure memory -> tramsz ldy #$00 sty adress ldx #$02 pageloop: stx adress+1 lda (adress),y eor #$ff sta (adress),y cmp (adress),y bne notRAM eor #$ff sta (adress),y inx cpx #$c0 bne pageloop notRAM: stx tramsz rts .endp ;============================================================================== .proc InitMemList dta $01,a(brkkey) dta $ff ;$0011 BRKKEY dta $02,a(lmargn) dta $02 ;$0052 LMARGN dta $27 ;$0053 RMARGN dta $18,a(vdslst) dta a(IntExitHandler_None) ;$0200 VDSLST dta a(IntExitHandler_A) ;$0202 VPRCED dta a(IntExitHandler_A) ;$0204 VINTER dta a(IntExitHandler_A) ;$0206 VBREAK dta a(KeyboardIRQ) ;$0208 VKEYBD dta a(SIOInputReadyHandler) ;$020A VSERIN dta a(SIOOutputReadyHandler) ;$020C VSEROR dta a(SIOOutputCompleteHandler) ;$020E VSEROC dta a(IntExitHandler_A) ;$0210 VTIMR1 dta a(IntExitHandler_A) ;$0212 VTIMR2 dta a(IntExitHandler_A) ;$0214 VTIMR4 dta a(IrqHandler) ;$0216 VIMIRQ dta $06,a(vvblki) dta a(VBIStage1) ;$0222 VVBLKI dta a(VBIExit) ;$0224 VVBLKD dta a(0) ;$0226 CDTMA1 dta $02,a(brkky) dta a(KeyboardBreakIRQ) ;$0236 BRKKY dta $1c,a(vabte) dta a(IntExitHandler_None) ;$024F VABTE dta a(IntExitHandler_None) ;$0251 VCOPE dta t(IntExitHandler_None) ;$0253 VABTN dta t(IntNativeCopHandler) ;$0256 VCOPN dta t(IntNativeNmiHandler) ;$0259 VNMIN dta t(IntNativeIrqHandler) ;$025C VIRQN dta t(IntExitHandler_None) ;$025F VBRKN dta t(IntNativeCop0Handler) ;$0262 VCOP0 dta t(IntNativeCopUHandler) ;$0262 VCOPU dta t(IntNativeCopCHandler) ;$0262 VCOPC dta $01,a(keyrep) dta $06 ;$02DA KEYREP dta $04,a(memtop) dta a($0000) ;$02E5 MEMTOP dta a($0700) ;$02E7 MEMLO dta $12,a(hatabs) dta 'P',a(printv) ;$031A HATABS dta 'C',a(casetv) dta 'E',a(editrv) dta 'S',a(screnv) dta 'K',a(keybdv) dta '@',a(SystemDevHandlerTable) dta $03,a(pupbt1) .def :InitBootSignature dta $5C,$93,$25 ;$033D PUPBT1 dta $00 .endp ;============================================================================== .proc InitEnvironment mva tramsz ramsiz ; Set warmstart signature -- must be done before cart init, because ; SDX doesn't return. ; 9. set screen margins ; 10. initialize RAM vectors ; 13. initialize device table (HATABS has already been cleared) ; NOTE: The R: emulation relies on this being before CIOINV is invoked. clc xce rep #$30 ldx.w #InitMemList init_loop: lda 0,x and.w #$00ff beq init_done inx ldy 0,x inx inx dec mvn 0,0 bra init_loop init_done: sec xce ;set PAL/NTSC flag (XL/XE only) ldx #0 lda pal and #$0e sne:inx stx palnts ; 11. set misc database values mva tramsz memtop+1 jsr DiskInit jsr ScreenInit jsr KeyboardInit .if _KERNEL_PRINTER_SUPPORT jsr PrinterInit .endif ;jsr CassetteInit jsr cioinv jsr SIOInit jsr IntInitInterrupts ; check for START key, and if so, set cassette boot flag lda consol and #1 eor #1 sta ckey .if _KERNEL_PBI_SUPPORT jsr PBIScan .endif ; 12. enable IRQ interrupts ; ; We do this later than the original OS specification because the PBI scan needs ; to happen with IRQs disabled (a PBI device with interrupts may not have been ; inited yet) and that PBI scan in turn needs to happen after HATABS has been ; set up. There's no harm in initing HATABS with interrupts masked, so we do so. cli ; 14. initialize cartridges mva #0 tstdat mva #0 tramsz lda $bffc bne skipCartAInit lda $bffb tax eor #$ff sta $bffb cmp $bffb stx $bffb beq skipCartAInit jsr InitCartA mva #1 tramsz skipCartAInit: ; 15. use IOCB #0 ($0340) to open screen editor (E) ; ; NOTE: We _must_ leave $0C in the A register when invoking CIO. Pooyan ; relies on $0C being left in CIOCHR after the last call to CIO before ; disk boot! mva #$03 iccmd ;OPEN mwa #ScreenEditorName icbal mva #$0c icax1 ;read/write, no forced read ldx #0 stx icax2 ;mode 0 jsr ciov ; 16. wait for VBLANK so screen is initialized lda rtclok+2 waitvbl: cmp rtclok+2 beq waitvbl ;----------------------------------------------------------- .ifdef _KERNEL_PRE_BOOT_HOOK jsr InitPreBootHook .endif ;----------------------------------------------------------- ; 17. do cassette boot, if it was requested ; F. if cassette boot was successful on cold boot, execute cassette init ; The cold boot path must check the warm start flag and switch paths if ; necessary. SpartaDOS X relies on being able to set the warm start ; flag from its cart init handler. lda warmst bne reinitcas lda ckey beq postcasboot jsr BootCassette jmp postcasboot reinitcas: lda #2 bit boot? beq postcasboot jsr InitCassetteBoot postcasboot: ; 18. do disk boot ; G. if disk boot was successful on cold boot, execute disk init lda warmst bne reinitDisk ;check for cart B requesting boot lda tstdat beq noCartBBoot lda #$01 bit $9ffd bne boot_disk lda tramsz beq postDiskBoot noCartBBoot: ;check for cart A requesting boot lda tramsz beq noCartABoot lda #$01 bit $bffd beq postDiskBoot noCartABoot: boot_disk: jsr BootDisk jmp postDiskBoot2 reinitDisk: lda boot? lsr bcc postDiskBoot jsr InitDiskBoot postDiskBoot2: ; (XL/XE only) do type 3 poll or reinit handlers ; !! - must only do this if a disk boot occurs; Pole Position audio breaks if ; we do this and hit SKCTL before booting the cart lda warmst bne reinit_handlers jsr PHStartupPoll jmp post_reinit reinit_handlers: jsr PHReinitHandlers post_reinit: postDiskBoot: ; H. same as steps 19 and 20 ; 19. reset coldstart flag ldx #0 stx coldst ; 20. run cartridges or blackboard ; try to boot cart A lda tramsz beq NoBootCartA lda #$04 bit $bffd beq NoBootCartA jmp ($bffa) NoBootCartA: ; try to boot cart B lda tstdat beq NoBootCartB bit $9ffd beq NoBootCartB jmp ($9ffa) NoBootCartB: ; run blackboard jmp (dosvec) InitCartA: jmp ($bffe) InitCartB: jmp ($9ffe) ScreenEditorName: dta c"E" .endp ;============================================================================== .proc InitDiskBoot jmp (dosini) .endp .proc InitCassetteBoot jmp (casini) .endp atari800-5.0.0/emuos/src/interrupt.s000066400000000000000000000030171425067567700172270ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Interrupt Handlers ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; Dispatched from INTINV. Used by SpartaDOS X. ; .proc IntInitInterrupts mva #$40 nmien .if _KERNEL_XLXE ;Required by XEGS carts to run since they have a clone of the XL/XE ;OS in them. mva trig3 gintlk .endif rts .endp ;========================================================================== .proc IntDispatchNMI bit nmist ;check nmi status bpl not_dli ;skip if not a DLI jmp (vdslst) ;jump to display list vector .if !_KERNEL_XLXE is_system_reset: jmp warmsv .endif not_dli: pha .if _KERNEL_XLXE ;Only XL/XE OSes cleared the decimal bit. cld .else ;The stock OS treats 'not RNMI' as VBI. We'd best follow its example. lda #$20 bit nmist bne is_system_reset .endif txa pha tya pha sta nmires ;reset VBI interrupt jmp (vvblki) ;jump through vblank immediate vector .endp .proc IntDispatchIRQ .if _KERNEL_XLXE cld .endif jmp (vimirq) .endp ;============================================================================== IntExitHandler_A = VBIProcess.exit_a IntExitHandler_None = VBIProcess.exit_none atari800-5.0.0/emuos/src/interrupt816.s000066400000000000000000000122431425067567700174670ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 Interrupt Handlers ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; Dispatched from INTINV. Used by SpartaDOS X. ; .proc IntInitInterrupts mva #$40 nmien ;Required by XEGS carts to run since they have a clone of the XL/XE ;OS in them. mva trig3 gintlk rts .endp ;========================================================================== .proc IntDispatchNmi bit nmist ;check nmi status bpl not_dli ;skip if not a DLI jmp (vdslst) ;jump to display list vector not_dli: pha cld phx phy sta nmires ;reset VBI interrupt jmp (vvblki) ;jump through vblank immediate vector .endp ;============================================================================== .proc IntDispatchNativeNmi jmp [vnmin] .endp ;============================================================================== .proc IntNativeNmiHandler ;push and zero DBR phb phk plb ;switch to 8-bit M/A sep #$20 ;check for DLI bit nmist bpl not_dli ;call DLI handler php jsr dispatch_dli ;restore DBR and exit plb rti dispatch_dli: jmp (vdslst) not_dli: ;swap to B xba ;save B and load flags from stack to grab the I flag pha lda 3,s ;convert to 'emulation safe' flags ora #$30 and #$04 ;save X and Y phx phy ;save and clear D phd pea #0 pld ;save flags, so we can restore X/Y php ;switch to emulation mode sec xce ;push fake interrupt frame, preserving original I flag pea #xit pha ;Swap back to A and save A/X/Y. ; ;NOTE: SpartaDOS X 4.48 has dodgy code where if it is run on a 65C816 without linear RAM, ;it runs a BogoMIPS timing loop in native mode with a VBI handler that assumes that ;the A/X/Y pushed here are the original values from the mainline code! This is later ;used by the SIO code, which acts erratically if we push different register values here. xba pha phx phy ;call VBI handler jmp (vvblki) xit: ;A/X/Y were restored by VBI handler, but IRQs may be turned back on -- that's OK. ;swap back from A to B xba ;jump back to native mode clc xce ;restore native mode flags so we have X/Y size plp ;restore D pld ;restore X and Y ply plx ;restore B pla xba ;restore DBR and exit plb rti .endp ;========================================================================== .proc IntDispatchNativeIrq jmp [virqn] .endp ;========================================================================== .proc IntNativeIrqHandler ;save A/X/Y pha phx phy ;save M/X mode php ;save D and switch to page zero phd pea #0 pld ;save B and switch to bank zero phb phk plb ;switch to m8x8 mode sep #$30 ;call regular IRQ handler phk pea #xit php .def :IntDispatchIrq jmp (vimirq) xit: ;restore B and D plb pld ;restore M/X plp ply plx pla rti .endp ;============================================================================== .proc IntDispatchAbort jmp (vabte) .endp ;============================================================================== .proc IntDispatchNativeAbort jmp [vabtn] .endp ;============================================================================== .proc IntDispatchCop jmp (vcope) .endp ;============================================================================== .proc IntDispatchNativeCop jmp [vcopn] .endp ;============================================================================== .proc IntCopHandler rti .endp ;============================================================================== ; Native COP #n interrupt handler ; ; Conditions when VCOP0/VCOPU/VCOPC called (like 816os): ; - D saved, D=0 ; - DBR=0 ; - A/X/Y 16-bit, but NOT saved ; - [$18] points to COP argument ; .proc IntNativeCopHandler ;save and reset D phd pea #0 pld ;save and reset DBR phb phk plb ;switch to 16-bit registers rep #$30 ;move return address to $18 pha lda 7,s dec sta $18 sep #$20 lda 9,s sta $1a lda [$18] beq dispatch_0 bmi dispatch_c dispatch_0: rep #$20 pla phk pea #xit-1 jmp [vcop0] xit: ;restore B/D and exit plb pld rti dispatch_u: rep #$20 pla phk pea #xit-1 jmp [vcopu] dispatch_c: rep #$20 pla phk pea #xit-1 jmp [vcopc] .endp ;============================================================================== .proc IntDispatchNativeBreak jmp [vbrkn] .endp ;============================================================================== IntExitHandler_A = VBIProcess.exit_a IntExitHandler_None = VBIProcess.exit_none atari800-5.0.0/emuos/src/irq.s000066400000000000000000000067211425067567700157730ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - IRQ routines ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; _KERNEL_FAST_IRQ ; ; If set, expands the IRQ module slightly to save 12 cycles when ack'ing ; POKEY IRQs. This is still faster than the stock XL/XE OS. If cleared, ; an additional subroutine call is used to reduce code size. ; .ifndef _KERNEL_FAST_IRQ _KERNEL_FAST_IRQ = 0 .endif ;========================================================================== .if _KERNEL_FAST_IRQ _ACK_IRQ .macro sta irqen lda pokmsk sta irqen .endm .else _ACK_IRQ .macro jsr IrqAcknowledge .endm .endif ;========================================================================== ; The canonical IRQ priority order for the XL/XE is: ; - Serial input ready ($20) ; - PBI devices ; - Serial output ready ($10) ; - Serial output complete ($08) ; - Timer 1 ($01) ; - Timer 2 ($02) ; - Timer 4 ($04) ; - Keyboard ($80) ; - Break ($40) ; - PIA proceed ; - PIA interrupt ; - BRK instruction ; IRQHandler = _IRQHandler._entry .proc _IRQHandler .if _KERNEL_PBI_SUPPORT check_pbi: ;check if a device interrupt is active and $d1ff beq no_pbi_interrupt ;save X sta jveck txa pha ;jump through PBI interrupt vector lda jveck jmp (vpirq) .endif dispatch_serout: lda #$ef _ACK_IRQ jmp (vseror) check_seroc: bit irqst bne not_seroc dispatch_seroc: jmp (vseroc) dispatch_timer1: lda #$fe _ACK_IRQ jmp (vtimr1) dispatch_timer2: lda #$fd _ACK_IRQ jmp (vtimr2) dispatch_timer4: lda #$fb _ACK_IRQ jmp (vtimr4) _entry: pha ;check for serial input ready IRQ lda #$20 bit irqst bne not_serin lda #$df sta irqen lda pokmsk sta irqen jmp (vserin) not_serin: .if _KERNEL_PBI_SUPPORT ;check for PBI devices requiring interrupt handling lda pdmsk bne check_pbi no_pbi_interrupt: .endif ;check for serial output ready IRQ lda #$10 bit irqst beq dispatch_serout ;check for serial output complete (not a latch, so must mask) lsr bit pokmsk bne check_seroc not_seroc: lda irqst lsr bcc dispatch_timer1 lsr bcc dispatch_timer2 lsr bcc dispatch_timer4 bit irqst bvc dispatch_keyboard bpl dispatch_break ;check for serial bus proceed line bit pactl bmi dispatch_pia_irqa ;check for serial bus interrupt line bit pbctl bmi dispatch_pia_irqb ;check for break instruction ; ;we used to use TSX here, but this takes too many insns to ;handle stack wrapping properly pla sta jveck pla pha and #$10 beq not_brk lda jveck pha jmp (vbreak) not_brk: lda jveck rti dispatch_keyboard: lda #$bf _ACK_IRQ jmp (vkeybd) dispatch_break: lda #$7f _ACK_IRQ jmp (brkky) dispatch_pia_irqa: ;clear serial bus proceed interrupt lda porta jmp (vprced) dispatch_pia_irqb: ;clear serial bus interrupt interrupt lda portb jmp (vinter) .endp ;========================================================================== .if !_KERNEL_FAST_IRQ .proc IrqAcknowledge sta irqen lda pokmsk sta irqen rts .endp .endifatari800-5.0.0/emuos/src/irq816.s000066400000000000000000000064511425067567700162320ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 IRQ routines ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; _KERNEL_FAST_IRQ ; ; If set, expands the IRQ module slightly to save 12 cycles when ack'ing ; POKEY IRQs. This is still faster than the stock XL/XE OS. If cleared, ; an additional subroutine call is used to reduce code size. ; .ifndef _KERNEL_FAST_IRQ _KERNEL_FAST_IRQ = 0 .endif ;========================================================================== .if _KERNEL_FAST_IRQ _ACK_IRQ .macro sta irqen lda pokmsk sta irqen .endm .else _ACK_IRQ .macro jsr IrqAcknowledge .endm .endif ;========================================================================== ; The canonical IRQ priority order for the XL/XE is: ; - Serial input ready ($20) ; - PBI devices ; - Serial output ready ($10) ; - Serial output complete ($08) ; - Timer 1 ($01) ; - Timer 2 ($02) ; - Timer 4 ($04) ; - Keyboard ($80) ; - Break ($40) ; - PIA proceed ; - PIA interrupt ; - BRK instruction ; IRQHandler = _IRQHandler._entry .proc _IRQHandler .if _KERNEL_PBI_SUPPORT check_pbi: ;check if a device interrupt is active and $d1ff beq no_pbi_interrupt ;save X phx ;jump through PBI interrupt vector jmp (vpirq) .endif dispatch_serout: lda #$ef _ACK_IRQ jmp (vseror) check_seroc: bit irqst bne not_seroc dispatch_seroc: jmp (vseroc) dispatch_timer1: lda #$fe _ACK_IRQ jmp (vtimr1) dispatch_timer2: lda #$fd _ACK_IRQ jmp (vtimr2) dispatch_timer4: lda #$fb _ACK_IRQ jmp (vtimr4) _entry: pha ;check for serial input ready IRQ lda #$20 bit irqst bne not_serin lda #$df sta irqen lda pokmsk sta irqen jmp (vserin) not_serin: .if _KERNEL_PBI_SUPPORT ;check for PBI devices requiring interrupt handling lda pdmsk bne check_pbi no_pbi_interrupt: .endif ;check for serial output ready IRQ lda #$10 bit irqst beq dispatch_serout ;check for serial output complete (not a latch, so must mask) lsr bit pokmsk bne check_seroc not_seroc: lda irqst lsr bcc dispatch_timer1 lsr bcc dispatch_timer2 lsr bcc dispatch_timer4 bit irqst bvc dispatch_keyboard bpl dispatch_break ;check for serial bus proceed line bit pactl bmi dispatch_pia_irqa ;check for serial bus interrupt line bit pbctl bmi dispatch_pia_irqb ;check for break instruction lda 2,s and #$10 beq not_brk jmp (vbreak) not_brk: pla rti dispatch_keyboard: lda #$bf _ACK_IRQ jmp (vkeybd) dispatch_break: lda #$7f _ACK_IRQ jmp (brkky) dispatch_pia_irqa: ;clear serial bus proceed interrupt lda porta jmp (vprced) dispatch_pia_irqb: ;clear serial bus interrupt interrupt lda portb jmp (vinter) .endp ;========================================================================== .if !_KERNEL_FAST_IRQ .proc IrqAcknowledge sta irqen lda pokmsk sta irqen rts .endp .endif atari800-5.0.0/emuos/src/kernel.inc000066400000000000000000000030151425067567700167600ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Kernel vectors ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .ifndef f_KERNEL_INC .def f_KERNEL_INC ;========================================================================== ; Math pack ; afp = $d800 fasc = $d8e6 ipf = $d9aa fpi = $d9d2 zfr0 = $da44 zf1 = $da46 zfl = $da48 fsub = $da60 fadd = $da66 fmul = $dadb fdiv = $db28 plyevl = $dd40 fld0r = $dd89 fld0p = $dd8d fld1r = $dd98 fld1p = $dd9c fst0r = $dda7 fst0p = $ddab fmove = $ddb6 exp = $ddc0 exp10 = $ddcc log = $decd log10 = $ded1 ;========================================================================== ; Main kernel ROM ; editrv = $e400 screnv = $e410 keybdv = $e420 printv = $e430 casetv = $e440 diskiv = $e450 dskinv = $e453 ciov = $e456 siov = $e459 setvbv = $e45c sysvbv = $e45f xitvbv = $e462 sioinv = $e465 sendev = $e468 intinv = $e46b cioinv = $e46e blkbdv = $e471 warmsv = $e474 coldsv = $e477 rblokv = $e47a csopiv = $e47d pupdiv = $e480 ;XL/XE: power-up display slftsv = $e483 ;XL/XE: self-test entry pentv = $e486 ;XL/XE: peripheral handler add phunlv = $e489 ;XL/XE: peripheral handler remove phiniv = $e48c ;XL/XE: peripheral handler init gpdvv = $e48f ;XL/XE: Generic device vector .endif atari800-5.0.0/emuos/src/kerneldb.inc000066400000000000000000000361011425067567700172700ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Kernel Database Definitions ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .ifndef f_KERNELDB_INC .def f_KERNELDB_INC casini = $0002 ;cassette initialization vector ramlo = $0004 ; tramsz = $0006 ;temporary ram size / cart A flag tstdat = $0007 ;RAM test data register / cart B flag ;(also CMCMD for T:) warmst = $0008 ;warmstart flag boot? = $0009 ;boot flag; 0 if none, 1 for disk, 2 for cassette dosvec = $000a dosini = $000c appmhi = $000e pokmsk = $0010 brkkey = $0011 ;set on [BREAK] rtclok = $0012 bufadr = $0015 ;indirect buffer address pointer (temp for disk buffer) ; $0016 iccomt = $0017 ;CIO: command byte .if !_KERNEL_XLXE pbpnt = $001d ;Printer: Buffer index (OS-A/B location) pbufsz = $001e ;Printer: Record size (OS-A/B location) .endif ziocb = $0020 ;zero-page IOCB ichidz = $0020 ;Zero page IOCB: device index ($FF = not open) icdnoz = $0021 ;Zero page IOCB: device number iccomz = $0022 ;Zero page IOCB: command byte icstaz = $0023 ;Zero page IOCB: status byte icbalz = $0024 ;Zero page IOCB: address of device/filename spec lo icbahz = $0025 ;Zero page IOCB: address of device/filename spec hi icptlz = $0026 ;Zero page IOCB: put byte address lo (-1) icpthz = $0027 ;Zero page IOCB: put byte address hi (-1) icbllz = $0028 ;Zero page IOCB: buffer length/byte count lo (-1) icblhz = $0029 ;Zero page IOCB: buffer length/byte count hi (-1) icax1z = $002a ;Zero page IOCB: device-specific information 1 icax2z = $002b ;Zero page IOCB: device-specific information 2 icax3z = $002c ;Zero page IOCB: device-specific information 3 icax4z = $002d ;Zero page IOCB: device-specific information 4 icax5z = $002e ;Zero page IOCB: device-specific information 5 icidno = $002e ;CIO: call X register save/restore icax6z = $002f ;Zero page IOCB: device-specific information 6 ciochr = $002f ;CIO: call A register save/restore status = $0030 ;SIO: temporay status byte chksum = $0031 ;SIO: temporary checksum byte (used by IRQ routines) bufrlo = $0032 ;SIO: buffer pointer lo (incremented by IRQ routines) bufrhi = $0033 ;SIO: buffer pointer hi (incremented by IRQ routines) bfenlo = $0034 ;SIO: buffer end lo bfenhi = $0035 ;SIO: buffer end hi ltemp = $0036 ;Relocating loader: loader temp address (XL/XE) ; $0037 bufrfl = $0038 ;SIO: buffer full flag recvdn = $0039 ;SIO: receive completed flag xmtdon = $003a ;SIO: transmit completed flag chksnt = $003b ;SIO: checksum sent flag nocksm = $003c ;SIO: no-checksum flag bptr = $003d ;Cassette: Buffer pointer ftype = $003e ;Cassette: Interrecord gap (IRG) type; bit7=1 means continuous mode feof = $003f ;Cassette: EOF flag soundr = $0041 ;SIO: noisy audio flag critic = $0042 ;critical flag for vbi zchain = $004a ;Peripheral Handler: zero-page chain address ; $004b atract = $004d ;screen attract counter drkmsk = $004e ;screen attract mask colrsh = $004f ;screen attract color shift tmpchr = $0050 ;Screen Editor hold1 = $0051 ;Display/Editor: temporary storage lmargn = $0052 ;left margin column rmargn = $0053 ;right margin column rowcrs = $0054 ;cursor row colcrs = $0055 ;cursor column ; $0056 dindex = $0057 ;display mode index savmsc = $0058 ;lowest address of screen region oldrow = $005a ; oldcol = $005b ; oldchr = $005d ;cursor character save/restore oldadr = $005e ;cursor memory address ; $005f palnts = $0062 ;PAL/NTSC flag logcol = $0063 ;Display/Editor: Logical column (0-119) adress = $0064 ;temporary storage (display code) ; $0065 toadr = $0066 ;temporary storage (display code) a1 = toadr ; $0067 frmadr = $0068 ;temporary storage (display code) ; $0069 ramtop = $006a ;ram size bufcnt = $006b bufstr = $006c ;row/column of start of logical line bitmsk = $006e ;Screen Editor shfamt = $006f ;Screen Editor rowac = $0070 ;Screen Editor: line drawing ; $0071 ; colac = $0072 ;Screen Editor: line drawing ; $0073 ; endpt = $0074 ;Screen Editor: line drawing ; $0075 ; deltar = $0076 ;Screen Editor: delta row (line drawing) deltac = $0077 ;Screen Editor: delta column (line drawing) ; $0078 ; keydef = $0079 ;XL/XE: Keyboard definition table ; $007a swpflg = $007b ;current display var state ($00 = main, $FF = split screen) holdch = $007c ;temporary key hold area prior to shift/control lock logic countr = $007e ;Screen Editor: line length ; $007f fr0 = $00d4 ;FP: Accumulator 0 _fr3 = $00da ;FP: Accumulator 3 (officially FRE) fr1 = $00e0 ;FP: Accumulator 1 fr2 = $00e6 ;FP: Accumulator 2 ;esign $00ef ;BASIC: Used in sqr() routine -- must not be touched by FP elementary functions ;fchrflg $00f0 ;BASIC: Used in sin() routine -- must not be touched by any non-transcendental FP functions cix = $00f2 ;FP: Character index inbuff = $00f3 ;FP: ASCII conversion buffer ; $00f4 ; $00f5 ;FP: temporary storage -- also temporarily used by BASIC power routine ; $00f6 ;FP: temporary storage ztemp4 = $00f7 ;FP: temporary storage -- also temporarily used by BASIC power routine ; $00f8 ;FP: temporary storage ; $00f9 ;FP: temporary storage ; $00fa ;FP: temporary storage degflg = $00fb ;FP: degree/radian flag (0=radians, 6=degrees) flptr = $00fc ;FP: pointer for floating-point loads and stores fptr2 = $00fe ;FP: pointer for polynomial evaluation vdslst = $0200 ;display list interrupt vector vprced = $0202 ;serial bus proceed interrupt vector vinter = $0204 ;serial bus interrupt vector vbreak = $0206 ;BRK instruction vector vkeybd = $0208 ;keyboard interrupt vector vserin = $020a ;serial input ready interrupt vector vseror = $020c ;serial output ready interrupt vector vseroc = $020e ;serial output completed interrupt vector vtimr1 = $0210 ;pokey timer 1 interrupt vector vtimr2 = $0212 ;pokey timer 2 interrupt vector vtimr4 = $0214 ;pokey timer 4 interrupt vector vimirq = $0216 ;immediate IRQ vector cdtmv1 = $0218 ;countdown timer 1 cdtmv2 = $021a ;countdown timer 2 cdtmv3 = $021c ;countdown timer 3 cdtmv4 = $021e ;countdown timer 4 cdtmv5 = $0220 ;countdown timer 5 vvblki = $0222 ;vertical blank immediate vector vvblkd = $0224 ;vertical blank deferred vector cdtma1 = $0226 ;timer 1 vector cdtma2 = $0228 ;timer 2 vector cdtmf3 = $022a ;timer 3 flag srtimr = $022b ;autorepeat timer cdtmf4 = $022c ;timer 4 flag intemp = $022d ;temp value used by SETVBV cdtmf5 = $022e ;timer 5 flag sdmctl = $022f ;shadow for DMACTL ($D400) sdlstl = $0230 ;shadow for DLISTL ($D402) sdlsth = $0231 ;shadow for DLISTH ($D403) sskctl = $0232 ;shadow for SKCTL ($D20F) lcount = $0233 ;Relocating loader: (XL/XE) lpenh = $0234 ;light pen horizontal pos lpenv = $0235 ;light pen vertical pos brkky = $0236 ;break key interrupt vector (OS B+ only) vpirq = $0238 ;PBI device interrupt vector (XL/XE) ; $0239 cdevic = $023a ;SIO: command frame device ID ccomnd = $023b ;SIO: command frame command ID caux1 = $023c ;SIO: command aux byte 1 caux2 = $023d ;SIO: command aux byte 2 temp = $023e ;SIO: temp space errflg = $023f ;SIO: error flag dflags = $0240 ;disk boot flags dbsect = $0241 ;disk boot sector count bootad = $0242 ;disk boot address coldst = $0244 ;cold start flag reclen = $0245 ;Relocating loader: record length (XL/XE) dsktim = $0246 ;Disk Handler: Disk operation timeout pdvmsk = $0247 ;PBI device mask (XL/XE) shpdvs = $0248 ;PBI device selection register shadow ($D1FF) (XL/XE) pdmsk = $0249 ;PBI device interrupt mask (XL/XE) reladr = $024a ;Relocating loader: temp address (XL/XE) ; $024b .if _KERNEL_816 vabte = $024f ;(816) Emulation ABORT vector ; $0250 vcope = $0251 ;(816) Emulation COP vector ; $0252 vabtn = $0253 ;(816) Native ABORT vector ; $0254 ; $0255 vcopn = $0256 ;(816) Native COP vector ; $0257 ; $0258 vnmin = $0259 ;(816) Native NMI vector ; $025a ; $025b virqn = $025c ;(816) Native IRQ vector ; $025d ; $025e vbrkn = $025f ;(816) Native BREAK vector ; $0260 ; $0261 vcop0 = $0262 ;(816) Native COP #0 vector ; $0263 ; $0264 vcopu = $0265 ;(816) Native COP #1-127 vector ; $0266 ; $0267 vcopc = $0268 ;(816) Native COP #128-255 vector ; $0269 ; $026a .endif fine = $026e ;fine scrolling flag (XL/XE) gprior = $026f ;shadow for PRIOR ($D01B) paddl0 = $0270 ;shadow for POT0 ($D200) paddl1 = $0271 ;shadow for POT1 ($D201) paddl2 = $0272 ;shadow for POT2 ($D202) paddl3 = $0273 ;shadow for POT3 ($D203) paddl4 = $0274 ;shadow for POT4 ($D204) paddl5 = $0275 ;shadow for POT5 ($D205) paddl6 = $0276 ;shadow for POT6 ($D206) paddl7 = $0277 ;shadow for POT7 ($D207) stick0 = $0278 ;shadow for PORTA lo ($D300) stick1 = $0279 ;shadow for PORTA hi ($D300) stick2 = $027A ;shadow for PORTB lo ($D302) stick3 = $027B ;shadow for PORTB hih ($D302) ptrig0 = $027c ;paddle trigger 0 ptrig1 = $027d ;paddle trigger 1 ptrig2 = $027e ;paddle trigger 2 ptrig3 = $027f ;paddle trigger 3 ptrig4 = $0280 ;paddle trigger 4 ptrig5 = $0281 ;paddle trigger 5 ptrig6 = $0282 ;paddle trigger 6 ptrig7 = $0283 ;paddle trigger 7 strig0 = $0284 ;shadow for TRIG0 ($D001) strig1 = $0285 ;shadow for TRIG1 ($D002) strig2 = $0286 ;shadow for TRIG2 ($D003) strig3 = $0287 ;shadow for TRIG3 ($D004) hibyte = $0288 ;Relocating loader (XL/XE) wmode = $0289 ;Cassette: Write mode (00 = read, 80 = write) blim = $028a ;Cassette: Buffer limit jveck = $028c ;XL/XE: IRQ jump vector newadr = $028e ;Relocating loader (XL/XE) txtrow = $0290 txtcol = $0291 ; $0292 tindex = $0293 ;text mode index txtmsc = $0294 ;text window pointer ; $0295 cretry = $029c ;SIO: command retries (XL/XE) hold3 = $029d ;Screen Editor hold2 = $029f ;Screen Editor dmask = $02a0 ;Display/Editor: Graphics merge mask tmplbt = $02a1 escflg = $02a2 ;Display/Editor: Escape next character tabmap = $02a3 ;Display/Editor: Bitfield indicating tabs (note reversed bit positions) logmap = $02b2 ;Display/Editor: Logical line start map (4 bytes) invflg = $02b6 ;Keyboard Handler: inverse flag ($00/$80) tmprow = $02b8 ;Screen Editor tmpcol = $02b9 ;Screen Editor ; $02ba scrflg = $02bb ;Display/Editor: Scroll counter hold4 = $02bc ;Screen Editor dretry = $02bd ;SIO: device retries (XL/XE) shflok = $02be ;shift/control lock flags botscr = $02bf ;number of text rows in text window pcolr0 = $02c0 ;shadow for COLPM0 ($D012) pcolr1 = $02c1 ;shadow for COLPM1 ($D013) pcolr2 = $02c2 ;shadow for COLPM2 ($D014) pcolr3 = $02c3 ;shadow for COLPM3 ($D015) color0 = $02c4 ;shadow for COLPF0 ($D016) color1 = $02c5 ;shadow for COLPF1 ($D017) color2 = $02c6 ;shadow for COLPF2 ($D018) color3 = $02c7 ;shadow for COLPF3 ($D019) color4 = $02c8 ;shadow for COLBK ($D01A) runadr = $02c9 ;Relocating loader: run address (XL/XE) ; $02ca hiused = $02cb ;Relocating loader: Next available memory location (out) (XL/XE) ; $02cc zhiuse = $02cd ;Relocating loader: Next available zero-page address (out) (XL/XE) ; $02ce gbytea = $02cf ;Relocating loader: GET BYTE address (XL/XE) ; $02d0 loadad = $02d1 ;Relocating loader: Load address (XL/XE) ; $02d2 zloada = $02d3 ;Relocating loader: Zero-page load address (XL/XE) ; $02d4 dsctln = $02d5 ;Disk sector size (XL/XE) krpdel = $02d9 ;Keyboard repeat delay (XL/XE) keyrep = $02da ;Keyboard repeat rate (XL/XE) helpfg = $02dc ;Help flag (XL/XE) .if _KERNEL_XLXE pbpnt = $02de ;Printer: Buffer index (XL/XE location) pbufsz = $02df ;Printer: Record size (XL/XE location) .endif ramsiz = $02e4 ;ram size in pages memtop = $02e5 ;highest location for programs and data memlo = $02e7 ;base of application memory hndlod = $02e9 ;CIO: Handler load flag (XL/XE) dvstat = $02ea ;DISK: Status request buffer area (4 bytes) ; $02eb ; $02ec ; $02ed cbaudl = $02ee ;Cassette baud rate as POKEY divisor. Set to nominal ($05CC) by C: init. cbaudh = $02ef ; crsinh = $02f0 ;Display/Editor: cursor inhibit flag keydel = $02f1 ;keyboard debounce delay (set to 3 vblanks per key) ch1 = $02f2 ;last keyboard code read chact = $02f3 ;shadow for CHACTL ($D401) chbas = $02f4 ;shadow for CHBASE ($D409) rowinc = $02f8 ;Screen Editor: row direction (XL/XE location) colinc = $02f9 ;Screen Editor: col direction (XL/XE location) atachr = $02fb ;Screen Editor ch = $02fc ;keyboard FIFO byte fildat = $02fd ;Screen Editor: fill color dspflg = $02fe ;enable/disable of control codes by screen editor (E:) ssflag = $02ff ;display/screen editor suspend flag ddevic = $0300 ;serial bus ID dunit = $0301 ;device number dcomnd = $0302 ;command byte dstats = $0303 ;status byte dbuflo = $0304 ;buffer address lo dbufhi = $0305 ;buffer address hi dtimlo = $0306 ;disk timeout value dbytlo = $0308 ;byte count lo dbythi = $0309 ;byte count hi daux1 = $030a ;sector number lo daux2 = $030b ;sector number hi timer1 = $030c ;SIO: baud rate determination - first timer value addcor = $030e ;SIO: baud rate determination - correction value casflg = $030f ;SIO: cassette I/O flag (0=normal, nonzero=cassette) timer2 = $0310 ;SIO: baud rate determination - second timer value temp1 = $0312 ;SIO: baud rate determination - temp ; $0313 ptimot = $0314 ;Printer: Timeout (XL/XE location) temp3 = $0315 ;SIO: baud rate determination - temp timflg = $0317 ;SIO: operation timeout flag (set by countdown timer 1 IRQ) stackp = $0318 ;SIO: stack pointer save hatabs = $031a ;handler table pupbt1 = $033d ;(XL/XE) Power-up boot flag #1 - $5C pupbt2 = $033e ;(XL/XE) Power-up boot flag #2 - $93 pupbt3 = $033f ;(XL/XE) Power-up boot flag #3 - $25 ichid = $0340 ;IOCB #0 handler ID icdno = $0341 ;IOCB #0 device number iccmd = $0342 ;IOCB #0 command byte icsta = $0343 ;IOCB #0 status icbal = $0344 ;IOCB #0 buffer address lo icbah = $0345 ;IOCB #0 buffer address hi icptl = $0346 ;IOCB #0 PUT address lo icpth = $0347 ;IOCB #0 PUT address hi icbll = $0348 ;IOCB #0 buffer length/byte count lo icblh = $0349 ;IOCB #0 buffer length/byte count hi icax1 = $034a ;IOCB #0 auxiliary information lo icax2 = $034b ;IOCB #0 auxiliary information hi icax3 = $034c ; icax4 = $034d ; icax5 = $034e ; icax6 = $034f ; prnbuf = $03c0 ;printer buffer ckey = $03e9 ;cassette boot key basicf = $03f8 ;XL/XE: ROM BASIC flag. 0 = enabled gintlk = $03fa ;XL/XE: Cartridge interlock (clone of TRIG3). chlink = $03fb ;XL/XE: Relocated loader chain casbuf = $03fd ;Cassette buffer (03FD-047F) lbuff = $0580 ; plyarg = $05e0 ;FP: Polynomial evaluation temp register fpscr = $05e6 ;FP: Temp evaluation register (used by LOG/LOG10) .endif atari800-5.0.0/emuos/src/keyboard.s000066400000000000000000000117671425067567700170060ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Keyboard Handler ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; Oddly, the keyboard IRQs are not enabled from the keyboard init ; routine. It's done by the Display Handler instead on open. ; .proc KeyboardInit ldx #$ff stx ch stx ch1 inx stx keydel stx invflg ;turn on shift lock mva #$40 shflok ;set keyboard definition table pointer .if _KERNEL_XLXE mwa #KeyCodeToATASCIITable keydef .endif rts .endp KeyboardOpen = CIOExitSuccess KeyboardClose = CIOExitSuccess ;========================================================================== ; K: GET BYTE handler. ; ; Behavior: ; - Exits with a Break error when break key is pressed. ; - Ctrl-1 does not suspend input here (it is handled by S:/E:). ; - Ctrl-3 returns an EOF error. ; - Caps Lock sets caps mode on OS-A/B depending on Ctrl and Shift key ; state. On the XL/XE OS, pressing Caps Lock alone will enable shift ; lock if no lock is enabled and disable it otherwise. ; - Shift/Control lock is applied by K:, but only on alpha keys. ; - Inverse mode is also applied by K:. Control characters are excluded: ; 1B-1F/7C-7F/9B-9F/FD-FF. ; - Any Ctrl+Shift key code (>=$C0) produces a key click but is otherwise ; ignored. ; .nowarn .proc _KeyboardGetByte toggle_shift: .if _KERNEL_XLXE ;Caps Lock without Shift or Control is a toggle on the XL/XE line: ; None -> Shifted ; Shifted, Control -> None ldx shflok bne caps_off ldy #$40 .endif shift_ctrl_on: caps_off: tya and #$c0 write_shflok: sta shflok .def :KeyboardGetByte waitForChar: ldx #$ff waitForChar2: lda brkkey beq isBreak lda ch cmp #$ff beq waitForChar2 ;invalidate char stx ch ;do keyboard click (we do this even for ignored ctrl+shift+keys) ldy #12 jsr Bell ;ignore char if both ctrl and shift are pressed cmp #$c0 bcs waitForChar ;trap Ctrl-3 and return EOF cmp #$9a beq isCtrl3 ;translate char tay .if _KERNEL_XLXE lda (keydef),y .else lda KeyCodeToATASCIITable,y .endif ;handle special keys (see keytable.s) bpl valid_key cmp #$81 bcc waitForChar ;$80 - invalid beq isInverse ;$81 - inverse video cmp #$83 bcc toggle_shift ;$82 - caps lock cmp #$85 bcc shift_ctrl_on ;$83 - shift caps lock / $84 - ctrl caps lock valid_key: ;check for alpha key cmp #'a' bcc notAlpha cmp #'z'+1 bcs notAlpha ;check for shift/control lock bit shflok bvs doShiftLock bpl notAlpha ;do control lock logic and #$1f doShiftLock: and #$df notAlpha: ;check if we should apply inverse flag -- special characters are excluded ldx #EditorPutByte.special_code_tab_end_2-EditorPutByte.special_code_tab-1 jsr EditorIsSpecial beq skip_inverse ;apply inverse flag eor invflg skip_inverse: ;return char sta atachr ;required or CON.SYS (SDX 4.46) breaks ldy #1 rts isInverse: lda invflg eor #$80 sta invflg bcs waitForChar ;!! - unconditional isBreak: stx brkkey ldy #CIOStatBreak rts isCtrl3: ldy #CIOStatEndOfFile rts .endp ;============================================================================== KeyboardPutByte = CIOExitNotSupported KeyboardGetStatus = CIOExitSuccess KeyboardSpecial = CIOExitNotSupported ;============================================================================== ; Keyboard IRQ ; ; HELP button ($11, $51, and $91): ; - Affects SRTIMR, ATRACT, KEYDEL, and HELPFG ; - Does NOT affect CH, CH1 ; .proc KeyboardIRQ ;reset software repeat timer .if _KERNEL_XLXE mva krpdel srtimr .else mva #$30 srtimr .endif ;read new key lda kbcode .if _KERNEL_XLXE ;check for HELP and #$3f cmp #$11 bne not_help sta helpfg beq xit2 not_help: lda kbcode .endif ;check if it is the same as the prev key cmp ch1 bne debounced ;reject key if debounce timer is still running lda keydel bne xit lda ch1 debounced: ;check for Ctrl+1 to toggle display activity cmp #$9f beq is_suspend ;store key sta ch sta ch1 ;reset attract mva #0 atract xit2: ;reset key delay mva #3 keydel xit: ;all done pla rti is_suspend: ;toggle stop/start flag lda ssflag eor #$ff sta ssflag bcs xit2 ;!! carry set from cmp #$9f! .endp ;============================================================================== .proc KeyboardBreakIRQ mva #0 brkkey ;need to clear the suspend flag as BREAK automatically nukes a pending Ctrl+1 sta ssflag ;interestingly, the default break handler forces the cursor back on. sta crsinh pla rti .endp atari800-5.0.0/emuos/src/keyboard816.s000066400000000000000000000113601425067567700172320ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 Keyboard Handler ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; Oddly, the keyboard IRQs are not enabled from the keyboard init ; routine. It's done by the Display Handler instead on open. ; .proc KeyboardInit ldx #$ff stx ch stx ch1 stz keydel stz invflg ;turn on shift lock mva #$40 shflok ;set keyboard definition table pointer mwa #KeyCodeToATASCIITable keydef rts .endp KeyboardOpen = CIOExitSuccess KeyboardClose = CIOExitSuccess ;========================================================================== ; K: GET BYTE handler. ; ; Behavior: ; - Exits with a Break error when break key is pressed. ; - Ctrl-1 does not suspend input here (it is handled by S:/E:). ; - Ctrl-3 returns an EOF error. ; - Caps Lock sets caps mode on OS-A/B depending on Ctrl and Shift key ; state. On the XL/XE OS, pressing Caps Lock alone will enable shift ; lock if no lock is enabled and disable it otherwise. ; - Shift/Control lock is applied by K:, but only on alpha keys. ; - Inverse mode is also applied by K:. Control characters are excluded: ; 1B-1F/7C-7F/9B-9F/FD-FF. ; - Any Ctrl+Shift key code (>=$C0) produces a key click but is otherwise ; ignored. ; .nowarn .proc _KeyboardGetByte toggle_shift: ;Caps Lock without Shift or Control is a toggle on the XL/XE line: ; None -> Shifted ; Shifted, Control -> None ldx shflok bne caps_off ldy #$40 shift_ctrl_on: caps_off: tya and #$c0 write_shflok: sta shflok .def :KeyboardGetByte waitForChar: ldx #$ff waitForChar2: lda brkkey beq isBreak lda ch cmp #$ff beq waitForChar2 ;invalidate char stx ch ;do keyboard click (we do this even for ignored ctrl+shift+keys) ldy #12 jsr Bell ;ignore char if both ctrl and shift are pressed cmp #$c0 bcs waitForChar ;trap Ctrl-3 and return EOF cmp #$9a beq isCtrl3 ;translate char tay lda (keydef),y ;handle special keys (see keytable.s) bpl valid_key cmp #$81 bcc waitForChar ;$80 - invalid beq isInverse ;$81 - inverse video cmp #$83 bcc toggle_shift ;$82 - caps lock cmp #$85 bcc shift_ctrl_on ;$83 - shift caps lock / $84 - ctrl caps lock valid_key: ;check for alpha key cmp #'a' bcc notAlpha cmp #'z'+1 bcs notAlpha ;check for shift/control lock bit shflok bvs doShiftLock bpl notAlpha ;do control lock logic and #$1f doShiftLock: and #$df notAlpha: ;check if we should apply inverse flag -- special characters are excluded ldx #EditorPutByte.special_code_tab_end_2-EditorPutByte.special_code_tab-1 jsr EditorIsSpecial beq skip_inverse ;apply inverse flag eor invflg skip_inverse: ;return char sta atachr ;required or CON.SYS (SDX 4.46) breaks ldy #1 rts isInverse: lda invflg eor #$80 sta invflg bra waitForChar isBreak: stx brkkey ldy #CIOStatBreak rts isCtrl3: ldy #CIOStatEndOfFile rts .endp ;============================================================================== KeyboardPutByte = CIOExitNotSupported KeyboardGetStatus = CIOExitSuccess KeyboardSpecial = CIOExitNotSupported ;============================================================================== ; Keyboard IRQ ; ; HELP button ($11, $51, and $91): ; - Affects SRTIMR, ATRACT, KEYDEL, and HELPFG ; - Does NOT affect CH, CH1 ; .proc KeyboardIRQ ;reset software repeat timer mva #$30 srtimr ;read new key lda kbcode ;check for HELP and #$3f cmp #$11 bne not_help sta helpfg beq xit2 not_help: lda kbcode ;check if it is the same as the prev key cmp ch1 bne debounced ;reject key if debounce timer is still running lda keydel bne xit lda ch1 debounced: ;check for Ctrl+1 to toggle display activity cmp #$9f beq is_suspend ;store key sta ch sta ch1 ;reset attract stz atract xit2: ;reset key delay mva #3 keydel xit: ;all done pla rti is_suspend: ;toggle stop/start flag lda ssflag eor #$ff sta ssflag bra xit2 .endp ;============================================================================== .proc KeyboardBreakIRQ stz brkkey ;need to clear the suspend flag as BREAK automatically nukes a pending Ctrl+1 stz ssflag ;interestingly, the default break handler forces the cursor back on. stz crsinh pla rti .endp atari800-5.0.0/emuos/src/keytable.s000066400000000000000000000032671425067567700170020ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Keyboard Scan Code Table ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. KeyCodeToATASCIITable: ;Special codes in this table (values important for compat): ; $80 - invalid key ; $81 - inverse video ; $82 - caps lock ; $83 - shift caps lock ; $84 - control caps lock ;lowercase dta $6C, $6A, $3B, $80, $80, $6B, $2B, $2A dta $6F, $80, $70, $75, $9B, $69, $2D, $3D dta $76, $80, $63, $80, $80, $62, $78, $7A dta $34, $80, $33, $36, $1B, $35, $32, $31 dta $2C, $20, $2E, $6E, $80, $6D, $2F, $81 dta $72, $80, $65, $79, $7F, $74, $77, $71 dta $39, $80, $30, $37, $7E, $38, $3C, $3E dta $66, $68, $64, $80, $82, $67, $73, $61 ;SHIFT dta $4C, $4A, $3A, $80, $80, $4B, $5C, $5E dta $4F, $80, $50, $55, $9B, $49, $5F, $7C dta $56, $80, $43, $80, $80, $42, $58, $5A dta $24, $80, $23, $26, $1B, $25, $22, $21 dta $5B, $20, $5D, $4E, $80, $4D, $3F, $80 dta $52, $80, $45, $59, $9F, $54, $57, $51 dta $28, $80, $29, $27, $9C, $40, $7D, $9D dta $46, $48, $44, $80, $83, $47, $53, $41 ;CTRL dta $0C, $0A, $7B, $80, $80, $0B, $1E, $1F dta $0F, $80, $10, $15, $9B, $09, $1C, $1D dta $16, $80, $03, $80, $80, $02, $18, $1A dta $80, $80, $9B, $80, $1B, $80, $FD, $80 dta $00, $20, $60, $0E, $80, $0D, $80, $80 dta $12, $80, $05, $19, $9E, $14, $17, $11 dta $80, $80, $80, $80, $FE, $80, $7D, $FF dta $06, $08, $04, $80, $84, $07, $13, $01 atari800-5.0.0/emuos/src/mathpack.s000066400000000000000000001040201425067567700167570ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Decimal Floating-Point Math Pack ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; ; Known problems: ; Currently incompatible with BASIC XE due to it relying on $DE-DF not ; being modified by FADD/FSUB. ; ;========================================================================== ; Math pack memory usage constraints ; INBUFF DEGFLG ; NSIGN DIGRT ZTEMP3 ; EEXP FCHRFLG ZTEMP4 FPTR2 FPSCR ; FRX ESIGN CIX ZTEMP1 FLPTR PLYARG FPSCR1 ; $D4 $D8 $DC $E0 $E4 $E8 $EC $F0 $F4 $F8 $FC | $05E0 $05E6 $05EC ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . | .................. ; [-- FR0 --] [-- FRE --] [-- FR1 --] [-- FR2 --] [-] [-] [-] [-] [-] [-] | ; FADD/FSUB M M M M M M M . . . !!! M M M M M M . . . . . . . . . ! ! . . . . . . M M M . ! . . . . | ; FMUL M M M M M M M M M M M M M r r r r r M M M M M M M M M ! ! . . . . M M M . . . ! . . . . | ; FDIV M M M M M M M M M M M M M r r r r r M M M M M M M M M ! ! . . . . M . M . . . ! . . . . | ; PLYEVL M M M M M M M M M M M M M M M M M M M M M M M M M M M M ! . . . . M M M M M . ! M M M M | MMMMMM............ ; EXP/EXP10 M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M . . . M M M M M . ! M M M M | MMMMMM............ ; LOG/LOG10 M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M . . . M M M M M . ! M M M M | MMMMMMMMMMMM...... ; REDRNG M M M M M M M M M M M M M M M M M M M M M M M M M M M . . . . . . M . M . . . ! M M M M | MMMMMMMMMMMM...... ; ; AFP M M M M M M M . . . . . . . . . . . . . . . . . M M M M M M M . . . . . . . . ! . . . . | ; FASC r r r r r r . . . . . . . . . . . . . . . . . . . M . . . . M M M . . M . . . ! . . . . | ; IPF M M M M M M . . . . !!! . . . . . . . . . . . . . . . . . . . . . . . . M M . ! . . . . | ; FPI M M M M M M . . . . . . !!!!!!!!!!! . . . . . . M . . . . . . . . M . M M M M ! . . . . | ; ; M = modified by original math pack ; r = read by original math pack ; ! = program known to rely on not being modified ; ; Notes: ; [1] BASIC XE relies on $DE/DF not being touched by FADD, or FOR/NEXT ; breaks. ; [2] MAC/65 relies on $DE/DF not being touched by IPF. ; [3] DARG relies on FPI not touching FR1. ; [4] ACTris 1.2 relies on FASC not touching lower parts of FR2. ; [5] Atari BASIC SQR() uses ESIGN ($EF). ; [6] Atari BASIC SIN() uses FCHRFLG ($F0). ; _fpcocnt = $00ec ;FP: temporary storage - polynomial coefficient counter _fptemp0 = $00f8 ;FP: temporary storage - transcendental temporary (officially ZTEMP4+1) _fptemp1 = $00f9 ;FP: temporary storage - transcendental temporary (officially ZTEMP3) .macro ckaddr .if * <> %%1 .error 'Incorrect address: ',*,' != ',%%1 .endif .endm .macro fixadr .if * < %%1 .print (%%1-*),' bytes free before ',%%1 org %%1 .elif * > %%1 .error 'Out of space: ',*,' > ',%%1,' (',*-%%1,' bytes over)' .endif .endm ;========================================================================== ; AFP [D800] Convert ASCII string at INBUFF[CIX] to FR0 ; org $d800 _afp = afp .proc afp dotflag = fr2 xinvert = fr2+1 cix0 = fr2+2 sign = fr2+3 digit2 = fr2+4 ;skip initial spaces jsr skpspc ;init FR0 and one extra mantissa byte lda #$7f sta fr0 sta digit2 ldx #fr0+1 jsr zf1 ;clear decimal flag sta dotflag sta sign ;check for sign ldy cix lda (inbuff),y cmp #'+' beq isplus cmp #'-' bne postsign ror sign isplus: iny postsign: sty cix0 ;skip leading zeroes lda #'0' jsr fp_skipchar ;check if next char is a dot, indicating mantissa <1 lda (inbuff),y cmp #'.' bne not_tiny iny ;set dot flag ror dotflag ;increment anchor so we don't count the dot as a digit for purposes ;of seeing if we got any digits inc cix0 ;skip zeroes and adjust exponent lda #'0' tiny_denorm_loop: cmp (inbuff),y bne tiny_denorm_loop_exit dec fr0 iny bne tiny_denorm_loop tiny_denorm_loop_exit: not_tiny: ;grab digits left of decimal point ldx #1 nextdigit: lda (inbuff),y cmp #'E' beq isexp iny cmp #'.' beq isdot eor #'0' cmp #10 bcs termcheck ;write digit if we haven't exceeded digit count cpx #6 bcs afterwrite bit digit2 bpl writehi ;clear second digit flag dec digit2 ;merge in low digit ora fr0,x sta fr0,x ;advance to next byte inx bne afterwrite writehi: ;set second digit flag inc digit2 ;shift digit to high nibble and write asl asl asl asl sta fr0,x afterwrite: ;adjust digit exponent if we haven't seen a dot yet bit dotflag smi:inc fr0 ;go back for more jmp nextdigit isdot: lda dotflag bne termcheck ;set the dot flag and loop back for more ror dotflag bne nextdigit termcheck: dey cpy cix0 beq err_carryset term: ;stash offset sty cix term_rollback_exp: ;divide digit exponent by two and merge in sign rol sign ror fr0 ;check if we need a one digit shift bcs nodigitshift ;shift right one digit ldx #4 digitshift: lsr fr0+1 ror fr0+2 ror fr0+3 ror fr0+4 ror fr0+5 dex bne digitshift nodigitshift: jmp fp_normalize err_carryset: rts isexp: cpy cix0 beq err_carryset ;save off this point as a fallback in case we don't actually have ;exponential notation sty cix ;check for sign ldx #0 iny lda (inbuff),y cmp #'+' beq isexpplus cmp #'-' bne postexpsign dex ;x=$ff isexpplus: iny postexpsign: stx xinvert ;pull up to two exponent digits -- check first digit jsr fp_isdigit_y iny bcs term_rollback_exp ;stash first digit tax ;check for another digit jsr fp_isdigit_y bcs notexpzero2 iny adc fp_mul10,x tax notexpzero2: txa ;zero is not a valid exponent beq term_rollback_exp ;check if mantissa is zero -- if so, don't bias ; ldx fr0+1 ; beq term ;apply sign to exponent eor xinvert rol xinvert ;bias digit exponent adc fr0 sta fr0 expterm: jmp term .endp ;========================================================================== .proc fp_fmul_carryup round_loop: adc fr0,x sta fr0,x dec_entry: dex lda #0 bcs round_loop rts .endp ;========================================================================== .proc fp_tab_lo_100 :10 dta <[100*#] .endp ;========================================================================== fixadr $d8e6 _fasc = fasc .proc fasc dotcntr = ztemp4 expval = ztemp4+1 trimbase = ztemp4+2 jsr ldbufa ldy #0 ;read exponent and check if number is zero lda fr0 bne notzero lda #$b0 sta (inbuff),y rts notzero: sty expval sty trimbase ;insert sixth mantissa byte sty fr0 ;check if number is negative bpl ispos ldx #'-' dec inbuff stx lbuff-1 inc trimbase iny ispos: ;set up for 5 mantissa bytes ldx #-5 ;compute digit offset to place dot ; 0.001 (10.0E-04) = 3E 10 00 00 00 00 -> -1 ; 0.01 ( 1.0E-02) = 3F 01 00 00 00 00 -> 1 ; 0.1 (10.0E-02) = 3F 10 00 00 00 00 -> 1 ; 1.0 ( 1.0E+00) = 40 01 00 00 00 00 -> 3 ; 10.0 (10.0E+00) = 40 10 00 00 00 00 -> 3 ; 100.0 ( 1.0E+02) = 40 01 00 00 00 00 -> 5 ; 1000.0 (10.0E+02) = 40 10 00 00 00 00 -> 5 asl sec sbc #125 ;check if we should go to exponential form (exp >= 10 or <=-3) cmp #12 bcc noexp ;yes - compute and stash explicit exponent sbc #2 ;!! - carry set from BCC fail sta expval ;$0A <= expval < $FE ;reset dot counter lda #2 ;exclude first two digits from zero trim inc trimbase inc trimbase noexp: ;check if number is less than 1.0 and init dot counter cmp #2 bcs not_tiny ;use sixth mantissa byte adc #2 dex not_tiny: sta dotcntr ;$02 <= dotcntr < $0C ;check if number begins with a leading zero lda fr0+6,x cmp #$10 bcs digitloop dec trimbase ;yes - skip the high digit lsr expval asl expval bne writelow dec dotcntr bcc writelow ;write out mantissa digits digitloop: dec dotcntr bne no_hidot lda #'.' sta (inbuff),y iny no_hidot: ;write out high digit lda fr0+6,x lsr lsr lsr lsr ora #$30 sta (inbuff),y iny writelow: ;write out low digit dec dotcntr bne no_lodot lda #'.' sta (inbuff),y iny no_lodot: lda fr0+6,x and #$0f ora #$30 sta (inbuff),y iny ;next digit inx bne digitloop ;skip trim if dot hasn't been written lda dotcntr bpl skip_zero_trim ;trim off leading zeroes lda #'0' lzloop: cpy trimbase beq stop_zero_trim dey cmp (inbuff),y beq lzloop ;trim off dot stop_zero_trim: lda (inbuff),y cmp #'.' bne no_trailing_dot skip_zero_trim: dey lda (inbuff),y no_trailing_dot: ;check if we have an exponent to deal with ldx expval beq noexp2 ;print an 'E' lda #'E' iny sta (inbuff),y ;check for a negative exponent txa bpl exppos eor #$ff tax inx lda #'-' dta {bit $0100} exppos: lda #'+' expneg: iny sta (inbuff),y ;print tens digit, if any txa sec ldx #$2f tensloop: inx sbc #10 bcs tensloop pha txa iny sta (inbuff),y pla adc #$3a iny noexp2: ;set high bit on last char ora #$80 sta (inbuff),y rts .endp ;========================================================================== ; IPF [D9AA] Convert 16-bit integer at FR0 to FP ; ; !NOTE! Cannot use FR2/FR3 -- MAC/65 requires that $DE-DF be preserved. ; fixadr $d9aa .proc ipf sed ldx #fr0+2 ldy #5 jsr zfl ldy #16 byteloop: ;shift out binary bit asl fr0 rol fr0+1 ;shift in BCD bit lda fr0+4 adc fr0+4 sta fr0+4 lda fr0+3 adc fr0+3 sta fr0+3 rol fr0+2 dey bne byteloop lda #$43 sta fr0 jmp fp_normalize_cld .endp ;========================================================================== ; FPI [D9D2] Convert FR0 to 16-bit integer at FR0 with rounding ; ; This cannot overwrite FR1. Darg relies on being able to stash a value ; there across a call to FPI in its startup. ; fixadr $d9d2 .nowarn .proc fpi _acc0 = fr2 _acc1 = fr2+1 ;error out if it's guaranteed to be too big or negative (>999999) lda fr0 cmp #$43 bcs err ;zero number if it's guaranteed to be too small (<0.01) sbc #$3f-1 ;!!- carry is clear bcc zfr0 tax ;clear temp accum and set up rounding lda #0 ldy fr0+1,x cpy #$50 rol ;!! - clears carry too sta fr0 lda #0 ;check for [0.01, 1) dex bmi done ;convert ones/tens digit pair to binary (one result byte: 0-100) lda fr0+1,x jsr fp_dectobin adc fr0 adc fp_dectobin_tab,y clc sta fr0 lda #0 ;check if we're done dex bmi done ;convert hundreds/thousands digit pair to binary (two result bytes: 0-10000) lda fr0+1,x jsr fp_dectobin lda fr0 adc fp_tab_lo_1000,y sta fr0 lda fp_tab_hi_1000,y adc #0 pha lda fr0+1,x and #$0f tay lda fr0 adc fp_tab_lo_100,y sta fr0 pla adc fp_tab_hi_100,y ;check if we're done dex bmi done ;convert ten thousands digit pair to binary (two result bytes: 0-100000, overflow possible) ldy fr0+1,x cpy #$07 bcs err tax tya asl asl asl asl adc fr0 sta fr0 txa adc fp_tab_hi_10000-1,y done: ;move result back to FR0, with rounding sta fr0+1 err: rts .endp ;========================================================================== fp_mul10: dta 0,10,20,30,40,50,60,70,80,90 ;========================================================================== ; ZFR0 [DA44] Zero FR0 ; ZF1 [DA46] Zero float at (X) ; ZFL [DA48] Zero float at (X) with length Y (UNDOCUMENTED) ; fixadr $da44 zfr0: ldx #fr0 ckaddr $da46 zf1: ldy #6 ckaddr $da48 zfl: lda #0 zflloop: sta 0,x inx dey bne zflloop rts ;========================================================================== ; LDBUFA [DA51] Set LBUFF to #INBUFF (UNDOCUMENTED) ; fixadr $da51 ldbufa: mwa #lbuff inbuff rts ;========================================================================== ; FPILL_SHL16 [DA5A] Shift left 16-bit word at $F7:F8 (UNDOCUMENTED) ; ; Illegal entry point used by MAC/65 when doing hex conversion. ; ; Yes, even the byte ordering is wrong. ; fixadr $da5a .nowarn .proc fpill_shl16 asl $f8 rol $f7 rts .endp ;** 1 byte free** ;========================================================================== ; FSUB [DA60] Subtract FR1 from FR0; FR1 is altered ; FADD [DA66] Add FR1 to FR0; FR1 is altered fixadr $da60 fadd = fsub._fadd .proc fsub _diffmode = fr1 ;toggle sign on FR1 lda fr1 eor #$80 sta fr1 ;fall through to FADD ckaddr $da66 _fadd: ;if fr1 is zero, we're done lda fr1 beq sum_xit ;if fr0 is zero, swap lda fr0 beq swap ;compute difference in exponents, ignoring sign lda fr1 ;load fr1 sign eor fr0 ;compute fr0 ^ fr1 signs and #$80 ;mask to just sign tax eor fr1 ;flip fr1 sign to match fr0 clc sbc fr0 ;compute difference in exponents - 1 bcc noswap ;swap FR0 and FR1 swap: jsr fp_swap ;loop back and retry bmi _fadd noswap: ;A = FR1 - FR0 - 1 ;X = add/sub flag ;compute positions for add/subtract adc #6 ;A = (FR1) - (FR0) + 6 !! carry is clear coming in tay ;check if FR1 is too small in magnitude to matter bmi sum_xit ;jump to decimal mode and prepare for add/sub loops sed ;check if we are doing a sum or a difference cpx #$80 ldx #5 bcs do_subtract ;set up rounding lda #0 cpy #5 bcs add_no_round lda fr1+1,y add_no_round: cmp #$50 ;add mantissas tya beq post_add_loop add_loop: lda fr1,y adc fr0,x sta fr0,x dex dey bne add_loop post_add_loop: ;check if we had a carry out bcc sum_xit ;carry it up bcs sum_carryloop_start sum_carryloop: lda fr0+1,x adc #0 sta fr0+1,x bcc sum_xit sum_carryloop_start: dex bpl sum_carryloop jsr fp_carry_expup sum_xit: ;exit decimal mode ;normalize if necessary and exit (needed for borrow, as well to check over/underflow) jmp fp_normalize_cld do_subtract: ;subtract FR0 and FR1 mantissas (!! carry is set coming in) sty fr1 bcs sub_loop_entry sub_loop: lda fr0,x sbc fr1+1,y sta fr0,x dex sub_loop_entry: dey bpl sub_loop jmp fp_fsub_cont .endp ;========================================================================== ; Entry: ; A = BCD value ; P.D = clear ; ; Exit: ; A = binary value ; Y = modified ; .proc fp_dectobin pha lsr lsr lsr lsr tay pla .def :fp_exit_success clc rts .endp ;========================================================================== ; FMUL [DADB]: Multiply FR0 * FR1 -> FR0 ; fixadr $dad6 fp_fld1r_const_fmul: ldy #>fpconst_ten fp_fld1r_fmul: jsr fld1r ckaddr $dadb .proc fmul ;We use FR0:FR3 as a double-precision accumulator, and copy the ;original multiplicand value in FR0 to FR1. The multiplier in ;FR1 is converted to binary digit pairs into FR2. _offset = _fr3+5 _offset2 = fr2 ;if FR0 is zero, we're done lda fr0 beq fp_exit_success ;if FR1 is zero, zero FR0 and exit lda fr1 clc beq fp_exit_zero ;move fr0 to fr2 jsr fp_fmul_fr0_to_binfr2 ;compute new exponent and stash lda fr1 clc jsr fp_adjust_exponent.fmul_entry sta fr0 inc fr0 ;clear accumulator through to exponent byte of fr1 ldx #fr0+1 ldy #12 sed jmp fp_fmul_innerloop .endp underflow_overflow: pla pla fp_exit_zero: jmp zfr0 .proc fp_adjust_exponent fdiv_entry: lda fr1 eor #$7f sec fmul_entry: ;stash modified exp1 tax ;compute new sign eor fr0 and #$80 sta fr1 ;merge exponents txa adc fr0 tax eor fr1 ;check for underflow/overflow cmp #128-49 bcc underflow_overflow cmp #128+49 bcs underflow_overflow ;rebias exponent txa sbc #$40-1 ;!! - C=0 from bcs fail rts .endp ;========================================================================== .pages 1 ;optimized by fp_fld1r_const_fmul fpconst_ten: .fl 10 fpconst_ln10: .fl 2.3025850929940456840179914546844 .endpg ;========================================================================== ; FDIV [DB28] Divide FR0 / FR1 -> FR0 ; ; Compatibility: ; - It is important that FDIV rounds if FADD/FMUL do. Otherwise, some ; forms of square root computation can have a slight error on integers, ; which breaks TICKTOCK.BAS. ; fixadr $db28 .proc fdiv _digit = _fr3+1 _index = _fr3+2 ;check if divisor is zero lda fr1 beq err ;check if dividend is zero lda fr0 beq ok ;compute new exponent jsr fp_adjust_exponent.fdiv_entry jsr fp_fdiv_init digitloop: ;just keep going if we're accurate lda fr0 ora fr0+1 beq nextdigit ;check if we should either divide or add based on current sign (stored in carry) bcc incloop jsr fp_fdiv_decloop bcc nextdigit incloop: ;decrement quotient mantissa byte lda #0 sbc _digit ldx _index downloop: adc fr2+8,x sta fr2+8,x lda #$99 dex bcc downloop ;add mantissas clc .rept 6 lda fr0+(5-#) adc fr1+(5-#) sta fr0+(5-#) .endr ;keep going until we overflow bcc incloop nextdigit: ;shift dividend (make sure to save carry state) php ldx #4 bitloop: asl fr0+5 rol fr0+4 rol fr0+3 rol fr0+2 rol fr0+1 rol fr0 dex bne bitloop plp ;next digit lda _digit eor #$09 sta _digit beq digitloop ;next quo byte inc _index bne digitloop ;move back to fr0 jsr fp_fdiv_complete cld ok: clc rts err: sec rts .endp ;========================================================================== ; SKPSPC [DBA1] Increment CIX while INBUFF[CIX] is a space fixadr $dba1 skpspc: lda #' ' ldy cix fp_skipchar: skpspc_loop: cmp (inbuff),y bne skpspc_xit iny bne skpspc_loop skpspc_xit: sty cix rts ;========================================================================== ; ISDIGT [DBAF] Check if INBUFF[CIX] is a digit (UNDOCUMENTED) fixadr $dbaf isdigt = _isdigt .proc _isdigt ldy cix .def :fp_isdigit_y = * lda (inbuff),y sec sbc #'0' cmp #10 rts .endp ;========================================================================== .proc fp_fdiv_decloop decloop: ;increment quotient mantissa byte lda fdiv._digit ldx fdiv._index uploop: adc fr2+8,x sta fr2+8,x lda #0 dex bcs uploop ;subtract mantissas sec .rept 5 lda fr0+(5-#) sbc fr1+(5-#) sta fr0+(5-#) .endr lda fr0 sbc #0 sta fr0 ;keep going until we underflow bcs decloop rts .endp ;========================================================================== .proc fp_fdiv_complete ldx #fr2 ldy _fr3 lda fr2+1 bne no_normstep inx dey no_normstep: sty 0,x jmp fld0r_zp .endp ;========================================================================== ; NORMALIZE [DC00] Normalize FR0 (UNDOCUMENTED) fixadr $dc00-1 fp_normalize_cld: cld ckaddr $dc00 fp_normalize: .nowarn .proc normalize ldy #5 normloop: lda fr0 and #$7f beq underflow2 ldx fr0+1 beq need_norm ;Okay, we're done normalizing... check if the exponent is in bounds. ;It needs to be within +/-48 to be valid. If the exponent is <-49, ;we set it to zero; otherwise, we mark overflow. cmp #64-49 bcc underflow cmp #64+49 rts need_norm: dec fr0 ldx #-5 normloop2: mva fr0+7,x fr0+6,x inx bne normloop2 stx fr0+6 dey bne normloop ;Hmm, we shifted out everything... must be zero; reset exponent. This ;is critical since Atari Basic depends on the exponent being zero for ;a zero result. sty fr0 sty fr0+1 xit: clc rts underflow2: clc underflow: jmp zfr0 .endp ;========================================================================== ; HELPER ROUTINES ;========================================================================== .proc fp_fdiv_init sta _fr3 ldx #fr2+1 jsr zf1 lda #$50 sta fr2+7 ;rounding byte sta fr2 ;sentinel byte to prevent carries into FR1 ldx #0 stx fr0 stx fr1 ;check if dividend begins with a leading zero digit -- if so, shift it left 4 ;and begin with the tens digit lda fr1+1 cmp #$10 bcs start_with_ones ldy #4 bitloop: asl fr1+5 rol fr1+4 rol fr1+3 rol fr1+2 rol fr1+1 dey bne bitloop ldx #$09 start_with_ones: stx fdiv._digit sed ldx #0-7 stx fdiv._index sec rts .endp ;-------------------------------------------------------------------------- .proc fp_fsub_cont ;check if we had a borrow bcs sub_xit bcc borrow_loop_start ;propagate borrow up borrow_loop: lda fr0+1,x sbc #0 sta fr0+1,x bcs sub_xit borrow_loop_start: dex bpl borrow_loop ldx #5 sec diff_borrow: lda #0 sbc fr0,x sta fr0,x dex bne diff_borrow lda #$80 eor fr0 sta fr0 sub_xit: norm_loop: ;Check if the exponent is in bounds. ;It needs to be within +/-48 to be valid. If the exponent is <-49, ;we set it to zero. Overflow isn't possible as this is the mantissa ;subtraction path. lda fr0 and #$7f cmp #64-49 bcc underflow ldx fr0+1 beq need_norm ;check if we need to round, i.e.: ; 2.00000000 ;-0.000000005 ;load rounding byte offset ldx fr1 cpx #4 bcs no_round lda fr1+2,x cmp #$50 bcs round_up no_round: clc cld rts need_norm: ldx #-4 scan_loop: dec fr0 ldy fr0+6,x bne found_pos inx bne scan_loop ;hmm... mantissa is all zero. underflow2: clc underflow: cld jmp zfr0 found_pos: ;shift up mantissa ldy #0 shift_loop: mva fr0+6,x fr0+1,y iny inx bne shift_loop ;clear remaining mantissa bytes clear_loop: stx fr0+1,y+ cpy #6 bne clear_loop ;check if we need to round ;if not, loop back to check the exponent and exit ; bcc norm_loop beq norm_loop round_up: ;jump back into fadd code to carry up and exit ldx #5 jmp fsub.sum_carryloop .endp ;-------------------------------------------------------------------------- .proc fp_fmul_innerloop _offset = _fr3+5 _offset2 = fr2 jsr zfl ;set up for 7 bits per digit pair (0-99 in 0-127) ldy #7 ;set rounding byte, assuming renormalize needed (fr0+2 through fr0+6) lda #$50 sta fr0+7 ;begin outer loop -- this is where we process one _bit_ out of each ;multiplier byte in FR2's mantissa (note that this is inverted in that ;it is bytes-in-bits instead of bits-in-bytes) offloop: ;begin inner loop -- here we process the same bit in each multiplier ;byte, going from byte 5 down to byte 1 ldx #5 offloop2: ;shift an inverted bit out of fr1 mantissa lsr fr2,x bcs noadd ;add fr1 to fr0 at offset .rept 6 lda fr0+(5-#),x adc fr1+(5-#) sta fr0+(5-#),x .endr ;check if we have a carry out to the upper bytes bcc no_carry stx _offset2 jsr fp_fmul_carryup.dec_entry ldx _offset2 no_carry: noadd: ;go back for next byte dex bne offloop2 ;double fr1 clc lda fr1+5 adc fr1+5 sta fr1+5 lda fr1+4 adc fr1+4 sta fr1+4 lda fr1+3 adc fr1+3 sta fr1+3 lda fr1+2 adc fr1+2 sta fr1+2 lda fr1+1 adc fr1+1 sta fr1+1 lda fr1+0 adc fr1+0 sta fr1+0 ;loop back until all mantissa bytes finished dey bne offloop ;check if no renormalize is needed, and if so, re-add new rounding lda fr0+1 beq renorm_needed lda #$50 ldx #6 jsr fp_fmul_carryup renorm_needed: ;all done jmp fp_normalize_cld .endp ;========================================================================== ; PLYEVL [DD40] Eval polynomial at (X:Y) with A coefficients using FR0 ; fixadr $dd3e fp_plyevl_10: lda #10 .nowarn .proc plyevl ;stash arguments stx fptr2 sty fptr2+1 sta _fpcocnt ;copy FR0 -> PLYARG ldx #plyarg jsr fst0r jsr zfr0 loop: ;load next coefficient and increment coptr lda fptr2 tax clc adc #6 sta fptr2 ldy fptr2+1 scc:inc fptr2+1 jsr fld1r ;add coefficient to acc jsr fadd bcs xit dec _fpcocnt beq xit ;copy PLYARG -> FR1 ;multiply accumulator by Z and continue ldx #plyarg jsr fp_fld1r_fmul bcc loop xit: rts .endp ;========================================================================== .proc fp_swap ldx #5 swaploop: lda fr0,x ldy fr1,x sta fr1,x sty fr0,x dex bpl swaploop rts .endp ;========================================================================== ; FLD0R [DD89] Load FR0 from (X:Y) ; FLD0P [DD8D] Load FR0 from (FLPTR) ; fixadr $dd87 fld0r_zp: ldy #0 ckaddr $dd89 fld0r: stx flptr sty flptr+1 ckaddr $dd8d fld0p: ldy #5 fld0ploop: lda (flptr),y sta fr0,y dey bpl fld0ploop rts ;========================================================================== ; FLD1R [DD98] Load FR1 from (X:Y) ; FLD1P [DD9C] Load FR1 from (FLPTR) ; fixadr $dd98 fld1r: stx flptr sty flptr+1 ckaddr $dd9c fld1p: ldy #5 fld1ploop: lda (flptr),y sta fr1,y dey bpl fld1ploop rts ;========================================================================== ; FST0R [DDA7] Store FR0 to (X:Y) ; FST0P [DDAB] Store FR0 to (FLPTR) ; fixadr $dda7 fst0r: stx flptr sty flptr+1 ckaddr $ddab fst0p: ldy #5 fst0ploop: lda fr0,y sta (flptr),y dey bpl fst0ploop rts ;========================================================================== ; FMOVE [DDB6] Move FR0 to FR1 ; fixadr $ddb6 fmove: ldx #5 fmoveloop: lda fr0,x sta fr1,x dex bpl fmoveloop rts ;========================================================================== ; EXP [DDC0] Compute e^x ; EXP10 [DDCC] Compute 10^x ; fixadr $ddc0 exp10 = exp._exp10 .proc exp ldx #fpconst_log10_e jsr fld1r ;we could use fp_fld1r_fmul, but then we have a hole :( jsr fmul bcs err2 ckaddr $ddcc _exp10: ;stash sign and compute abs lda fr0 sta _fptemp1 and #$7f sta fr0 ldy #0 ;check for |exp| >= 100 which would guarantee over/underflow cmp #$40 bcc abs_ok beq abs_large abs_too_big: ;okay, the |x| is too big... check if the original was negative. ;if so, zero and exit, otherwise error. lda _fptemp1 bpl err2 clc jmp zfr0 abs_large: ;|exp|>=1, so split it into integer/fraction lda fr0+1 jsr fp_dectobin adc fp_dectobin_tab,y pha lda #0 sta fr0+1 sta fr0+6 jsr fp_normalize pla tay abs_ok: ;stash integer portion of exponent sty _fptemp0 ;compute approximation z = 10^y ldx #coeff jsr fp_plyevl_10 ;tweak exponent lsr _fptemp0 ;scale by 10 if necessary bcc even ldx #fp_one jsr fld0r jmp fdiv err2: xit2: rts coeff: ;Minimax polynomial for 10^x over 0 <= x < 1 .fl 0.0146908308 .fl -0.002005331171 .fl 0.0919452045 .fl 0.1921383884 .fl 0.5447325197 .fl 1.17018250 .fl 2.03478581 .fl 2.65094494 .fl 2.30258512 .fl 1 .endp ;========================================================================== fpconst_log10_e: .fl 0.43429448190325182765112891891661 .proc fp_carry_expup ;adjust exponent inc fr0 ;shift down FR0 ldx #4 sum_shiftloop: lda fr0,x sta fr0+1,x dex bne sum_shiftloop ;add a $01 at the top inx stx fr0+1 rts .endp ;========================================================================== .proc fp_fmul_fr0_to_binfr2 ;$15 bytes ldx #4 loop: lda fr0+1,x lsr lsr lsr lsr tay clc lda fr0+1,x adc fp_dectobin_tab,y eor #$ff sta fr2+1,x dex bpl loop .def :fp_rts1 rts .endp ;========================================================================== ; REDRNG [DE95] Reduce range via y = (x-C)/(x+C) (undocumented) ; ; X:Y = pointer to C argument ; fixadr $de95 redrng = _redrng .proc _redrng stx fptr2 sty fptr2+1 jsr fld1r ldx #fpscr jsr fst0r jsr fadd bcs fail ldx #plyarg jsr fst0r ldx #fpscr jsr fld0r ldx fptr2 ldy fptr2+1 jsr fld1r jsr fsub bcs fail ldx #plyarg jsr fld1r jmp fdiv fail = fp_rts1 .endp ;========================================================================== ; LOG [DECD] Compute ln x ; LOG10 [DED1] Compute log10 x ; fixadr $decd log10 = log._log10 .proc log lsr _fptemp1 bpl entry ckaddr $ded1 _log10: sec ror _fptemp1 entry: ;throw error on negative number lda fr0 bmi err ;stash exponentx2 - 128 asl eor #$80 sta _fptemp0 ;raise error if argument is zero lda fr0+1 beq err ;reset exponent so we are in 1 <= z < 100 ldx #$40 stx fr0 ;split into three ranges based on mantissa: ; 1/sqrt(10) <= x < 1: [31, 99] divide by 100 ; sqrt(10)/100 <= x < 1/sqrt(10): [ 3, 30] divide by 10 ; 0 < x < sqrt(10)/100: [ 1, 2] leave as-is cmp #$03 bcc post_range_adjust cmp #$31 bcc mid_range ;increase result by 1 (equivalent to *10 input) inc _fptemp0 bne adjust_exponent mid_range: ;multiply by 10 ldx #fp_one jsr redrng ;stash y so we can later multiply it back in ldx #fpscr jsr fst0r ;square the value so we compute a series on y^2n jsr fmove jsr fmul ;do polynomial expansion ldx #fpconst_log10coeff jsr fp_plyevl_10 bcs err2 ;multiply back in so we have series on y^(2n+1) ldx #fpscr jsr fp_fld1r_fmul ;stash jsr fmove ;convert exponent adjustment back to float (signed) lda #0 sta fr0+1 ldx _fptemp0 bpl expadj_positive sec sbc _fptemp0 tax expadj_positive: stx fr0 jsr ipf ;merge (cannot fail) asl fr0 asl _fptemp0 ror fr0 jsr fadd ;scale if doing log bit _fptemp1 bmi xit2 ldx #[1000*#] .endp .proc fp_tab_hi_100 :10 dta >[100*#] .endp .proc fp_tab_hi_10000 :6 dta >[10000*[#+1]] .endp ;========================================================================== ; HALF (used by Atari BASIC) ; fixadr $df6c fpconst_half: .fl 0.5 ;========================================================================== ; log10(x) coefficients ; ; LOG10 computes: ; -0.30 <= z <= 3.0 ; y = (z-1)/(z+1) -0.54 <= y <= 0.5 ; x = y^2 0 <= x <= 0.29 ; log10(z) = f(x)*y ; ; Therefore: ; f(x) = log10((1+y)/(1-y))/y ; fpconst_log10coeff: ;Maclaurin series expansion for log10((z-1)/(z+1)) .fl 0.2026227154 .fl -0.0732044921 .fl 0.1060983564 .fl 0.0560417329 .fl 0.0804188407 .fl 0.0963916015 .fl 0.1240896135 .fl 0.1737176646 .fl 0.2895296558 .fl 0.8685889638 ;========================================================================== ; Arctangent coefficients ; ; The 11 coefficients here form a power series approximation ; f(x^2) ~= atn(x)/x. This is not an official feature of the math pack but ; is relied upon by BASIC. ; ; We used to use the coefficients from Abramowitz & Stegun 4.4.49 here, but ; there seems to be an error there such that the result falls far short ; of the specified 2x10^-8 accuracy over 0<=x<=1 at x=1. Instead, we now ; use a custom minimax polynomial for f(y)=atn(sqrt(y))/sqrt(y) where y=x^2. ; fixadr $dfae atncoef: ;coefficients for atn(x)/x ~= f(x^2) ;see Abramowitz & Stegun 4.4.49 .fl 0.001112075881 ;x**10*1.11207588057982e-3 .fl -0.007304087520 ;x**9*-7.30408751951452e-3 .fl 0.0224965573 ;x**8*2.24965572957342e-2 .fl -0.0446185172 ;x**7*-4.46185172165888e-2 .fl 0.0673463245 ;x**6*6.73463245104305e-2 .fl -0.0880690664 ;x**5*-8.80690663570546e-2 .fl 0.1105667499 ;x**4*1.10566749879313e-1 .fl -0.1427949312 ;x**3*-1.42794931245212e-1 .fl 0.1999963060 ;x**2*1.99996306023439e-1 .fl -0.3333332472 ;x**1*-3.33333247188074e-1 ;x**0*9.99999999667198e-1 fp_one: .fl 1.0 ;also an arctan coeff fixadr $dff0 fp_pi4: ;pi/4 - needed by Atari Basic ATN() .fl 0.78539816339744830961566084581988 fp_dectobin_tab: :10 dta <[-6*#] ckaddr $e000 atari800-5.0.0/emuos/src/misc.s000066400000000000000000000022341425067567700161260ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Miscellaneous data ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ;Used by PBI and display/editor. ; .proc ReversedBitMasks dta $80,$40,$20,$10,$08,$04,$02,$01 .endp ;========================================================================== ;Used by CIO devices .proc CIOExitSuccess ldy #1 exit_not_supported: rts .endp CIOExitNotSupported = CIOExitSuccess.exit_not_supported ;========================================================================== ; Sound a bell using the console speaker. ; ; Entry: ; Y = duration ; ; Modified: ; X ; ; Preserved: ; A ; .proc Bell pha lda #$08 soundloop: ldx #4 pha delay: lda vcount cmp:req vcount dex bne delay pla eor #$08 sta consol bne soundloop dey bne soundloop pla rts .endpatari800-5.0.0/emuos/src/pbi.s000066400000000000000000000136131425067567700157500ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Parallel Bus Interface routines ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .if _KERNEL_PBI_SUPPORT icl 'cio.inc' ;========================================================================== ; PBI device ROM entry points: ; $D800 Checksum low (unused) ; $D801 Checksum high (unused) ; $D802 Revision (unused) ; $D803 ID byte; must be $80. ; $D804 Device type (unused) ; $D805 JMP sio_vector ; $D806 (cont.) ; $D807 (cont.) ; $D808 JMP irq_vector ; $D809 (cont.) ; $D80A (cont.) ; $D80B ID byte; must be $91 ; $D80C Device name (unused) ; $D80D CIO open vector - 1 ; $D80E (cont.) ; $D80F CIO close vector - 1 ; $D810 (cont.) ; $D811 CIO get byte vector - 1 ; $D812 (cont.) ; $D813 CIO put byte vector - 1 ; $D814 (cont.) ; $D815 CIO get status vector - 1 ; $D816 (cont.) ; $D817 CIO special vector - 1 ; $D818 (cont.) ; $D819 JMP init_vector ; $D81A (cont.) ; $D81B (cont.) ; ;========================================================================== ; Scan for PBI devices. ; ; The details: ; - $D1FF is the PBI device select register; 1 selects a device. ; - A selected device, if it exists, maps its ROM into $D800-DFFF, on ; top of the math pack. ; - ID bytes are checked to ensure that a device ROM is actually present. ; (This means that the math pack must not match those bytes!) ; - SHPDVS is the device selection shadow variable. It must match the ; value written to $D1FF whenever the PBI ROM is invoked so that the ; PBI device code can detect its ID. ; - PDVMSK is the device enable mask and is used by SIO to call into ; PBI devices. Each bit in this mask indicates that a PBI device is ; available to possibly service requests. It is NOT set by this ; routine, but by the PBI device init code. ; .proc PBIScan ;set up interrupt handler mwa #PBIHandleIRQ vpirq ;begin scan lda #$01 loop: ;select next device sta shpdvs sta $d1ff ;check ID bytes ldy $d803 cpy #$80 bne invalid ldy $d80b cpy #$91 bne invalid ;init PBI device jsr $d819 invalid: ;next device lda shpdvs asl bne loop ;deselect last device sta shpdvs sta $d1ff rts .endp ;========================================================================== ; Entry: ; A, X saved on stack ; A = active PBI IRQ mask ($D1FF AND PDMSK) ; ; Exit: ; A, X restored ; Interrupt exit ; .proc PBIHandleIRQ ;isolate lowest bit (ID of highest priority device) sta jveck eor #$ff clc adc #1 and jveck ;save off the current device mask and select interrupting device ldx shpdvs sta shpdvs sta $d1ff txa pha ;call through interrupt vector jsr $d808 ;restore previously (un)selected device pla sta shpdvs sta $d1ff ;restore X, A and exit pla tax pla rti .endp ;========================================================================== .proc PBIAttemptSIO lda pdvmsk bne begin_scan fail: sta shpdvs sta $d1ff clc rts begin_scan: lda #0 sec loop: ;advance to next device bit rol ;check if we've scanned all 8 IDs bcs fail ;check if device exists bit pdvmsk ;keep scanning if not beq loop ;select the device sta shpdvs sta $d1ff ;attempt I/O pha jsr $d805 pla ;loop back if PBI handler didn't claim the I/O bcc loop ;deselect last device lda #0 sta shpdvs sta $d1ff ;all done rts .endp ;========================================================================== .proc PBIGenericDeviceOpen ldy #0 bpl PBIGenericDevicePutByte.vector_entry .endp ;========================================================================== .proc PBIGenericDeviceClose ldy #2 bpl PBIGenericDevicePutByte.vector_entry .endp ;========================================================================== .proc PBIGenericDeviceGetByte ldy #4 bpl PBIGenericDevicePutByte.vector_entry .endp ;========================================================================== .proc PBIGenericDevicePutByte ldy #6 vector_entry: sty reladr sta reladr+1 lda #0 sec loop: ;advance to next device bit rol ;check if we've scanned all 8 IDs bcs fail ;check if device exists and keep scanning if not bit pdvmsk beq loop ;select the device -- note that the write to SHPDVS *MUST* come ;first, in case a PBI IRQ happens, since we do *NOT* have IRQs ;masked here! sta shpdvs sta $d1ff ;attempt I/O lda ciochr jsr dispatch ;loop back if PBI handler didn't claim the I/O bcc loop ;all done done: ldx #0 stx shpdvs stx $d1ff rts fail: ldy #CIOStatUnkDevice bne done dispatch: ldy reladr lda $d80e,y pha lda $d80d,y pha lda reladr+1 ldy #CIOStatNotSupported rts .endp ;========================================================================== .proc PBIGenericDeviceGetStatus ldy #8 bpl PBIGenericDevicePutByte.vector_entry .endp ;========================================================================== .proc PBIGenericDeviceSpecial ldy #10 bpl PBIGenericDevicePutByte.vector_entry .endp ;========================================================================== .macro PBI_VECTOR_TABLE dta a(PBIGenericDeviceOpen-1) dta a(PBIGenericDeviceClose-1) dta a(PBIGenericDeviceGetByte-1) dta a(PBIGenericDevicePutByte-1) dta a(PBIGenericDeviceGetStatus-1) dta a(PBIGenericDeviceSpecial-1) .endm .endif atari800-5.0.0/emuos/src/phandler.s000066400000000000000000000363331425067567700167770ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Peripheral Handler routines ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; Add handler to HATABS. ; ; Input: ; X Name of device ; A:Y CIO handler table address ; ; Returns: ; N=1 HATABS is full. ; C=0 Handler added successfully. ; C=1 Handler already exists; X points to address entry ; A:Y preserved (required by SDX 4.43rc) ; .proc PHAddHandler pha tya pha txa ldx #33 search_loop: cmp hatabs,x beq found_existing dex dex dex bpl search_loop insert_loop: inx inx inx ldy hatabs,x beq found_empty cpx #36 bne insert_loop ;oops... table is full! pla pla lda #$ff sec rts found_existing: pla tay pla inx ;X=address offset, N=0 (not full) sec ;C=1 (already exists) rts found_empty: sta hatabs,x pla sta hatabs+1,x pla sta hatabs+2,x asl ;N=0 (not full) clc ;C=0 (added successfully) rts .endp ;========================================================================== ; Remove peripheral handler. ; ; Entry: ; A:Y Address of handler to remove ; ; Exit: ; C=0 Removal was successful ; C=1 Removal failed (not found, broken chain or handler size was ; non-zero) ; ; This routine unlinks a peripheral handler from the CHLINK chain. It fails ; if the handler size in the handler table is non-zero, which means that it ; was loaded on power-up. ; ; Note that this routine does NOT remove any handler entries in HATABS. ; .proc PHRemoveHandler ;stash handler address sty reladr sta reladr+1 ;load "chain head" by pretending the chain address is in a handler ;entry ldx #<(chlink-$12) lda #>(chlink-$12) search_loop: ;check if we're at the end tay bne not_end cpx #0 beq epic_fail not_end: ;save off the prev pointer stx ltemp sta ltemp+1 ;load the next pointer ldy #$12 lda (ltemp),y tax iny lda (ltemp),y cmp reladr+1 bne search_loop cpx reladr bne search_loop ;we've found it -- move it into a pointer var stx zchain sta zchain+1 ;check if the handler size is zero ldy #$10 lda (zchain),y iny ora (zchain),y beq size_ok ;whoops... we can't remove this handler. epic_fail: sec rts size_ok: ;unlink the handler ldy #$12 lda (zchain),y ;load low byte tax ;stash it iny lda (zchain),y ;load high byte sta (ltemp),y ;prev->link_hi = next->link_hi dey txa sta (ltemp),y ;prev->link_lo = next->link_lo ;all done clc rts .endp ;========================================================================== ; Init peripheral handler. ; ; Entry: ; A:Y Address of handler table ; C Set if MEMLO should be adjusted, cleared otherwise ; ; Exit: ; C Cleared on success, set on failure ; ; Modified: ; DVSTAT+2, DVSTAT+3 ; ; See also: Sweet 16 OS Supplement part 3, Handler Loader ; .proc PHInitHandler ;save off the table pointer; we use DVSTAT+2/3 per the Sweet16 spec sty dvstat+2 sta dvstat+3 ;save off MEMLO adjust flag php ;move chain to zero page pointer ldx #<(chlink-$12) lda #>(chlink-$11) ;find zero link end_search_loop: ;move to next link stx zchain sta zchain+1 ;load low byte ldy #$12 lda (zchain),y tax iny ;load high byte and check if it is zero lda (zchain),y bne end_search_loop ;check if low byte is zero too cpx #0 bne end_search_loop ;alright, we've found the end of the chain -- link in the table lda dvstat+3 sta (zchain),y tax dey lda dvstat+2 sta (zchain),y ;switch to the new link stx zchain+1 sta zchain ;zero the forward pointer ldy #$13 lda #0 sta (zchain),y dey sta (zchain),y ;jump to handler init jsr PHCallHandlerInit bcc init_ok ;remove handler and return with error (C=1) lda zchain ldy zchain+1 jsr PHRemoveHandler plp sec rts init_ok: ;retrieve the MEMLO adjust flag plp ;zero out the handler size if we aren't adjusting MEMLO bcs adjust_memlo ldy #$10 lda #0 tax sta (zchain),y iny sta (zchain),y adjust_memlo: jsr PHAdjustMemlo ;zero checksum ldy #$0f lda #0 sta (zchain),y ;compute checksum ldy #$11 clc checksum_loop: adc (zchain),y dey bpl checksum_loop adc #0 ;store checksum ldy #$0f sta (zchain),y ;all done - return success clc rts .endp ;========================================================================== .proc PHAdjustMemlo ;load handler size ldy #$11 lda (zchain),y tax dey lda (zchain),y ;adjust MEMLO by handler size clc adc memlo sta memlo txa adc memlo+1 sta memlo+1 rts .endp ;========================================================================== ; Initializes a single handler pointed to by ZCHAIN. ; .proc PHCallHandlerInit lda zchain clc adc #$0b tax lda zchain+1 adc #0 pha txa pha rts .endp ;========================================================================== ; Reinitialize all handlers in the handler chain. ; .proc PHReinitHandlers ;move chain to zero page pointer ldx chlink lda chlink+1 ;find zero link init_loop: ;move to next link stx zchain sta zchain+1 ora zchain beq init_done ;recompute checksum (except for checksum byte) ldy #$11 clc lda (zchain),y- adc (zchain),y- dey adc:rpl (zchain),y- adc #0 ;check if the checksum matches ldy #$0f cmp (zchain),y bne init_done ;reinitialize the handler jsr PHCallHandlerInit bcs init_done ;adjust MEMLO jsr PHAdjustMemlo ;check for a next link ldy #$13 lda (zchain),y tax iny lda (zchain),y bne init_loop ;load high byte and check if it is zero cpx #0 bne init_loop init_done: rts .endp ;========================================================================== ; Startup poll for peripheral handlers. ; ; The protocol for initing handlers from the SIO bus is as follows: ; ; 1. Issue type 3 poll reset (4F/40/4F/4F). ; 2. Issue type 3 poll (4F/40/00/00), reading 4 bytes. ; 2a. If this poll fails with a timeout, we're done. ; 2b. If the poll fails for any other reason, issue a type 3 null poll ; (4F/40/4E/4E) and go back to step 2. ; 3. Compare the size in DVSTAT+0/1 against the amount of memory between ; MEMTOP and MEMLO. If there isn't enough, issue a type 3 null poll ; and go to step 2. ; 4. Call the relocating loader to load the handler. The handler is ; loaded 128 bytes at a time using command $26 (&), AUX1=block, where ; block 0 is the first block. ; 5. Go back to step 2. ; .proc PHStartupPoll ;issue type 3 poll reset (address $4F, command $40, aux $4F4F, no data) ldx #$4F jsr do_simple_poll ;issue type 3 poll (address $4F, command $40, aux $0000, read 4 bytes) poll_loop: lda #$00 sta daux1 sta daux2 sta dbythi mwa #dvstat dbuflo mva #4 dbytlo mva #$40 dstats jsr siov bpl poll_ok cpy #SIOErrorTimeout bne poll_fail exit: rts poll_fail: ;!! - Black Box 2.16 firmware intercepts type 3 polls and forces ;a user abort error (Y=$80), which we must exit on to avoid an infinite ;loop. cpy #$80 beq exit ;we had a failure -- issue a null poll before trying another device ldx #$4e jsr do_simple_poll jmp poll_loop poll_ok: ;DVSTAT now contains the following frame: ; ; DVSTAT+0 handler size, low byte (should be even) ; DVSTAT+1 handler size, high byte ; DVSTAT+2 device address ; DVSTAT+3 peripheral revision number ;Check whether we have enough room between MEMLO and MEMTOP to load ;this handler -- remember that MEMTOP is inclusive. Also, we need to ;alloc an additional byte if MEMLO is odd. lda memlo tax ror txa adc dvstat tax lda memlo+1 adc dvstat+1 cmp memtop+1 bcc mem_ok bne poll_fail cpx memtop bcs mem_ok bne poll_fail mem_ok: ;set up for handler load lda memlo tax ror txa adc #0 sta loadad lda memlo+1 adc #0 sta loadad+1 mva dvstat+2 ddevic sec jsr PHLoadHandler bcs poll_fail ;look for another device jmp poll_loop ;-------------------------------------------------------------------------- do_simple_poll: lda #$4f sta ddevic stx daux1 stx daux2 lda #$40 sta dcomnd lda #$01 sta dunit lda #$00 sta dstats jmp siov .endp ;========================================================================== ; Load peripheral handler over the SIO bus. ; ; Entry: ; C Set to adjust MEMLO, clear to not ; DDEVIC SIO address to load for loading ; LOADAD Handler load address ; ; Modified: ; All relocatable handler variables ; DCB ; DVSTAT ; .proc PHLoadHandler ;save MEMLO adjustment flag php ;set zero-page relocation destination to $80 (should never be used) mva #$80 zloada ;set up relocator get byte handler mwa #PHGetByte gbytea ;set up for get byte, using command $26 and the cassette buffer mva #$26 dcomnd mvx #0 daux1 stx dbythi stx dbuflo dex stx bptr mva #$04 dbufhi mva #$80 dbytlo ;load the handler jsr PHRelocateHandler bcs reloc_fail ;try to init handler, adjusting MEMLO as necessary ldy loadad lda loadad+1 plp jsr PHInitHandler failed: rts reloc_fail: pla rts .endp ;========================================================================== ; Get byte handler used with relocating loader when loading handlers over ; the SIO bus. ; .proc PHGetByte ;try to grab a byte ldx bptr bpl fetch ;issue SIO call to fetch next block mva #$40 dstats jsr siov bmi get_byte_fail ldx #0 fetch: ;read next byte from cassette buffer lda $0400,x inx stx bptr ;all clear clc rts get_byte_fail: sec rts .endp ;========================================================================== ; Relocating loader. ; ; Modified: ; LTEMP (word) ; LCOUNT ; RELADR ; RECLEN ; HIBYTE ; RUNADR (word) ; HIUSED (word) ; ZHIUSE ; ; Record types: ; Non-zp text $00 len { offset-lo offset-hi data* } ; Zero-page text $01 len { offset-lo offset-hi data* } ; Non-zp ref to non-zp $08 len { {offset lo-byte}* } ; Zp >ref to non-zp $09 len { {offset lo-byte}* } ; Absolute text $0A len { addr-lo addr-hi data* } ; End record $0B self-start addr-lo addr-hi ; ; The references need some explanation: ; - The program is split into two sections, a zero-page section and a ; non-zero page section. The two sections are each contiguous. ; - Both the zero-page and non-zero-page sections can reference each ; other. ; - Low-byte references include only the low byte of an address. ; - High-byte references include only the high byte of an address. A ; low byte offset is included in the relocation to enable this. ; - Relocation records are always applied to the last text record ; that was loaded. ; .proc PHRelocateHandler ;make the zero-page load address 16-bit lda #0 sta zloada+1 reloc_loop: ;get a control byte and stash it jsr PHRelocateGetByte sta lcount ;get the length or self-start byte jsr PHRelocateGetByte sta reclen ;dispatch to handler jsr dispatch ;process more records jmp reloc_loop dispatch: ldx lcount ldy cmd_table_ind_tab,x lda cmd_table_hi,y pha lda cmd_table_lo,y pha rts ;--------------------------------------------------------- cmd_table_ind_tab: dta 0,0,1,1,1,1,1,1,2,2,0,3 cmd_table_lo: dta <(PHRelocateLoadText-1) dta <(PHRelocateApplyFixups-1) dta <(PHRelocateApplyHiFixups-1) dta <(PHRelocateEnd-1) cmd_table_hi: dta >(PHRelocateLoadText-1) dta >(PHRelocateApplyFixups-1) dta >(PHRelocateApplyHiFixups-1) dta >(PHRelocateEnd-1) .endp ;========================================================================== .proc PHRelocateLoadText ;retrieve the address into LTEMP jsr PHRelocateGetByte sta ltemp jsr PHRelocateGetByte sta ltemp+1 ;check if we are doing an absolute load ($0A) lda lcount cmp #$0a beq is_absolute ;check whether we should use zero-page ($01) or non-zero-page ($00), ;and adjust LTEMP asl tax adw loadad,x ltemp ltemp is_absolute: ;init counter lda #0 sta lcount ;load reclen-2 bytes dec reclen bne load_loop_start load_loop: jsr PHRelocateGetByte ldy lcount inc lcount sta (ltemp),y load_loop_start: dec reclen bne load_loop rts .endp ;========================================================================== .proc PHRelocateApplyFixups ;get command byte and copy the appropriate reloc target into zchain lda lcount lsr ldx loadad cmp #2 sne ldx zloada stx zchain ;set flag if we are doing a word reloc (types $06, $07) cmp #3 ror zchain+1 reloc_loop: ;fetch offset byte jsr PHRelocateGetByte tay ;fixup low byte lda (ltemp),y clc adc zchain sta (ltemp),y ;check if we're doing a high byte reloc bit zchain+1 bpl low_byte_only ;fixup high byte iny lda (ltemp),y adc loadad+1 sta (ltemp),y low_byte_only: ;loop back if there is more fixup data dec reclen bne reloc_loop rts .endp ;========================================================================== .proc PHRelocateApplyHiFixups reloc_loop: ;fetch offset byte jsr PHRelocateGetByte sta zchain ;fetch low fixup byte jsr PHRelocateGetByte ;add low byte to base clc adc loadad ;fixup high byte ldy zchain lda loadad+1 adc (ltemp),y sta (ltemp),y ;loop back if there is more fixup data dec reclen dec reclen bne reloc_loop rts .endp ;========================================================================== .proc PHRelocateEnd ;read in the address to RUNADR jsr PHRelocateGetByte sta runadr jsr PHRelocateGetByte sta runadr+1 ;check the self-start byte ldx lcount bne do_self_start ;no self-start... zero the addr and exit lda #0 sta runadr sta runadr+1 xit: clc pla pla ldy #1 rts do_self_start: ;check if we need to relocate the address... if it ;is absolute ($01), we're done dex beq xit ;add the non-zp base address and exit adw runadr loadad runadr jmp xit .endp ;========================================================================== .proc PHRelocateGetByte jsr call_get_byte bcc get_byte_ok pla pla get_byte_ok: rts call_get_byte: jmp (gbytea) .endp atari800-5.0.0/emuos/src/printer.s000066400000000000000000000113721425067567700166610ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Printer Handler ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== .proc PrinterInit ;set printer timeout to default mva #30 ptimot rts .endp ;========================================================================== ; Printer close ; ; Flushes any remaining bytes left in the printer buffer to the printer, ; if any. ; ; Compatibility quirks: ; - OS-B fills with $20, while the XL/XE OS fills with $9B. ; - If the buffer was exactly filled without an EOL and is thus empty at ; the time of close, no additional EOL is sent. This is arguably a ; bug as it can cause line splicing with the 1025. ; PrinterClose = _PrinterPutByte.close_entry ;========================================================================== ; Printer put byte ; ; Writes a byte into the printer buffer. If the printer buffer is full ; or an EOL was added, the printer buffer is sent to the printer. ; ; Compatibility quirks: ; - Must be usable without prior Open, or Monkey Wrench II breaks. ; - On an EOL, the remainder of the buffer is padded with $20 before ; being sent to the printer, on both OS-B and the XL/XE OS. ; - ICAX2Z can be changed on the fly to switch between normal and ; sideways orientation, as it is checked on each put byte. ; - If the buffer contains more than 29 characters and the mode is ; switched dynamically from Sideways to Normal mode, OS-B and XLOSv2 ; will miss the stop and overrun the printer buffer. On XLOSv2, ; this generally results in a GINTLK hang. We handle this somewhat ; more gracefully but still treat it as a Don't Do That(tm). ; - ICAX2Z=0 must be interpreted as Normal, because BASIC uses it ; with LPRINT, and the 1025 will NAK any other orientation. ; PrinterPutByte = _PrinterPutByte.put_entry .proc _PrinterPutByte put_entry: ;Check for sideways mode and compute line size - we must do this on every ;write as Monkey Wrench II depends on being able to call P: put byte ;without an open (still broken program behavior, just less crashy now). ldx #40 ldy icax2z cpy #$53 sne:ldx #29 stx pbufsz ;increment and load buffer index inc pbpnt ldx pbpnt ;put char sta prnbuf-1,x ;if we wrote an EOL, force flush now cmp #$9b beq fill_spaces ;check for end of line and flush if so cpx pbufsz bcs fill_done ;exit success xit: ldy #1 rts close_entry: ;check if we have anything in the buffer ldx pbpnt ;exit if buffer is empty beq xit ;If we're building for 800 target, emulate OS-B and fill with $20. ;If we're building for XL/XE target, emulate XLOSv2 and fill with $9B. .if _KERNEL_XLXE lda #$9b dta {bit $0100} .endif ;fill remainder of buffer with spaces fill_spaces: lda #$20 fill_loop: sta prnbuf,x inx cpx pbufsz bcc fill_loop fill_done: ;send line to printer ldy #10 mva:rne iocbdat-1,y ddevic-1,y- ;empty buffer sty pbpnt ;set line length stx dbytlo ;Compute AUX1 byte from length. ; ;Note that the OS manual is wrong -- this byte needs to go into AUX1 and ;not AUX2 as the manual says. ; ; normal (40): 00101000 -> 01001110 ($4E 'N') ; sideways (29): 00011101 -> 01010011 ($53 'S') ; 010_1I1_ txa and #%00011101 eor #%01001110 sta daux1 ;set AUX1 to indicate width to device ;send to printer and exit do_io: mva ptimot dtimlo jmp siov iocbdat: dta $40 ;device dta $01 ;unit dta $57 ;command 'W' dta $80 ;input/output mode (write) dta a(prnbuf) ;buffer address dta a(0) ;timeout dta a(0) ;buffer length .endp ;============================================================================== ;========================================================================== .proc PrinterOpen lda #0 sta pbpnt ;fall through to status to update printer timeout .def :PrinterGetStatus ;setup parameter block ldx #9 mva:rpl iocbdat,x ddevic,x- ;issue status call jsr _PrinterPutByte.do_io bmi error ;update timeout mva dvstat+2 ptimot error: rts iocbdat: dta $40 ;device dta $01 ;unit dta $53 ;command 'S' dta $40 ;input/output mode (read) dta a(dvstat) ;buffer address dta a(0) ;timeout dta a(4) ;buffer length .endp ;============================================================================== PrinterGetByte = CIOExitNotSupported PrinterSpecial = CIOExitNotSupported atari800-5.0.0/emuos/src/screen.s000066400000000000000000001216121425067567700164540ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Screen Handler ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;Display list: ; 24 blank lines (3 bytes) ; initial mode line with LMS (3 bytes) ; mode lines ; LMS for modes >4 pages ; wait VBL (3 bytes) ; ; total is 8-10 bytes + mode lines ; These are the addresses produced by the normal XL/XE OS: ; ; Normal Split, coarse Split, fine ; Mode DL PF TX DL PF TX DL PF TX ; 0 9C20 9C40 9F60 9C20 9C40 9F60 9C1F 9C40 9F60 ; 1 9D60 9D80 9F60 9D5E 9D80 9F60 9D5D 9D80 9F60 ; 2 9E5C 9E70 9F60 9E58 9E70 9F60 9E57 9E70 9F60 ; 3 9E50 9E70 9F60 9E4E 9E70 9F60 9E4D 9E70 9F60 ; 4 9D48 9D80 9F60 9D4A 9D80 9F60 9D49 9D80 9F60 ; 5 9B68 9BA0 9F60 9B6A 9BA0 9F60 9B69 9BA0 9F60 ; 6 9778 97E0 9F60 9782 97E0 9F60 9781 97E0 9F60 ; 7 8F98 9060 9F60 8FA2 9060 9F60 8FA1 9060 9F60 ; 8 8036 8150 9F60 8050 8150 9F60 804F 8150 9F60 ; 9 8036 8150 9F60 8036 8150 9F60 8036 8150 9F60 ; 10 8036 8150 9F60 8036 8150 9F60 8036 8150 9F60 ; 11 8036 8150 9F60 8036 8150 9F60 8036 8150 9F60 ; 12 9B80 9BA0 9F60 9B7E 9BA0 9F60 9B7D 9BA0 9F60 ; 13 9D6C 9D80 9F60 9D68 9D80 9F60 9D67 9D80 9F60 ; 14 8F38 9060 9F60 8F52 9060 9F60 8F51 9060 9F60 ; 15 8036 8150 9F60 8050 8150 9F60 804F 8150 9F60 ; ; *DL = display list (SDLSTL/SDLSTH) ; *PF = playfield (SAVMSC) ; *TX = text window (TXTMSC) ; ; From this, we can derive a few things: ; - The text window is always 160 ($A0) bytes below the ceiling. ; - The playfield is always positioned to have enough room for ; the text window, even though this wastes a little bit of ; memory for modes 1, 2, 3, 4, and 13. This means that the ; PF address does not have to be adjusted for split mode. ; - The display list and playfield addresses are sometimes ; adjusted in order to avoid crossing 1K boundaries for the ; display list (gr.7) and 4K boundaries for the playfield (gr.8). ; However, these are fixed offsets -- adjusting RAMTOP to $9F ; does not remove the DL padding in GR.7 and breaks GR.7/8. ; - Fine-scrolled modes take one additional byte for the extra ; mode 2 line. In fact, it displays garbage that is masked by ; a DLI that sets COLPF1 equal to COLPF2. (!) ; ; You might ask, why bother replicating these? Well, there are a ; number of programs that rely on the layout of the default screen ; and break if the memory addressing is different, such as ForemXEP. .macro _SCREEN_TABLES_2 ;Mode Type Res Colors ANTIC Mem(unsplit) Mem(split) ; 0 Text 40x24 1.5 2 960+32 (4) 960+32 (4) ; 1 Text 20x24 5 6 480+32 (2) 560+32 (3) ; 2 Text 20x12 5 7 240+20 (2) 360+22 (2) ; 3 Bitmap 40x24 4 8 240+32 (2) 360+32 (2) ; 4 Bitmap 80x48 2 9 480+56 (3) 560+52 (3) ; 5 Bitmap 80x48 4 A 960+56 (4) 960+52 (4) ; 6 Bitmap 160x96 2 B 1920+104 (8) 1760+92 (8) ; 7 Bitmap 160x96 4 D 3840+104 (16) 3360+92 (14) ; 8 Bitmap 320x192 1.5 F 7680+202 (32) 6560+174 (27) ; 9 Bitmap 80x192 16 F 7680+202 (32) 6560+174 (27) ; 10 Bitmap 80x192 9 F 7680+202 (32) 6560+174 (27) ; 11 Bitmap 80x192 16 F 7680+202 (32) 6560+174 (27) ; 12 Text 40x24 5 4 960+32 (4) 960+32 (4) ; 13 Text 40x12 5 5 480+20 (2) 560+24 (3) ; 14 Bitmap 160x192 2 C 3840+200 (16) 3360+172 (14) ; 15 Bitmap 160x192 4 E 7680+202 (32) 6560+172 (27) ;========================================================================== ; .proc ScreenPlayfieldSizesLo dta <($10000-$03C0) ;gr.0 960 bytes = 40*24 = 40*24 dta <($10000-$0280) ;gr.1 640 bytes = 20*24 + 40*4 = 40*12 + 40*4 dta <($10000-$0190) ;gr.2 400 bytes = 10*24 + 40*4 = 40*6 + 40*4 dta <($10000-$0190) ;gr.3 400 bytes = 10*24 + 40*4 = 40*6 + 40*4 dta <($10000-$0280) ;gr.4 640 bytes = 10*48 + 40*4 = 40*12 + 40*4 dta <($10000-$0460) ;gr.5 1120 bytes = 20*48 + 40*4 = 40*24 + 40*4 dta <($10000-$0820) ;gr.6 2080 bytes = 20*96 + 40*4 = 40*48 + 40*4 dta <($10000-$0FA0) ;gr.7 4000 bytes = 40*96 + 40*4 = 40*96 + 40*4 dta <($10000-$1EB0) ;gr.8 7856 bytes = 40*192 + 40*4 + 16 = 40*192 + 40*4 + 16 dta <($10000-$1EB0) ;gr.9 7856 bytes = 40*192 + 40*4 + 16 = 40*192 + 40*4 + 16 dta <($10000-$1EB0) ;gr.10 7856 bytes = 40*192 + 40*4 + 16 = 40*192 + 40*4 + 16 dta <($10000-$1EB0) ;gr.11 7856 bytes = 40*192 + 40*4 + 16 = 40*192 + 40*4 + 16 dta <($10000-$0460) ;gr.12 1120 bytes = 40*24 + 40*4 = 40*24 + 40*4 dta <($10000-$0280) ;gr.13 640 bytes = 40*12 + 40*4 = 40*12 + 40*4 dta <($10000-$0FA0) ;gr.14 4000 bytes = 20*192 + 40*4 = 40*96 + 40*4 dta <($10000-$1EB0) ;gr.15 7856 bytes = 40*192 + 40*4 + 16 = 40*192 + 40*4 + 16 .endp .proc ScreenPlayfieldSizesHi dta >($10000-$03C0) ;gr.0 dta >($10000-$0280) ;gr.1 dta >($10000-$0190) ;gr.2 dta >($10000-$0190) ;gr.3 dta >($10000-$0280) ;gr.4 dta >($10000-$0460) ;gr.5 dta >($10000-$0820) ;gr.6 dta >($10000-$0FA0) ;gr.7 dta >($10000-$1EB0) ;gr.8 dta >($10000-$1EB0) ;gr.9 dta >($10000-$1EB0) ;gr.10 dta >($10000-$1EB0) ;gr.11 dta >($10000-$0460) ;gr.12 dta >($10000-$0280) ;gr.13 dta >($10000-$0FA0) ;gr.14 dta >($10000-$1EB0) ;gr.15 .endp ;========================================================================== ; ANTIC mode is in bits 0-3, PRIOR bits in 6-7. ; DL 1K hop: bit 4 ; playfield 4K hop: bit 5 ; .proc ScreenModeTable dta $02,$06,$07,$08,$09,$0A,$0B,$1D,$3F,$7F,$BF,$FF,$04,$05,$1C,$3E .endp ;========================================================================== ; .proc ScreenHeightShifts dta 1 dta 1 dta 0 dta 1 dta 2 dta 2 dta 3 dta 3 dta 4 dta 4 dta 4 dta 4 dta 1 dta 0 dta 4 dta 4 .endp .proc ScreenHeights dta 12, 24, 48, 96, 192 .endp .proc ScreenPixelWidthIds dta 1 ;gr.0 40 pixels dta 0 ;gr.1 20 pixels dta 0 ;gr.2 20 pixels dta 1 ;gr.3 40 pixels dta 2 ;gr.4 80 pixels dta 2 ;gr.5 80 pixels dta 3 ;gr.6 160 pixels dta 3 ;gr.7 160 pixels dta 4 ;gr.8 320 pixels dta 2 ;gr.9 80 pixels dta 2 ;gr.10 80 pixels dta 2 ;gr.11 80 pixels dta 1 ;gr.12 40 pixels dta 1 ;gr.13 40 pixels dta 3 ;gr.14 160 pixels dta 3 ;gr.15 160 pixels .endp .endm ScreenHeightsSplit = ScreenWidths ; dta 10, 20, 40, 80, 160 ScreenPixelWidthsLo = ScreenWidths + 1 .macro _SCREEN_TABLES_1 .proc ScreenWidths dta <10 dta <20 dta <40 dta <80 dta <160 dta <320 .endp .proc ScreenPixelWidthsHi dta >20 dta >40 dta >80 dta >160 dta >320 .endp .proc ScreenEncodingTab dta 0 ;gr.0 direct bytes dta 0 ;gr.1 direct bytes dta 0 ;gr.2 direct bytes dta 2 ;gr.3 two bits per pixel dta 3 ;gr.4 one bit per pixel dta 2 ;gr.5 two bits per pixel dta 3 ;gr.6 one bit per pixel dta 2 ;gr.7 two bits per pixel dta 3 ;gr.8 one bit per pixel dta 1 ;gr.9 four bits per pixel dta 1 ;gr.10 four bits per pixel dta 1 ;gr.11 four bits per pixel dta 0 ;gr.12 direct bytes dta 0 ;gr.13 direct bytes dta 3 ;gr.14 one bit per pixel dta 2 ;gr.15 two bits per pixel .endp .proc ScreenPixelMasks dta $ff, $0f, $03, $01, $ff, $f0, $c0, $80 .endp .endm .macro _SCREEN_TABLES_3 .proc ScreenEncodingTable dta $00,$11,$22,$33,$44,$55,$66,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff dta $00,$55,$aa,$ff dta $00,$ff .endp .endm .if _KERNEL_XLXE _SCREEN_TABLES_3 _SCREEN_TABLES_2 _SCREEN_TABLES_1 .endif ;========================================================================== ;========================================================================== ;Many compilation disks rely on ScreenOpen being at $F3F6. .if *>$f3f6-8 .error 'ROM overflow into Screen Handler region: ',*,' > $F3EE.' .endif .ifdef _KERNEL_REPORT_MODULE_PAD_ADJUST _KERNEL_REPORT_MODULE_PAD_ADJUST [$f3f6-8]-* .endif org $f3f6-8 ;========================================================================== ;========================================================================== ;========================================================================== ; ; Return: ; MEMTOP = first byte used by display ; ; Errors: ; - If there is not enough memory (MEMTOP > APPMHI), GR.0 is reopened ; automatically and an error is returned. ; ; Notes: ; - Resets character base (CHBAS). ; - Resets character attributes (CHACT). ; - Resets playfield colors (COLOR0-COLOR4). ; - Resets tab map, even if the mode does not have a text window. ; - Resets logical line map, even if the mode does not have a text window. ; - Does NOT reset P/M colors (PCOLR0-PCOLR3). ; - Does NOT reset margins (LMARGN/RMARGN). ; - Sets up fine scrolling if FINE bit 7 is set. Note that this is ; different than the scroll logic itself, which tests the whole byte. ; - Returns error $80 if BREAK has been pressed. ; - If clear is bypassed, ROWCRS and COLCRS are preserved. ; ; Modified: ; - FRMADR: used for bitflags ; bit 7 = skip clear ; bit 6 = split screen ; bit 0 = fine scrolling (XL/XE only) ; - ADRESS: temporary addressing ; ScreenOpen = ScreenOpenGr0.use_iocb ScreenOpenMode0 = ScreenOpenGr0.use_mode0 .proc ScreenOpenGr0 mva #12 icax1z use_mode0: mva #0 icax2z use_iocb: ;shut off ANTIC playfield and instruction DMA lda sdmctl and #$dc sta sdmctl sta dmactl ;reset cursor parameters ldx #11 lda #0 clear_parms: sta rowcrs,x sta txtrow,x dex bne clear_parms ;mark us as being in main screen context stx swpflg ;copy mode value to dindex lda icax2z and #15 sta dindex tax ;poke PRIOR value (saves us some time to do it now) ;note that we must preserve bits 0-5 of GPRIOR or else Wayout shows logo artifacts lda ScreenModeTable,x eor gprior and #$c0 eor gprior sta gprior ;if a GTIA mode is active or we're in mode 0, force off split mode cmp #$40 lda icax1z bcs kill_split cpx #0 bne not_gtia_mode_or_gr0 kill_split: and #$ef not_gtia_mode_or_gr0: ;save off the split screen and clear flags in a more convenient form asl asl sta frmadr ;compute number of mode lines that we're going to have and save it off ldy ScreenHeightShifts,x ldx ScreenHeights,y asl spl:ldx ScreenHeightsSplit,y stx frmadr+1 ;attempt to allocate playfield memory lda ramtop ldx dindex clc adc ScreenPlayfieldSizesHi,x bcs pf_alloc_ok alloc_fail: ;we ran out of memory -- attempt to reopen with gr.0 if we aren't ;already (to prevent recursion), and exit with an error txa beq cant_reopen_gr0 jsr ScreenOpenGr0 cant_reopen_gr0: ldy #CIOStatOutOfMemory rts pf_alloc_ok: sta savmsc+1 ldy ScreenPlayfieldSizesLo,x sty savmsc ;Gr. modes 7 and 14 consume enough space for the playfield that there ;is not enough space left between the playfield and the next 1K ;boundary to contain the display list. In these cases, we preallocate ;to the 1K boundary to prevent a DL crossing error. Gr.8-11 and 15 ;do this too -- I have no idea why, as it's not like the OS correctly ;handles moving the 4K page split for those modes if RAMTOP is ;misaligned. lda ScreenModeTable,x ldx savmsc+1 and #$30 beq no_dlist_page_crossing ldy #0 dex no_dlist_page_crossing: sty rowac stx memtop+1 stx rowac+1 stx sdlsth ;Compute display list size. ; ; We need: ; - 8 fixed bytes (24 blank lines, LMS address, JVB) ; - N bytes for mode lines ; - 2 bytes for LMS split address (ANTIC modes E-F only) ; - 6 bytes for split ; ;Note that the display list never crosses a page boundary. This is ;conservative, as the display list only can't cross 1K boundaries. cmp #$20 ;test 4K hop bit (bit 5) lda #$f8 ;start with -8 (if carry is clear after test) scc:lda #$f5 ;use -11 if so (carry is set) sbc frmadr+1 ;subtract mode line count bit frmadr svc:sbc #6 ;subtract 6 bytes for a split .if _KERNEL_XLXE ldy #1 cpy fine ;clear carry to alloc +1 byte if fine scrolling is enabled .endif adc rowac ;allocate dl bytes (note that carry is set!) sta memtop sta rowac sta sdlstl ;check if we're below APPMHI cpx appmhi+1 bcc alloc_fail bne alloc_ok cmp appmhi bcc alloc_fail alloc_ok: ;MEMTOP is -1 from first used byte; we cheat here with the knowledge that ;the low byte of MEMTOP is never $00 dec memtop ;set up text window address (-160 from top) ldx ramtop dex stx txtmsc+1 mva #$60 txtmsc ;Turn on keyboard and break interrupts; note that this is done both for S: ;and E: opens. Close does not do this. php sei asl ;!! - A = $C0 ora pokmsk sta pokmsk sta irqen plp ;Set row count: 24 for full-screen. We will fix up the split case to 4 later ;while we are writing the display list. Mapping the Atari incorrectly states ;that this value is set to 0 when no text window is present; this is wrong ;and in fact BAYPILOT.BAS relies on this being set to 24 for a GR.7+16 ;screen since it later aliases it to GR.0. ldy #24 sty botscr ;init colors -- note that we do NOT overwrite pcolr0-3! ldy #5 mva:rne standard_colors-1,y color0-1,y- sty crsinh ;!! - Y=0 for this and for write index ;add 24 blank lines lda #$70 ldx #3 jsr write_repeat ;override COLOR4 (background) to $06 for GR.11 so it isn't dark lda dindex cmp #11 bne not_gr11 lda #$06 sta color4 not_gr11: ;add in the main screen jsr setup_display ;save off the DL ptr sty countr ;clear it if necessary jsr try_clear ;check if we are doing a split bit frmadr bvc nosplit ;change text screen height to four lines ldx #4 stx botscr ;swap to the text screen jsr EditorSwapToText ;add text screen dlist ldy countr jsr setup_display sty countr ;clear the split screen jsr try_clear nosplit: mva #2 chact ;init tab map to every 8 columns ldx #15 lsr ;!! A=1 sta:rne tabmap-1,x- ;reset line status stx bufcnt ;init character set mvx #$e0 chbas ;!! - also used for NMIEN ;enable VBI; note that we have not yet enabled display DMA .if _KERNEL_XLXE bit frmadr sne:ldx #$40 .else ldx #$40 .endif stx nmien ;terminate display list with jvb ldy countr ldx #rowac lda #$41 jsr write_with_zp_address ;init display list and playfield dma lda sdmctl ora #$22 sta sdmctl ;wait for screen to establish (necessary for Timewise splash screen to render) lda rtclok+2 cmp:req rtclok+2 ;If we're in screen mode 0, show the cursor; otherwise, skip it and wait for ;E: to do so. We need to skip this even if a split screen is present, or else ;ACTris 2.1 displays a bogus cursor. Unfortunately we may have swapped to the ;split screen, so the mode we need may be in either DINDEX or TINDEX; it's ;easier for us just to re-check AUX2 bits 0-3. lda icax2z and #$0f bne no_cursor ;show cursor jsr ScreenPutByte.recompute_show_cursor_exit no_cursor: ;swap back to main context jsr EditorSwapToScreen_Y1 ;exit ldx #0 ;required by Qix (v3) rts ;-------------------------------------------------------- setup_display: ;Add initial mode line with LMS, and check if we need to do an LMS ;split (playfield exceeds 4K). As it turns out, this only happens if ;we're using ANTIC mode E or F. ldx dindex lda ScreenModeTable,x and #$0f .if _KERNEL_XLXE ;check if we are doing fine scrolling and set the vscrol bit if so ldx dindex bne nofine ldx fine beq nofine ora #$20 nofine: .endif pha ora #$40 ldx #savmsc jsr write_with_zp_address ;retrieve row count ldx frmadr+1 lda dindex sne:ldx botscr ;dec row count since we already did the LMS dex pla .if _KERNEL_XLXE ;subtract two rows if we are fine scrolling, as we need to do DLI ;and non-vscrolled row cmp #$22 beq dofine .endif ;check if this is a split mode cmp #$0e bcc no_lms_split ;yes it is -- write 93 lines ldx #93 jsr write_repeat ;write LMS to jump over 4K boundary pha ora #$40 sta (rowac),y+ lda #0 sta (rowac),y+ lda savmsc+1 adc #$0f-1 ;!! - C=1 from bcc above sta (rowac),y+ ;set up to write 95 fewer lines (note that carry is cleared) lda frmadr+1 sbc #94 tax pla ;write mode lines and return no_lms_split: write_repeat: sta (rowac),y+ dex bne write_repeat no_clear: rts .if _KERNEL_XLXE dofine: ;write the regular lines (22 or 2) dex jsr write_repeat ;write DLI line ora #$80 sta (rowac),y+ ;write non-scrolled line and #$5f sta (rowac),y+ ;indicate to mainline that DLIs should be turned on inc frmadr ;set up DLI routine ldx #ScreenFineScrollDLI write_vdslst: stx vdslst sta vdslst+1 rts .endif ;-------------------------------------------------------- write_with_zp_address: sta (rowac),y+ lda 0,x sta (rowac),y+ lda 1,x ldx #1 bne write_repeat ;!! - unconditional try_clear: bit frmadr bmi no_clear jmp ScreenClear ;-------------------------------------------------------- standard_colors: dta $28 dta $ca dta $94 dta $46 .def :ScreenBitposFlipTab dta $00 ;!! - shared value between tables dta $01 dta $03 dta $07 .endp ;========================================================================== .proc ScreenInit mva memtop+1 ramtop .ifdef _KERNEL_816 stz colrsh .else mva #0 colrsh .endif mva #$FE drkmsk rts .endp ;========================================================================== ; Behavior in gr.0: ; - Reading char advances to next position, but cursor is not moved ; - Cursor is picked up ($A0) ; - Wrapping from end goes to left margin on next row ; - Cursor may be outside of horizontal margins ; - Error 141 (cursor out of range) if out of range ; - Cursor will wrap to out of range if at end of screen (no automatic ; vertical wrap) ; - Does NOT update OLDROW/OLDCOL ; .proc ScreenGetByte jsr ScreenCheckPosition bmi xit ;compute addressing ldy rowcrs jsr ScreenComputeToAddrX0 lda colcrs ldx dindex ldy ScreenEncodingTab,x eor ScreenBitposFlipTab,y tax lda colcrs+1 jsr ScreenSetupPixelAddr.phase2 ;retrieve byte containing pixel ldy shfamt lda (toadr),y ;shift down jsr ScreenAlignPixel ;convert from Internal to ATASCII - must be done before we mask ;Internal ATASCII ;00-1F 20-3F ;20-3F 40-5F ;40-5F 00-1F ;60-7F 60-7F asl php spl:eor #$40 ;00>20, 20>40, 40>60, 60>40 adc #$40 ;00>20, 20>40, 40>00, 60>60 plp ror ;mask using right-justified pixel mask for mode ldx dindex ldy ScreenEncodingTab,x and ScreenPixelMasks,y ;advance to next position ldx dindex beq mode0 jmp ScreenAdvancePosNonMode0 mode0: jsr ScreenAdvancePosMode0 ldy #1 xit: rts .endp ;========================================================================== ; Common behavior: ; - Output is suspended if SSFLAG is set for non-clear and non-EOL chars ; - Clear screen ($7D) and EOL ($9B) are always handled ; - ESCFLG and DSPFLG are ignored (they are E: features) ; ; Behavior in gr.0: ; - Logical lines are extended ; - Scrolling occurs if bottom is hit ; - Control chars other than clear and EOL are NOT handled by S: ; - ROWCRS or COLCRS out of range results in an error. ; - COLCRS in left margin is ignored and prints within margin. ; - COLCRS in right margin prints one char and then does EOL. ; - Previous cursor is not erased by S:, regardless of CRSINH state ; - New cursor is drawn if CRSINH=0 ; ; Behavior in gr.1+: ; - No cursor is displayed ; - LMARGN/RMARGN are ignored ; - Cursor wraps from right side to next line ; - ROWCRS may be below split screen boundary as long as it is within the ; full screen size. ; .proc ScreenPutByte sta atachr jsr ScreenCheckPosition bmi error ;check for screen clear lda atachr cmp #$7d bne not_clear_2 jsr ScreenClear ldy #1 error: rts graphics_eol: jmp ScreenAdvancePosNonMode0.graphics_eol ;*** ENTRY POINT FROM EDITOR FOR ESC HANDLING *** not_clear: jsr ScreenCheckPosition bmi error not_clear_2: ;set old position now (used by setup code for plot pixel) jsr ScreenSetLastPosition ;restore char lda atachr ;check if we're in gr.0 ldx dindex beq mode_0 ;nope, we're in a graphics mode... that makes this easier. ;check if it's an EOL cmp #$9b beq graphics_eol ;check for display suspend (ctrl+1) and wait until it is cleared ldx:rne ssflag ;fold the pixel, compute masks, and convert ATASCII to Internal jsr ScreenFoldColor pha ;compute addressing and shift mask jsr ScreenSetupPlotPixel pla ldy shfamt eor (toadr),y and bitmsk eor (toadr),y sta (toadr),y ;advance cursor position and exit jmp ScreenAdvancePosNonMode0 mode_0: ;check for EOL, which bypasses the ESC check cmp #$9b bne not_eol ;it's an EOL lda lmargn sta colcrs inc rowcrs lda rowcrs cmp botscr bcc noywrap ;We've gone over -- delete logical line 0 to make room. ;Note that we need to set ROWCRS here first because the scroll may ;delete more than one physical line. ldx botscr stx rowcrs jsr EditorDeleteLine0 noywrap: jmp recompute_show_cursor_exit not_eol: ;check for display suspend (ctrl+1) and wait until it is cleared ldx:rne ssflag pha jsr EditorRecomputeCursorAddr pla jsr ScreenConvertATASCIIToInternal ;plot character ldy #0 sta (oldadr),y ;inc pos inw oldadr jsr ScreenAdvancePosMode0 ;check if we've gone beyond the right margin bcs nowrap ;check if we're beyond the bottom of the screen lda rowcrs cmp botscr bcc no_scroll ;yes -- scroll up jsr EditorDeleteLine0 ;check if we can extend the current logical line -- 3 rows max. jsr check_extend ;Mark the current physical line as part of the last logical line. ; ;NOTE: There is a subtlety here in that we may delete multiple physical ; lines if the top logical line is more than one line long, but we ; only want to add one physical line onto our current logical line. jsr EditorGetCurLogicalLineInfo eor logmap,y sta logmap,y jmp post_scroll no_scroll: ;check if we can extend the current logical line -- 3 rows max. jsr check_extend ;okay, here's the fun part -- we didn't scroll beyond, but we might ;be on another logical line, in which case we need to scroll everything ;down to extend it. lda rowcrs jsr EditorTestLogicalLineBit beq post_scroll ;yup, insert a physical line jsr ScreenInsertPhysLine recompute_show_cursor_exit: post_scroll: jsr EditorRecomputeCursorAddr nowrap: jmp ScreenShowCursorAndXitOK check_extend: ldx rowcrs dex txa jsr EditorPhysToLogicalRow .ifdef _KERNEL_816 inc inc .else clc adc #2 .endif cmp rowcrs scc:rts pla pla bcc post_scroll .endp ;========================================================================== ScreenGetStatus = CIOExitSuccess ;========================================================================== ; Given a color byte, mask it off to the pertinent bits and reflect it ; throughout a byte. The byte is converted from ATASCII to Internal ; if the mode uses byte encoding. ; ; Entry: ; A = color value ; ; Exit: ; A = folded color byte ; Y = encoding mode ; DMASK = right-justified bit mask ; DELTAC = left-justified bit mask ; ; Modified: ; HOLD1, ADRESS ; .proc ScreenFoldColor ldx dindex ldy ScreenEncodingTab,x ;0 = 8-bit, 1 = 4-bit, 2 = 2-bit, 3 = 1-bit mvx ScreenPixelMasks+4,y deltac mvx ScreenPixelMasks,y dmask bmi fold_byte and dmask ora ScreenEncodingOffsetTable-1,y tax lda ScreenEncodingTable,x rts fold_byte: ;convert byte from ATASCII to Internal -- this is required for gr.1 ;and gr.2 to work correctly, and harmless for other modes ;========================================================================== ; Convert an ATASCII character to displayable INTERNAL format. ; ; Entry: ; A = ATASCII char ; ; Exit: ; A = INTERNAL char ; .def :ScreenConvertATASCIIToInternal ;ATASCII Internal ;00-1F 40-5F ;20-3F 00-1F ;40-5F 20-3F ;60-7F 60-7F asl php sbc #$3f ;00>60, 20>00, 40>20, 60>40 spl:eor #$40 ;00>40, 20>00, 40>20, 60>60 plp ror rts .endp ;========================================================================== .proc ScreenSpecial lda iccomz cmp #$11 beq ScreenDrawLineFill ;draw line cmp #$12 beq ScreenDrawLineFill ;fill rts .endp ;========================================================================== ; ; Inputs: ; COLCRS,ROWCRS = next point ; OLDCOL,OLDROW = previous point ; ATACHR = color/character to use ; ; Outputs: ; OLDCOL,OLDROW = next point ; ; Behavior: ; - In GR.0: ; - Cursor is not drawn, even with CRSINH=0 ; - OLDADR is updated to ending location, but not OLDCHR. If CRSINH=0, ; this can lead to a subsequent E: write stomping the last line draw ; cell with the under-cursor char from the last time the cursor was ; drawn elsewhere. ; ; Some test cases: ; - Ryba Pila ; - SPACEWAY.BAS ; - Worm of Bemer ; ; The Bresenham algorithm we use (from Wikipedia): ; dx = |x2 - x1| ; dy = |y2 - y1| ; e = dx - dy ; ; loop ; plot(x1, y1) ; if x1 == x2 and y1 == y2 then exit ; e2 = 2*e ; if e2 + dy > 0 then ; err = err - dy ; x0 = x0 + sign(dx) ; endif ; if e2 < dx then ; err = err + dx ; y0 = y0 + sign(dy) ; endif ; end ; .proc ScreenDrawLineFill ;;##TRACE "Drawing line (%d,%d)-(%d,%d) in mode %d" dw(oldcol) db(oldrow) dw(colcrs) db(rowcrs) db(dindex) ;initialize bit mask and repeat pertinent pixel bits throughout byte lda fildat jsr ScreenFoldColor sta hold4 lda atachr jsr ScreenFoldColor sta hold1 jsr ScreenSetupPlotPixel ;compute screen pitch ldy #1 jsr ScreenComputeRangeSize sta deltac+1 tax ldy #0 ;compute abs(dy) and sign(dy) lda rowcrs sub oldrow bcs going_down eor #$ff ;take abs(dy) adc #1 ; ;negate screen pitch pha txa eor #$ff tax inx dey pla going_down: stx rowac sta deltar sty rowac+1 ;;##TRACE "dy = %d" db(deltar) ;compute abs(dx) and sign(dx) ldx #0 lda colcrs sub oldcol sta colac lda colcrs+1 sbc oldcol+1 bcs going_right eor #$ff tay lda colac eor #$ff adc #1 sta colac tya adc #0 ldx #left_shift_8-right_shift_8 going_right: sta colac+1 ;;##TRACE "dx = %d" dw(colac) ;set up x shift routine txa ldx dindex ldy ScreenEncodingTab,x clc adc shift_lo_tab,y sta adress lda #>left_shift_8 sta adress+1 sta endpt+1 ;set up x fill shift routine lda shift_lo_tab,y clc adc #fill_right_8-right_shift_8 sta endpt ;compute initial error accumulator in frmadr (dx-dy) ldx colac txa sub deltar sta frmadr ldy colac+1 ;leave dx in y:x for max() below tya sbc #0 sta frmadr+1 ;compute max(dx, dy) based on sign of (dx - dy) bcs dx_larger ldy #0 ldx deltar dx_larger: stx countr sty countr+1 tya bne not_empty txa beq skip_showcursor not_empty: ;;##TRACE "Pixel count = %d" dw(countr) ;enter pixel loop (this will do a decrement for us) jmp next_pixel ;---------------------------------------------- done: jsr ScreenSetLastPosition ;RYBA PILA requires the quirky behavior of the last character of a non-zero length ;DRAWTO being stomped by the character saved from the cursor draw of the last PLOT ;(write to S:). Note that we must NOT do this for length 0 or it breaks SPACEWAY. ldy dindex bne skip_showcursor jsr EditorRecomputeCursorAddr skip_showcursor: ldy #1 rts ;---------------------------------------------- fill_done: stx bitmsk jmp next_pixel ;---------------------------------------------- do_fill: ldy shfamt ;load current byte offset ldx bitmsk ;save current bitmask bne fill_start ;!! - unconditional ;---------------------------------------------- shift_lo_tab: dta 0, or Y:[S] + deltar > 0) tya clc adc deltar pla adc #0 bmi no_xinc ;update error accumulator lda frmadr sub deltar sta frmadr scs:dec frmadr+1 ;bump x lda bitmsk jmp (adress) .if [right_shift_4 ^ right_shift_8]&$ff00 .error "Right draw routines cross page: ",right_shift_4,"-",right_shift_8 .endif .if [left_shift_4 ^ left_shift_8]&$ff00 .error "Left draw routines cross page: ",left_shift_4,"-",left_shift_8 .endif .if [fill_right_4 ^ fill_right_8]&$ff00 .error "Fill routines cross page: ",fill_right_4,"-",fill_right_8 .endif .if [[right_shift_4^left_shift_4]|[left_shift_4^fill_right_4]]&$ff00 .error "Line/fill routines cross page: ",left_shift_4,',',right_shift_4,',',fill_right_4 .endif .endp ;========================================================================== ; Clear the screen. ; ; Used: ; ADRESS ; TOADR ; ; Quirks: ; Clears the split-screen text area even if the main screen (S:) receives ; the clear. The In-Store Demonstration Cart depends on this. The cursor ; state of the split screen is NOT reset, so if the cursor was over a ; non-blank character, that character will be restored when the cursor ; moves. ; ; The logical line map is always reset. ; .proc ScreenClear ;first, set up for clearing the split-screen window (4*40 bytes main) ldy #4 ;check if we are in the split screen text window ldx swpflg bne is_text_window ;nope, it's the main screen... compute size ldy dindex ldx ScreenHeightShifts,y ldy ScreenHeights,x is_text_window: jsr ScreenComputeRangeSize ;add 160 bytes to size if not GR.0 -- important to avoid clearing ;beyond GR.0 screen (the font breaks in BIKERDAV.BAS otherwise!) clc ldx dindex beq is_gr0 adc #160 is_gr0: tay lda adress+1 adc #0 tax adc savmsc+1 sta toadr+1 mva savmsc toadr ;As it turns out, there are no cases where the main screen ;is an exact number of pages... so we can simply plow into ;the clear loop. lda #0 loop: dey sta (toadr),y bne loop dec toadr+1 dex bpl loop ;reset coordinates and cursor (we're going to wipe the cursor) sta colcrs+1 sta rowcrs sta oldchr ;always reset the logical line map ldx dindex bne is_graphic_screen lda lmargn is_graphic_screen: sta colcrs ;always reset the logical line map and exit jmp ScreenResetLogicalLineMap .endp ;========================================================================== ; Insert a physical line at the current location. ; ; Entry: ; ROWCRS = row before which to insert new line ; C = 0 if physical line only, C = 1 if should start new logical line ; ; Modified: ; HOLD1, ADRESS ; ScreenInsertLine = ScreenInsertPhysLine.use_c .proc ScreenInsertPhysLine clc use_c: ;save new logline flag php ;compute addresses ldy botscr dey jsr ScreenComputeToAddrX0 jsr EditorNextLineAddr ;copy lines ldx botscr bne line_loop_start line_loop: ldy #39 char_loop: lda (frmadr),y sta (toadr),y dey bpl char_loop line_loop_start: lda frmadr sta toadr sec sbc #40 sta frmadr lda frmadr+1 sta toadr+1 sbc #0 sta frmadr+1 dex cpx rowcrs bne line_loop no_copy: ;clear the current line ldy #39 lda #0 clear_loop: sta (toadr),y dey bpl clear_loop ;insert bit into logical line mask jsr EditorGetCurLogicalLineInfo plp scs:lda #0 sta hold1 lda #0 sec sbc ReversedBitMasks,x ;-bit asl and logmap,y clc adc logmap,y ror ora hold1 sta logmap,y dey spl:ror logmap+1 dey spl:ror logmap+2 rts .endp ;========================================================================== ; Hide the screen cursor, if it is present. ; ; Modified: ; Y ; ; Preserved: ; A ; .proc ScreenHideCursor ;erase the cursor pha ldy #0 lda oldchr sta (oldadr),y pla no_cursor: rts .endp ;========================================================================== .proc ScreenCheckPosition ;Check for ROWCRS out of range. Note that for split screen modes we still ;check against the full height! lda botscr ldx dindex beq rowcheck_gr0 ldy ScreenHeightShifts,x lda ScreenHeights,y rowcheck_gr0: ;while we know it's GR.0, clamp RMARGN to 39 (required for ARTILLERY.BAS) ldy #39 cpy rmargn bcs rmargn_ok sty rmargn rmargn_ok: clc sbc rowcrs bcs rowcheck_pass invalid_position: ;If the cursor is out of range, reset it within bounds. ldy #0 sty colcrs+1 ;X high = 0 txa sne:ldy lmargn sty colcrs ;X low = X origin ldy #CIOStatCursorRange rts rowcheck_pass: ;check width ldy ScreenPixelWidthIds,x lda colcrs cmp ScreenPixelWidthsLo,y lda colcrs+1 sbc ScreenPixelWidthsHi,y bcs invalid_position ;check for BREAK ldy #$ff lda brkkey bne no_break sty brkkey ldy #CIOStatBreak-1 no_break: iny rts .endp ;========================================================================== ; Swap between the main screen and the split screen. ; ; Conventionally, the main screen is left as the selected context when ; the display handler is not active. ; ; Inputs: ; C = 0 for main screen ; C = 1 for split screen ; ; Modified: ; X ; ; Preserved: ; A ; ;========================================================================== ; Swap in the text screen (main if gr.0, split otherwise). ; .proc EditorSwapToText ;set C=0 (main) if gr.0, C=1 (split) otherwise ldy #23 cpy botscr .def :ScreenSwap = * ;check if the correct set is in place pha lda #0 adc swpflg beq already_there ;Nope, we need to swap. Conveniently, the data to be swapped ;is in a 12 byte block: ; ; ROWCRS ($0054) TXTROW ($0290) ; COLCRS ($0055) TXTCOL ($0291) ; DINDEX ($0057) TINDEX ($0293) ; SAVMSC ($0058) TXTMSC ($0294) ; OLDROW ($005A) TXTOLD ($0296) ; OLDCOL ($005B) TXTOLD ($0297) ; OLDCHR ($005D) TXTOLD ($0299) ; OLDADR ($005E) TXTOLD ($029A) ldx #11 swap_loop: lda rowcrs,x ldy txtrow,x sty rowcrs,x sta txtrow,x dex bpl swap_loop ;invert swap flag txa eor swpflg sta swpflg already_there: pla rts .endp ;========================================================================== ; Compute character address. ; ; Entry: ; X = byte index ; Y = line index ; ; Exit: ; A:X = address ; ; Used: ; ADRESS ; .proc ScreenComputeAddr jsr ScreenComputeRangeSize sta adress txa clc adc adress ;row*10,20,40+col scc:inc adress+1 clc adc savmsc tax lda adress+1 adc savmsc+1 rts .endp ;========================================================================== ScreenComputeToAddr = ScreenComputeToAddrX0.with_x .proc ScreenComputeToAddrX0 ldx #0 with_x: jsr ScreenComputeAddr stx toadr sta toadr+1 rts .endp ;========================================================================== ; Compute size, in bytes, of a series of lines. ; ; Entry: ; Y = line count ; ; Exit: ; ADRESS+1 High byte of size ; A Low byte of size ; ; Preserved: ; X ; ; Modified: ; Y ; .proc ScreenComputeRangeSize mva #0 adress+1 sty adress ldy dindex lda ScreenPixelWidthIds,y sec sbc ScreenEncodingTab,y tay iny lda adress asl rol adress+1 ;row*2 asl rol adress+1 ;row*4 clc adc adress ;row*5 scc:inc adress+1 shift_loop: asl rol adress+1 ;row*10,20,40 dey bpl shift_loop rts .endp ;========================================================================== ; Setup for pixel plot. ; ; Entry: ; OLDCOL, OLDROW = position ; DELTAC = left-justified pixel mask ; ; Exit: ; TOADR = screen row ; SHFAMT = byte offset within row ; BITMSK = shifted bit mask for pixel ; ; Modified: ; ADRESS ; ScreenAlignPixel = ScreenSetupPlotPixel.rshift_mask .proc ScreenSetupPlotPixel ;;##TRACE "Folded pixel = $%02X" db(hold1) jsr ScreenSetupPixelAddr ;preshift bit mask lda deltac rshift_mask: dex bmi xmaskshift_done xmaskshift_loop: lsr dex bpl xmaskshift_loop xmaskshift_done: sta bitmsk ;;##TRACE "Initial bitmasks = $%02X $%02X" db(bitmsk) db(dmask) rts .endp ;========================================================================== ; Setup for pixel addressing. ; ; Entry: ; COLCRS, ROWCRS = position (ScreenSetupPixelAddr) ; OLDCOL, OLDROW = position (ScreenSetupPixelAddrOld) ; ; Exit: ; TOADR = screen row ; SHFAMT = byte offset within row ; X = number of bits from left side of byte to left side of pixel ; .proc ScreenSetupPixelAddr ;compute initial address ldy oldrow jsr ScreenComputeToAddrX0 ;;##TRACE "Initial row address = $%04X" dw(toadr) ;compute initial byte offset lda oldcol+1 ldx oldcol phase2: ror stx shfamt lda #0 ldx dindex ldy ScreenEncodingTab,x beq no_xshift xshift_loop: ror shfamt ror dey bne xshift_loop no_xshift: rol rol rol rol tax ;;##TRACE "Initial row offset = $%02X" db(shfamt) rts .endp ;========================================================================== ; ScreenAdvancePosNonMode0 ; .proc ScreenAdvancePosNonMode0 ;advance position inc colcrs sne:inc colcrs+1 ldx dindex ldy ScreenPixelWidthIds,x ldx ScreenPixelWidthsHi,y cpx colcrs+1 bne graphics_no_wrap ldx ScreenPixelWidthsLo,y cpx colcrs bne graphics_no_wrap graphics_eol: ;move to left side and then one row down -- note that this may ;push us into an invalid coordinate, which will result on an error ;on the next call if not corrected ldy #0 sty colcrs sty colcrs+1 inc rowcrs graphics_no_wrap: ldy #1 rts .endp ;========================================================================== .if !_KERNEL_XLXE _SCREEN_TABLES_1 .endif atari800-5.0.0/emuos/src/screenext.s000066400000000000000000000067241425067567700172030ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Screen Handler extension routines ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ScreenEncodingOffsetTable: dta $00 ;4-bit dta $10 ;2-bit dta $14 ;1-bit .if !_KERNEL_XLXE _SCREEN_TABLES_3 .endif ;========================================================================== ; ScreenFineScrollDLI ; ; This DLI routine is used to set the PF1 color to PF2 to kill junk that ; would appear on the extra line added with vertical scrolling. ; .if _KERNEL_XLXE .proc ScreenFineScrollDLI pha lda color2 eor colrsh and drkmsk sta colpf1 pla rti .endp .endif ;========================================================================== ; ScreenResetLogicalLineMap ; ; Marks all lines as the start of logical lines. ; ; Exit: ; X = 0 ; .proc ScreenResetLogicalLineMap ldx #$ff stx logmap stx logmap+1 stx logmap+2 ;reset line read position inx stx bufstr lda lmargn sta bufstr+1 ;note - X=0 relied on here by EditorOpen rts .endp ;========================================================================== ; ScreenSetLastPosition ; ; Copies COLCRS/ROWCRS to OLDCOL/OLDROW. ; .proc ScreenSetLastPosition ldx #2 loop: lda rowcrs,x sta oldrow,x dex bpl loop rts .endp ;========================================================================== ; ScreenAdvancePosMode0 ; ; Advance to the next cursor position in reading order, for mode 0. ; ; Exit: ; C = 1 if no wrap, 0 if wrapped ; ; Modified: ; X ; ; Preserved: ; A ; .proc ScreenAdvancePosMode0 inc colcrs ldx rmargn cpx colcrs bcs post_wrap ldx lmargn stx colcrs inc rowcrs post_wrap: rts .endp ;========================================================================== ; Output: ; Y=1 for convenience ; ; (OLDADR) must point to the cursor location with OLDCHR even if the cursor ; is hidden. This is required by SDX QUICKED.SYS, which always restores the ; cursor. ; ; Success output must be exactly Y=1 and not another positive value, or ; DARG breaks. ; .proc ScreenShowCursorAndXitOK ;;##ASSERT dw(oldadr) >= dw(savmsc) ;check if the cursor is enabled ldy #0 lda (oldadr),y sta oldchr ldx crsinh bne cursor_inhibited eor #$80 sta (oldadr),y cursor_inhibited: iny rts .endp ;========================================================================== ; Close screen (S:). ; ; This is a no-op in OS-B mode. In XL/XE mode, it reopens the device in ; Gr.0 if fine scrolling is on, since this is necessary to clear the DLI. ; This happens even if S: doesn't correspond to the text window. Only ; the high bit of FINE is checked. ; .if !_KERNEL_XLXE ScreenClose = CIOExitSuccess .else .proc ScreenClose bit fine bmi disable_fine_scrolling ldy #1 rts disable_fine_scrolling: ;turn off DLI mva #$40 nmien ;restore vdslst ldx #IntExitHandler_None jsr ScreenOpenGr0.write_vdslst jmp ScreenOpenGr0 .endp .endif ;========================================================================== .if !_KERNEL_XLXE _SCREEN_TABLES_2 .endif atari800-5.0.0/emuos/src/screenext816.s000066400000000000000000000065601425067567700174400ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 Screen Handler extension routines ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ScreenEncodingOffsetTable: dta $00 ;4-bit dta $10 ;2-bit dta $14 ;1-bit .if !_KERNEL_XLXE _SCREEN_TABLES_3 .endif ;========================================================================== ; ScreenFineScrollDLI ; ; This DLI routine is used to set the PF1 color to PF2 to kill junk that ; would appear on the extra line added with vertical scrolling. ; .if _KERNEL_XLXE .proc ScreenFineScrollDLI pha lda color2 eor colrsh and drkmsk sta colpf1 pla rti .endp .endif ;========================================================================== ; ScreenResetLogicalLineMap ; ; Marks all lines as the start of logical lines. ; ; Exit: ; X = 0 ; .proc ScreenResetLogicalLineMap ldx #$ff stx logmap stx logmap+1 stx logmap+2 ;reset line read position inx stx bufstr lda lmargn sta bufstr+1 ;note - X=0 relied on here by EditorOpen rts .endp ;========================================================================== ; ScreenSetLastPosition ; ; Copies COLCRS/ROWCRS to OLDCOL/OLDROW. ; .proc ScreenSetLastPosition ldx #2 loop: lda rowcrs,x sta oldrow,x dex bpl loop rts .endp ;========================================================================== ; ScreenAdvancePosMode0 ; ; Advance to the next cursor position in reading order, for mode 0. ; ; Exit: ; C = 1 if no wrap, 0 if wrapped ; ; Modified: ; X ; ; Preserved: ; A ; .proc ScreenAdvancePosMode0 inc colcrs ldx rmargn cpx colcrs bcs post_wrap ldx lmargn stx colcrs inc rowcrs post_wrap: rts .endp ;========================================================================== ; Output: ; Y=1 for convenience ; ; (OLDADR) must point to the cursor location with OLDCHR even if the cursor ; is hidden. This is required by SDX QUICKED.SYS, which always restores the ; cursor. ; .proc ScreenShowCursorAndXitOK ;;##ASSERT dw(oldadr) >= dw(savmsc) ;check if the cursor is enabled lda (oldadr) sta oldchr ldy crsinh bne cursor_inhibited eor #$80 sta (oldadr) cursor_inhibited: iny rts .endp ;========================================================================== ; Close screen (S:). ; ; This is a no-op in OS-B mode. In XL/XE mode, it reopens the device in ; Gr.0 if fine scrolling is on, since this is necessary to clear the DLI. ; This happens even if S: doesn't correspond to the text window. Only ; the high bit of FINE is checked. ; .if !_KERNEL_XLXE ScreenClose = CIOExitSuccess .else .proc ScreenClose bit fine bmi disable_fine_scrolling ldy #1 rts disable_fine_scrolling: ;turn off DLI mva #$40 nmien ;restore vdslst ldx #IntExitHandler_None jsr ScreenOpenGr0.write_vdslst jmp ScreenOpenGr0 .endp .endif ;========================================================================== .if !_KERNEL_XLXE _SCREEN_TABLES_2 .endif atari800-5.0.0/emuos/src/selftestentry.s000066400000000000000000000007111425067567700201040ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Self Test Entry Trampoline ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .proc SelfTestEntry lda portb and #$7f sta portb jmp BootScreen .endp atari800-5.0.0/emuos/src/sio.inc000066400000000000000000000010751425067567700162760ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - SIO definitions ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .ifndef f_SIO_INC .def f_SIO_INC SIOSuccess = $01 SIOErrorTimeout = $8A SIOErrorNAK = $8B SIOErrorBadFrame = $8C SIOErrorOverrun = $8E SIOErrorChecksum = $8F SIOErrorDeviceError = $90 .endif atari800-5.0.0/emuos/src/sio.s000066400000000000000000000455001425067567700157700ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; AltirraOS modular Kernel ROM - Serial Input/Output (SIO) routines ; Copyright (C) 2008-2019 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .proc SIOInit ;turn off POKEY init mode so polynomial counters and audio run mva #3 skctl sta sskctl ;enable noisy sound (yes, this is actually documented as being inited to ;3) sta soundr rts .endp ;============================================================================== .proc SIO ;set retry counters mva #$01 dretry ;enter critical section sta critic .if _KERNEL_PBI_SUPPORT ;attempt PBI transfer jsr PBIAttemptSIO scc:jmp xit_pbi .endif ;we must not save STACKP until after PBI devices are polled -- the ;BlackBox PBI routines depend on being able to reuse this location tsx stx stackp ;Set timeout timer address -- MUST be done on each call to SIO, or ;Cross-Town Crazy Eight hangs on load due to taking over this vector ;previously. This is guaranteed by the OS Manual in Appendix L, H27. jsr SIOSetTimeoutVector ;check for cassette -- needs to match $60 or else Prisma: Alien Ambush ;fails to load. ldx #0 lda ddevic cmp #$60 sne:dex stx casflg ;init POKEY hardware jsr SIOInitHardware ;go do cassette now bit casflg bpl retry_command jmp SIOCassette retry_command: ;We try 13 times to get a command accepted by a device; after that it ;counts as a device failure and we try one more round of 13 tries. mva #$0d cretry retry_command_2: ;init command buffer lda ddevic clc adc dunit sec sbc #1 sta cdevic mva dcomnd ccomnd mva daux1 caux1 mva daux2 caux2 ;assert command line mva #$34 pbctl ;wait ~600us to ensure 750us minimum delay (~1k cycles or ~10 scanlines) ldx #5 ldy vcount cmddelay: cpy:req vcount iny dex bne cmddelay ;send command frame mva #0 nocksm lda #>cdevic sta bufrhi sta bfenhi mva #temp stx bufrhi stx bfenhi jsr SIOReceive bmi transfer_error ;Check if we received a C ($43) or E ($45) -- we must NOT abort immediately ;on a device error, as the device still sends back data we need to read, and ;Music Studio relies on the data coming back from a CRC error. lda temp cmp #$43 beq completeOK cmp #$45 beq completeOK ;we received crap... fail it now device_error: ldy #SIOErrorDeviceError transfer_error: jsr SIOReceiveStop dec dretry bmi device_retries_exhausted jmp retry_command device_retries_exhausted: xit: ldx casflg bne leave_cassette_audio_on stx audc1 stx audc2 stx audc3 stx audc4 leave_cassette_audio_on: .ifdef _KERNEL_816 ;we may be in native mode, so we can't f-up the high byte of the stack pointer lda #1 xba lda stackp tcs .else ldx stackp txs .endif xit_pbi: lda #0 sta critic cpy #0 ;!! - A=0 must be preserved for LiteDOS sty dstats sty status rts completeOK: ;check if we should read a data frame bit dstats bvc no_receive_frame ;setup buffer pointers jsr SIOSetupBufferPointers ;receive the rest of the frame jsr SIOReceive bmi transfer_error no_receive_frame: ;now we can finally shut off the receive IRQ jsr SIOReceiveStop ;Now check whether we got a device error earlier. If we did, return ;that instead of success. lda temp cmp #'C' bne device_error ;nope, we're good... exit OK. ldy #SIOSuccess bne xit .endp ;============================================================================== .proc SIOSetTimeoutVector mwa #SIOCountdown1Handler cdtma1 rts .endp ;============================================================================== .proc SIOWaitForACK ;setup 2 frame delay for ack ldx #$ff stx timflg stx nocksm inx ;X=0 lda #1 ldy #2 sty bufrhi ;>temp = 2 sty bfenhi ;>temp+1 = 2 jsr setvbv ;setup for receiving ACK ldx #3600 ldy #<3600 jsr VBISetVector ;wait for beginning of frame lda #$10 ;test bit 4 of SKSTAT waitzerostart: bit timflg bpl timeout bit skstat bne waitzerostart ;take first time measurement jsr readtimer sty timer1+1 sta timer1 ;wait for 19 bit transitions lda #$10 ;test bit 4 of SKSTAT ldx #10 ;test 10 pairs of bits waitone: bit timflg bpl timeout bit skstat beq waitone dex beq waitdone waitzero: bit timflg bpl timeout bit skstat bne waitzero beq waitone timeout: ldy #SIOErrorTimeout jmp SIO.xit waitdone: ;take second time measurement jsr readtimer sta timer2 sty timer2+1 ;compute baud rate and adjust pokey divisor ; ; counts = (pal ? 156 : 131)*rtdelta + vdelta; ; lines = counts * 2 ; lines_per_bit = lines / 19 ; cycles_per_bit = lines_per_bit * 114 ; pokey_divisor = cycles_per_bit / 2 - 7 ; ; -or- ; ; pokey_divisor = counts * 2 * 114 / 19 / 2 - 7 ; = counts * 6 - 7 ; ;16 bits at 600 baud is nominally 209 scanline pairs. This means that we ;don't have to worry about more than two frames, which is at least 262 ;scanline pairs or less than 480 baud. ;set frame height - 262 scanlines for NTSC, 312 for PAL ldx #131 lda pal lsr sne:ldx #156 stx temp3 ;compute line difference lda timer1 jsr correct_time sta bfenlo lda timer2 jsr correct_time clc ;!! this decrements one line from the line delta sbc bfenlo sta bfenlo ldy #0 scs:dey ;compute frame difference lda timer2+1 sub timer1+1 tax ;accumulate frame difference beq no_frames lda bfenlo add_frame_loop: clc adc temp3 scc:iny dex bne add_frame_loop no_frames: sty bfenhi ;compute lines*6 - 7 = (lines-1)*6 - 1 asl ;(lines-1)*2 (lo) rol bfenhi ;(lines-1)*2 (hi) sta bfenlo ldy bfenhi ; asl bfenlo ;(lines-1)*4 (lo) rol bfenhi ;(lines-1)*4 (hi) adc bfenlo ;(lines-1)*6 (lo) tax ; tya ; adc bfenhi ;(lines-1)*6 (hi) (and c=0) dex ;-1 line, bringing us to -7 stx audf3 stx cbaudl inx sne:sbc #0 sta audf4 sta cbaudh ;kick pokey into init mode to reset serial input shift hw ldx sskctl txa and #$fc sta skctl ;reset serial port status sta skres ;re-enable serial input hw stx skctl jsr SIOSetupBufferPointers ;stuff two $55 bytes into the buffer, which we "read" above lda #$55 ldy #0 ldx #2 aaloop: sta (bufrlo),y inw bufrlo dex:bne aaloop ;reset checksum for two $55 bytes and receive frame asl sta chksum jsr SIOReceive.use_checksum jmp SIOReceiveStop ;------------------------------------------------------------------------- ; We have to be VERY careful when reading (RTCLOK+2, VCOUNT), because ; the VBI can strike in between. First, we double-check RTCLOK+2 to see ; if it has changed. If so, we retry the read. Second, we check if ; VCOUNT=124, which corresponds to lines 248/249. This can correspond to ; either before or after the VBI -- with CRITIC off the VBI ends around ; (249, 20-50) -- so we don't know which side of the frame boundary we're ; on. ; readtimer: ldy rtclok+2 lda vcount cpy rtclok+2 bne readtimer cmp #124 beq readtimer rts correct_time: sec sbc #124 bcs time_ok adc temp3 time_ok: rts .endp atari800-5.0.0/emuos/src/syscall816.s000066400000000000000000000036301425067567700171050ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 system call routines ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; System COP #0 handler (816os API) ; ; Calls from native mode into emulation mode. ; ; Input: ; (1,S).w = routine to call in emulation mode ; A/X/Y = inputs to routine ; ; Output: ; A/X/Y = output from routine ; P.NVDIZC = flags from routine ; ; Preserved: ; (1,s).w ; .proc IntNativeCop0Handler ;The stack frame on entry looks like this: ; ; 12,S emulation routine hi ; 11,S emulation routine lo ; 10,S return address bank ; 9,S return address hi ; 8,S return address lo ; 7,S return flags ; 6,S DH ; 5,S DL ; 4,S DBR ; 3,S internal return address bank ; 2,S internal return address hi ; 1,S internal return address lo ;switch to emulation mode sec xce ;call the routine pea #xit-1 pea #0 pha lda 16,s sta 2,s lda 17,s sta 3,s lda 12,s pha plp pla php rti xit: ;merge flags pha php pla eor 8,s and #$cf eor 8,s sta 8,s pla ;switch back to native mode clc xce ;all done rtl .endp ;========================================================================== .proc IntNativeCopUHandler ;switch to 16-bit registers rep #$30 ;load function code lda 1,s cmp #3 kpsize: lda.w #$0100 ldy.w #1 rtl kmalloc: lda.w #0 ldy.w #1 rtl kfree: rtl .endp ;========================================================================== .proc IntNativeCopCHandler rtl .endp atari800-5.0.0/emuos/src/sysdev816.s000066400000000000000000000042051425067567700167470ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 @: system device routines ; Copyright (C) 2008-2020 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== .proc SystemDevHandlerTable dta a(SysDevOpen-1) dta a(SysDevClose-1) dta a(SysDevGetByte-1) dta a(SysDevPutByte-1) dta a(SysDevGetStatus-1) dta a(SysDevSpecial-1) .endp ;========================================================================== .proc SysDevOpen ;For now, we reuse the cassette handler's FEOF flag for our index. stz feof ldy #1 rts .endp ;========================================================================== .proc SysDevGetByte ldx feof bmi at_eof lda #0 cpx #[.len SysDevData] scs:lda SysDevData,x ldy #1 inc feof spl:ldy #3 rts at_eof: ldy #CIOStatEndOfFile rts .endp ;========================================================================== .proc SysDevData dta $12,$03,$18 ;BCD date (D/M/Y) dta $00 ;Option dta $42,$42,$00,$00,$02,$04 ;OS version (BB 000002.04) dta $02 ;CPU code (65C816) dta $00 ;FPU code (none) dta $00 ;Number of additional 64K banks dta $01 ;Native interrupt services dta $00 ;Memory management services dta $00 ;SIO extensions dta $00 ;Fast serial I/O dta $00 ;CIO extensions dta $70 ;Max IOCB number dta a($0000) ;E: XIO functions dta a($0000) ;S: XIO functions dta a($0000) ;K: XIO functions dta a($0000) ;P: XIO functions dta a($0000) ;N: XIO functions dta a($0000) ;@: XIO functions .endp ;========================================================================== SysDevClose = CIOExitSuccess SysDevPutByte = CIOExitNotSupported SysDevGetStatus = CIOExitNotSupported SysDevSpecial = CIOExitNotSupported atari800-5.0.0/emuos/src/vbi.s000066400000000000000000000210251425067567700157520ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - Vertical Blank Interrupt Services ; Copyright (C) 2008-2016 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; VBIExit - Vertical Blank Interrupt Exit Routine ; ; This is a drop-in replacement for XITVBV. ; VBIExit = VBIProcess.xit ;========================================================================== ; VBIProcess - Vertical Blank Processor ; VBIStage1 = VBIProcess.stage_1 VBIStage2 = VBIProcess.stage_2 .proc VBIProcess stage_1: ;increment real-time clock and do attract processing inc rtclok+2 bne clock_done inc atract inc rtclok+1 bne clock_done inc rtclok clock_done: ;Pole Position depends on DRKMSK and COLRSH being reset from VBI as it ;clears kernel vars after startup. ldx #$fe ;default to no mask lda #$00 ;default to no color alteration ldy atract ;check attract counter bpl attract_off ;skip if attract is off stx atract ;lock the attract counter ldx #$f6 ;set mask to dim colors lda rtclok+1 ;use clock to randomize colors attract_off: stx drkmsk ;set color mask sta colrsh ;set color modifier ;atract color 1 only eor color1 and drkmsk sta colpf1 ;decrement timer 1 and check for underflow lda cdtmv1 ;check low byte bne timer1_lobytezero ;if non-zero, decrement and check for fire lda cdtmv1+1 ;check high byte beq timer1_done ;if clear, timer's not running dec cdtmv1+1 ;decrement high byte timer1_lobytezero: dec cdtmv1 ;decrement low byte bne timer1_done ;no underflow if non-zero lda cdtmv1+1 ;low byte is zero... check if high byte is too bne timer1_done ;if it's not, we're not done yet ($xx00 > 0) jsr timer1_dispatch ;jump through timer vector timer1_done: ;check for critical operation lda critic beq no_critic xit: pla tay pla tax exit_a: pla exit_none: rti timer1_dispatch: jmp (cdtma1) no_critic: lda #$04 ;I flag tsx and $0104,x ;I flag set on pushed stack? bne xit ;exit if so ;======== stage 2 processing stage_2: ;re-enable interrupts cli ;update shadow registers mva sdlsth dlisth mva sdlstl dlistl mva sdmctl dmactl mva chbas chbase mva chact chactl mva gprior prior ldx #8 stx consol ;sneak in speaker reset while we have an 8 ColorLoop lda pcolr0,x eor colrsh and drkmsk sta colpm0,x dex bpl ColorLoop ;decrement timer 2 and check for underflow ldx #3 jsr VBIDecrementTimer sne:jsr Timer2Dispatch ;Decrement timers 3-5 and set flags ; ;[OS Manual] Appendix L, page 254 says that the OS never modifies CDTMF3-5 ;except to set them to zero on timeout at init. This is a LIE. It also sets ;the flags to $FF when they are running. It does not write the flags when ;the timer is idle. Spider Quake depends on this. ; ldx #9 timer_n_loop: clc jsr VBIDecrementTimer bcs timer_n_not_running seq:lda #$ff timer_n_not_expired: sta cdtmf3-5,x timer_n_not_running: dex dex cpx #5 bcs timer_n_loop ;Read POKEY keyboard register and handle auto-repeat lda skstat ;get key status and #$04 ;check if key is down bne no_repeat_key ;skip if not dec srtimr ;decrement repeat timer bne no_repeat ;skip if not time to repeat yet mva kbcode ch ;repeat last key .if _KERNEL_XLXE mva keyrep srtimr ;reset repeat timer .else mva #$06 srtimr ;reset repeat timer .endif bne no_keydel ;skip debounce counter decrement no_repeat_key: lda #0 sta srtimr no_repeat: ;decrement keyboard debounce counter lda keydel seq:dec keydel no_keydel: ;Update controller shadows. ; ;The PORTA/PORTB decoding is a bit complex: ; ; bits 0-3 -> STICK0/4 (and no, we cannot leave junk in the high bits) ; bits 4-7 -> STICK1/5 ; bit 2 -> PTRIG0/4 ; bit 3 -> PTRIG1/5 ; bit 6 -> PTRIG2/6 ; bit 7 -> PTRIG3/7 ; ;XL/XE machines only have two joystick ports, so the results of ports 0-1 ;are mapped onto ports 2-3. ; .if _KERNEL_XLXE lda porta tax and #$0f sta stick0 sta stick2 txa lsr ;shr1 lsr ;shr2 tax lsr ;shr3 lsr ;shr4 sta stick1 sta stick3 lsr ;shr5 lsr ;shr6 tay and #$01 sta ptrig2 tya lsr sta ptrig3 txa and #$01 sta ptrig0 txa lsr and #$01 sta ptrig1 ldx #3 pot_loop: lda pot0,x sta paddl0,x sta paddl4,x lda ptrig0,x sta ptrig4,x dex bpl pot_loop ldx #1 port_loop: lda trig0,x sta strig0,x sta strig2,x dex bpl port_loop .else ldx #7 pot_loop: lda pot0,x sta paddl0,x lda #0 sta ptrig0,x dex bpl pot_loop ldx #3 trig_loop: lda trig0,x sta strig0,x dex bpl trig_loop lda porta ldx #0 ldy #0 jsr do_stick_ptrigs lda portb ldx #4 ldy #2 jsr do_stick_ptrigs .endif ;restart pots (required for SysInfo) sta potgo ;update light pen mva penh lpenh mva penv lpenv jmp (vvblkd) ;jump through vblank deferred vector Timer2Dispatch jmp (cdtma2) .if !_KERNEL_XLXE do_stick_ptrigs: pha and #$0f sta stick0,y pla lsr lsr lsr rol ptrig0,x lsr rol ptrig1,x sta stick1,y lsr lsr lsr rol ptrig2,x lsr rol ptrig3,x rts .endif .endp ;========================================================================== ; VBIDecrementTimer ; ; Entry: ; X = timer index *2+1 (1-9) ; ; Exit: ; C=1, Z=0, A!0 timer not running ; C=0/same, Z=1, A=0 timer just expired ; C=0/same, Z=0, A=? timer still running ; .proc VBIDecrementTimer ;check low byte lda cdtmv1-1,x bne lononzero ;check high byte; set C=1/Z=1 if zero, C=0/Z=0 otherwise cmp cdtmv1,x bne lozero_hinonzero ;both bytes are zero, so timer's not running txa rts lozero_hinonzero: ;decrement high byte dec cdtmv1,x lononzero: ;decrement low byte dec cdtmv1-1,x bne still_running ;return high byte to set Z appropriately lda cdtmv1,x still_running: rts .endp ;========================================================================== ; VBISetVector - set vertical blank vector or counter ; ; This is a drop-in replacement for SETVBV. ; ; A = item to update ; 1-5 timer 1-5 counter value ; 6 VVBLKI ; 7 VVBLKD ; X = MSB ; Y = LSB ; .proc VBISetVector ;A = item to update ; 1-5 timer 1-5 counter value ; 6 VVBLKI ; 7 VVBLKD ;X = MSB ;Y = LSB ; ;NOTE: ;The Atari OS Manual says that DLIs will be disabled after SETVBV is called. ;This is a lie -- neither the OS-B nor XL kernels do this, and the Bewesoft ;8-players demo depends on it being left enabled. ; ;IRQ mask state must be saved across this proc. DOSDISKA.ATR breaks if IRQs ;are unmasked. asl sta intemp php sei tya ldy intemp ;We're relying on a rather tight window here. We can't touch NMIEN, so we have ;to wing it with DLIs enabled. Problem is, in certain conditions we can be under ;very tight timing constraints. In order to do this safely we have to finish ;before a DLI can execute. The worst case is a wide mode 2 line at the end of ;a vertically scrolled region with P/M graphics enabled and an LMS on the next ;mode line. In that case we only have 7 cycles before we hit the P/M graphics ;and another two cycles after that until the DLI fires. The exact cycle timing ;looks like this: ; ;* inc wsync ;ANTIC halts CPU until cycle 105 ;105 playfield DMA ;106 refresh DMA ;107 sta abs,y (1/5) ;108 sta abs,y (2/5) ;109 sta abs,y (3/5) ;110 sta abs,y (4/5) ;111 sta abs,y (5/5) ;112 txa (1/2) ;113 txa (2/2) ;0 missiles ;1 display list ;2 player 0 ;3 player 1 ;4 player 2 ;5 player 3 ;6 display list address low ;7 display list address high ;8 sta abs,y (1/5) ;9 sta abs,y (2/5) ;10 sta abs,y (3/5) ;11 sta abs,y (4/5) ;12 sta abs,y (5/5) ; ;We rely on the 6502 not being able to service interrupts until the end of an ;instruction for this to work. The INC WSYNC is necessary to combat the case ;where the NMI is triggered across the WSYNC wait; without it, the VBI could ;fire immediately after the first STA. inc wsync sta cdtmv1-2,y txa sta cdtmv1-1,y plp rts .endp atari800-5.0.0/emuos/src/vbi816.s000066400000000000000000000175771425067567700162320ustar00rootroot00000000000000; Altirra - Atari 800/800XL/5200 emulator ; Modular Kernel ROM - 65C816 Vertical Blank Interrupt Services ; Copyright (C) 2008-2018 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. ;========================================================================== ; VBIExit - Vertical Blank Interrupt Exit Routine ; ; This is a drop-in replacement for XITVBV. ; VBIExit = VBIProcess.xit ;========================================================================== ; VBIProcess - Vertical Blank Processor ; VBIStage1 = VBIProcess.stage_1 VBIStage2 = VBIProcess.stage_2 .proc VBIProcess stage_1: ;increment real-time clock and do attract processing inc rtclok+2 bne clock_done inc atract inc rtclok+1 bne clock_done inc rtclok clock_done: ;Pole Position depends on DRKMSK and COLRSH being reset from VBI as it ;clears kernel vars after startup. ldx #$fe ;default to no mask lda #$00 ;default to no color alteration ldy atract ;check attract counter bpl attract_off ;skip if attract is off stx atract ;lock the attract counter ldx #$f6 ;set mask to dim colors lda rtclok+1 ;use clock to randomize colors attract_off: stx drkmsk ;set color mask sta colrsh ;set color modifier ;atract color 1 only eor color1 and drkmsk sta colpf1 ;decrement timer 1 and check for underflow lda cdtmv1 ;check low byte bne timer1_lobytezero ;if non-zero, decrement and check for fire lda cdtmv1+1 ;check high byte beq timer1_done ;if clear, timer's not running dec cdtmv1+1 ;decrement high byte dec cdtmv1 ;decrement low byte bne timer1_done ;we're done timer1_lobytezero: dec cdtmv1 ;decrement low byte bne timer1_done lda cdtmv1+1 ;check if high byte is zero bne timer1_done ;if it's not, we're not done yet ($xx00 > 0) jsr timer1_dispatch ;jump through timer vector timer1_done: ;check for critical operation lda critic beq no_critic xit: ply plx exit_a: pla exit_none: rti timer1_dispatch: jmp (cdtma1) no_critic: lda #$04 ;I flag and 4,s ;I flag set on pushed stack? bne xit ;exit if so ;======== stage 2 processing stage_2: ;re-enable interrupts cli ;update shadow registers mva sdlsth dlisth mva sdlstl dlistl mva sdmctl dmactl mva chbas chbase mva chact chactl mva gprior prior ldx #8 stx consol ;sneak in speaker reset while we have an 8 ColorLoop lda pcolr0,x eor colrsh and drkmsk sta colpm0,x dex bpl ColorLoop ;decrement timer 2 and check for underflow ldx #3 jsr VBIDecrementTimer sne:jsr (cdtma2-3,x) ;Decrement timers 3-5 and set flags ; ;[OS Manual] Appendix L, page 254 says that the OS never modifies CDTMF3-5 ;except to set them to zero on timeout at init. This is a LIE. It also sets ;the flags to $FF when they are running. It does not write the flags when ;the timer is idle. Spider Quake depends on this. ; ldx #9 timer_n_loop: clc jsr VBIDecrementTimer bcs timer_n_not_running seq:lda #$ff timer_n_not_expired: sta cdtmf3-5,x timer_n_not_running: dex dex cpx #5 bcs timer_n_loop ;Read POKEY keyboard register and handle auto-repeat lda skstat ;get key status and #$04 ;check if key is down bne no_repeat_key ;skip if not dec srtimr ;decrement repeat timer bne no_repeat ;skip if not time to repeat yet mva kbcode ch ;repeat last key mva keyrep srtimr ;reset repeat timer bne no_keydel ;skip debounce counter decrement no_repeat_key: stz srtimr no_repeat: ;decrement keyboard debounce counter lda keydel seq:dec keydel no_keydel: ;Update controller shadows. ; ;The PORTA/PORTB decoding is a bit complex: ; ; bits 0-3 -> STICK0/4 (and no, we cannot leave junk in the high bits) ; bits 4-7 -> STICK1/5 ; bit 2 -> PTRIG0/4 ; bit 3 -> PTRIG1/5 ; bit 6 -> PTRIG2/6 ; bit 7 -> PTRIG3/7 ; ;XL/XE machines only have two joystick ports, so the results of ports 0-1 ;are mapped onto ports 2-3. ; lda porta tax and #$0f sta stick0 sta stick2 txa lsr ;shr1 lsr ;shr2 tax lsr ;shr3 lsr ;shr4 sta stick1 sta stick3 lsr ;shr5 lsr ;shr6 tay and #$01 sta ptrig2 tya lsr sta ptrig3 txa and #$01 sta ptrig0 txa lsr and #$01 sta ptrig1 ldx #3 pot_loop: lda pot0,x sta paddl0,x sta paddl4,x lda ptrig0,x sta ptrig4,x dex bpl pot_loop ldx #1 port_loop: lda trig0,x sta strig0,x sta strig2,x dex bpl port_loop ;restart pots (required for SysInfo) sta potgo ;update light pen mva penh lpenh mva penv lpenv jmp (vvblkd) ;jump through vblank deferred vector .endp ;========================================================================== ; VBIDecrementTimer ; ; Entry: ; X = timer index *2+1 (1-9) ; ; Exit: ; C=1, Z=0, A!0 timer not running ; C=0/same, Z=1, A=0 timer just expired ; C=0/same, Z=0, A=? timer still running ; .proc VBIDecrementTimer ;check low byte lda cdtmv1-1,x bne lononzero ;check high byte; set C=1/Z=1 if zero, C=0/Z=0 otherwise cmp cdtmv1,x bne lozero_hinonzero ;both bytes are zero, so timer's not running txa rts lozero_hinonzero: ;decrement high byte dec cdtmv1,x lononzero: ;decrement low byte dec cdtmv1-1,x bne still_running ;return high byte to set Z appropriately lda cdtmv1,x still_running: rts .endp ;========================================================================== ; VBISetVector - set vertical blank vector or counter ; ; This is a drop-in replacement for SETVBV. ; ; A = item to update ; 1-5 timer 1-5 counter value ; 6 VVBLKI ; 7 VVBLKD ; X = MSB ; Y = LSB ; .proc VBISetVector ;A = item to update ; 1-5 timer 1-5 counter value ; 6 VVBLKI ; 7 VVBLKD ;X = MSB ;Y = LSB ; ;NOTE: ;The Atari OS Manual says that DLIs will be disabled after SETVBV is called. ;This is a lie -- neither the OS-B nor XL kernels do this, and the Bewesoft ;8-players demo depends on it being left enabled. ; ;IRQ mask state must be saved across this proc. DOSDISKA.ATR breaks if IRQs ;are unmasked. asl sta intemp php sei tya ldy intemp ;We're relying on a rather tight window here. We can't touch NMIEN, so we have ;to wing it with DLIs enabled. Problem is, in certain conditions we can be under ;very tight timing constraints. In order to do this safely we have to finish ;before a DLI can execute. The worst case is a wide mode 2 line at the end of ;a vertically scrolled region with P/M graphics enabled and an LMS on the next ;mode line. In that case we only have 7 cycles before we hit the P/M graphics ;and another two cycles after that until the DLI fires. The exact cycle timing ;looks like this: ; ;* inc wsync ;ANTIC halts CPU until cycle 105 ;105 playfield DMA ;106 refresh DMA ;107 sta abs,y (1/5) ;108 sta abs,y (2/5) ;109 sta abs,y (3/5) ;110 sta abs,y (4/5) ;111 sta abs,y (5/5) ;112 txa (1/2) ;113 txa (2/2) ;0 missiles ;1 display list ;2 player 0 ;3 player 1 ;4 player 2 ;5 player 3 ;6 display list address low ;7 display list address high ;8 sta abs,y (1/5) ;9 sta abs,y (2/5) ;10 sta abs,y (3/5) ;11 sta abs,y (4/5) ;12 sta abs,y (5/5) ; ;We rely on the 6502 not being able to service interrupts until the end of an ;instruction for this to work. The INC WSYNC is necessary to combat the case ;where the NMI is triggered across the WSYNC wait; without it, the VBI could ;fire immediately after the first STA. inc wsync sta cdtmv1-2,y txa sta cdtmv1-1,y plp rts .endp atari800-5.0.0/emuos/src/version.inc000066400000000000000000000007231425067567700171700ustar00rootroot00000000000000; Altirra - Atari 800/800XL emulator ; Kernel ROM replacement - version info ; Copyright (C) 2008-2020 Avery Lee ; ; Copying and distribution of this file, with or without modification, ; are permitted in any medium without royalty provided the copyright ; notice and this notice are preserved. This file is offered as-is, ; without any warranty. .macro _KERNELSTR_VERSION dta '3.28' .endm .macro _KERNELSTR_VERSION_INTERNAL dta "3.28" .endm atari800-5.0.0/emuos/template_tail.in000066400000000000000000000000031425067567700173640ustar00rootroot00000000000000}; atari800-5.0.0/install-sh000077500000000000000000000354631425067567700151060ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: atari800-5.0.0/m4/000077500000000000000000000000001425067567700134075ustar00rootroot00000000000000atari800-5.0.0/m4/sdl.m4000066400000000000000000000147601425067567700144430ustar00rootroot00000000000000############################################## ## The following part is copied from sdl.m4 ## ############################################## # Configure paths for SDL # Sam Lantinga 9/21/99 # stolen from Manish Singh # stolen back from Frank Belew # stolen from Manish Singh # Shamelessly stolen from Owen Taylor dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS dnl AC_DEFUN([AM_PATH_SDL], [dnl dnl Get the cflags and libraries from the sdl-config script dnl AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], sdl_prefix="$withval", sdl_prefix="") AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], sdl_exec_prefix="$withval", sdl_exec_prefix="") AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], , enable_sdltest=yes) if test x$sdl_exec_prefix != x ; then sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi as_save_PATH="$PATH" if test "x$prefix" != xNONE; then PATH="$prefix/bin:$prefix/usr/bin:$PATH" fi AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) PATH="$as_save_PATH" min_sdl_version=ifelse([$1], ,0.11.0,$1) AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" dnl dnl Now check if the installed SDL is sufficiently new. (Also sanity dnl checks the results of sdl-config to some extent dnl rm -f conf.sdltest AC_TRY_RUN([ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } ],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" AC_TRY_LINK([ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(SDL_CFLAGS) AC_SUBST(SDL_LIBS) rm -f conf.sdltest ]) atari800-5.0.0/missing000077500000000000000000000153301425067567700144700ustar00rootroot00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: atari800-5.0.0/raspbian/000077500000000000000000000000001425067567700146665ustar00rootroot00000000000000atari800-5.0.0/raspbian/README.Raspbian000066400000000000000000000012221425067567700173010ustar00rootroot00000000000000THE RASPBIAN DIRECTORY ====================== atari800/raspbian is a modification of atari800/debian. It may be used to build Raspberry Pi packages containing two binaries: atari800rpi_bin - a special version for low powered Pis, Zero, 2 and 3. atari800stk_bin - the stock Linux version of atari800 for Pis 4 & 400. and three bash scripts: atari800 - Provides information about commands atari800rpi & atari800stk atari800rpi - Executes atari800rpi_bin with default config file .atari800rpi.cfg atari800stk - Executes atari800stk_bin with default config file .atari800stk.cfg Instructions for use are in DOC/BUILD.linux_rpi_package.atari800-5.0.0/raspbian/atari800000077500000000000000000000021241425067567700161430ustar00rootroot00000000000000#!/bin/bash echo "" echo "The atari800 package installed on your machine contains two versions of the" echo "emulator. You can start these with the following commands:" echo "" echo "atari800rpi - Runs a special version for low power Pis Zero, 2 and 3." echo "atari800stk - Runs the stock Linux version for use on the Pi 4 and 400." echo "" echo "Append ' -help' to these commands to see a list of supported options." echo "" echo "If you are running the full desktop version of Pi OS you can also" echo "start the emulator using the menu items , , " echo "and ." echo "" echo "atari800rpi uses configuration file .atari800rpi.cfg by default" echo "atari800stk uses configuration file .atari800stk.cfg by default" echo "" echo "You may use the -config option to select different configuration files." echo "The only restriction is that if you intend to swap the SD card between" echo "different models of Pi and run both versions of the emulator, they must" echo "not share the same file, because some of their configuration details are" echo "different." echo ""atari800-5.0.0/raspbian/atari800.lintian-overrides000066400000000000000000000004621425067567700216000ustar00rootroot00000000000000# Standard construct for checking existence via [ -x ] atari800: command-with-path-in-maintainer-script postrm:5 /usr/bin/update-menus # We are quite positive that relro is enabled. There is .data.rel.ro structure # present and blhc seems to be happy as well atari800: hardening-no-relro usr/bin/atari800 atari800-5.0.0/raspbian/atari800rpi000077500000000000000000000010461425067567700166600ustar00rootroot00000000000000#!/bin/bash # Bash script for running the Atari800 Emulator atari800rpi. # If -config option is specified execute atari800rpi_bin with the # given argument list otherwise append "-config .atari800rpi.cfg" # to set the default configuration file. # Initialise the -config option found flag bConFound="false" for a in "$@" do if [ "$a" == "-config" ] then bConFound="true" fi done if [ $bConFound == "false" ] then Command="atari800rpi_bin $* -config $HOME/.atari800rpi.cfg" else Command="atari800rpi_bin $*" fi exec $Commandatari800-5.0.0/raspbian/atari800stk000077500000000000000000000010461425067567700166670ustar00rootroot00000000000000#!/bin/bash # Bash script for running the Atari800 Emulator atari800stk. # If -config option is specified execute atari800stk_bin with the # given argument list otherwise append "-config .atari800stk.cfg" # to set the default configuration file. # Initialise the -config option found flag bConFound="false" for a in "$@" do if [ "$a" == "-config" ] then bConFound="true" fi done if [ $bConFound == "false" ] then Command="atari800stk_bin $* -config $HOME/.atari800stk.cfg" else Command="atari800stk_bin $*" fi exec $Commandatari800-5.0.0/raspbian/changelog000066400000000000000000000003231425067567700165360ustar00rootroot00000000000000atari800 (4.2.0-1) UNRELEASED; urgency=low * Test build 4.2.0, not for distribution -- Cliff Hatch Sat, 18 Sep 2021 17:07:37 +0100 Local variables: mode: debian-changelog End: atari800-5.0.0/raspbian/compat000066400000000000000000000000031425067567700160650ustar00rootroot0000000000000011 atari800-5.0.0/raspbian/control000066400000000000000000000017051425067567700162740ustar00rootroot00000000000000Source: atari800 Section: contrib/otherosfs Priority: optional Maintainer: Atari800 Development Team Build-Depends: libsdl1.2-dev, zlib1g-dev, libreadline-dev, libgl1-mesa-dev, libpng-dev, autotools-dev, dpkg-dev (>= 1.17.14~), autotools-dev Standards-Version: 4.2.0 Vcs-Git: git://github.com/atari800/atari800 Vcs-Browser: https://github.com/atari800/atari800 Homepage: https://atari800.github.io Package: atari800 Architecture: armhf Depends: ${shlibs:Depends} Description: Atari 8-bit emulator for Raspberry Pi Atari800 is an emulator of Atari 8-bit computer systems including the 400, 800, 1200XL, 600XL, 800XL, 65XE, 130XE, 800XE and the XE Game System, and also of the Atari 5200 SuperSystem console. . The Atari Operating System ROMs are not available with this package, due to copyright. You'll have to either make copies of them from an old Atari computer, or see README.Debian for other ways to obtain them. atari800-5.0.0/raspbian/copyright000066400000000000000000000002661425067567700166250ustar00rootroot00000000000000This is a Debian prepackaged version of the atari800 emulator. Copyright: Copyright (C) 2011, Atari800 development team. Release under GPLv2 (see /usr/share/common-licenses/GPL-2) atari800-5.0.0/raspbian/files000066400000000000000000000001621425067567700157120ustar00rootroot00000000000000atari800_4.2.0-1_armhf.buildinfo contrib/otherosfs optional atari800_4.2.0-1_armhf.deb contrib/otherosfs optional atari800-5.0.0/raspbian/menu/000077500000000000000000000000001425067567700156325ustar00rootroot00000000000000atari800-5.0.0/raspbian/menu/atari800rpi.desktop000077500000000000000000000004351425067567700212750ustar00rootroot00000000000000#!/usr/bin/env xdg-open [Desktop Entry] Type=Application Name=atari800rpi GenericName=atari800 Comment=Atari 800 emulator, special version for low power Pis Icon=atari800rpi Exec=atari800rpi Categories=Game Keywords=atari800;application; Name[en_GB]=Atari800 RPi (for Pi Zero, 2 & 3) atari800-5.0.0/raspbian/menu/atari800rpi.png000077500000000000000000000127571425067567700204220ustar00rootroot00000000000000PNG  IHDRg- pHYs+IDATx{e?3gwo+xM !hF6m^ !*wEh^hvnڽe.=sٝ'93y; 0\Bv7BWU89_g(V=ho[ <͍A>5mn-_;v̍- ~5=4a(l<3g:;1޹=Lq]U"(p!@ \↹~&7l(юo< \}}ڏ~iN9ֿKRaL&[,`К<M(HOw3[K$;jk w|m`vSOLdz"G͟_R֭+0?[|+~J܌ˑ:f/ \EP*BWU,[[^pF<<9շ O J!_|ޚJ]w:xIfVޝ< 6٧m45,\xmسyXk);U*\}0:CCִ&-[%.|ϓub]U"(p!@ \0Wi'\.EUattTI/~>-]BEfPo%I8|ۢ U"(p!@H[$Ld /z}Zw9rʂE|>Yf[|YR<_upc"> śXS`^,8uh (e#)iL=a@w%U%;Q%j#^߇K/U"(p!@ \EP*BWU"(p!@ \b0+HooЧIJ): ?YZ7c޵TLW*I'K6A H{!` \EP*BWJf)YWʐ ha,T)wߨCaWş[*e2X"(p!@ \EP*s[^ A@iveFfS֖h1#ƙWr{o]u9׿N*"(p!@ \EP*7̭eRV0#C2V!IRENF ckINW[fS!6gw:-azϚ5Jy]"ɓXP!.)\KIUFsuD">KZ.q(8h,]ZCuߑ5M…4H&E?aɒu`x8Cg5pؼ7A<k'zŋjlfleyWcw18{vo}E~Oyl=oɒ:n Qӟ;\`O)LSStߍ)d2~RE&@KKY9;R*}> !ZZ(2$ID"{7ޒB*IX^oiCHOs~Sz=D~jj~i%E皲h>GG06i U>ni1QTUgp0osY~,o/ IU2x<##YM3{$d2G8CQddy6ǯ0̼dYh%I6YN4!4\:Fe,XP50 ڴ,o'R]%N2 ryH "IĢ1hN2'A>_ޘ0Or, cj_׋>H: qt4CgѱׇD|H9mixq弖o^R<ÙzIO4:3`0aC+"HL?4}s3;>fݼy!!jkZ0!/6',Oy4]ʍ7.FeZ[~Y3t:[oF SO{Xfϯ"q jd*Q?70km0`93BGǰ8ϑ#H,ZTڵ& mK&X}8w?N.җ-@I2cqc[M'{Jl=edd"UU~KxW,7&N\$I(gRp KFC2Ɩe@@!P&}rw1o2#Q'&ݻ]lV%$\& 6f%!bp` VTU/A8|^YA0d?aA:0ѭ_J:'pM38ujTJ-i,2455[ZÊEfyc;6 &fsNHūfxx#5M̙6ofNrP/>nd˖5,_^g9?/ÁcƋxL:u׵n]MU/XRy.v>K.5]٬ɓx4,rtZe:K0N|2cGG:+"ˢiXw^Vd"I4PyoSxA#VtGcK]*3dY(SZnIȐJ3y(Sxn5͘X,3 $ haWa@,}8/ iZ[Ú[C*$Uhi *5QUeq23g}K4̙+^K?7:x$6mZw_5RU|sm$)nIÂUj_$|3Ї(2͘X,gyvS9cD-A2ԩa?45-7B4窫 'ᰏ+ٸq`NéYoKOObU\P0̙f>o2mW(\!t]'cd:Ba/CkijRFϬǯUQLxact:k+woJtt '8xP˵6vm#hǭ^euh@rQ wݵљ1 X,=%E%xNS>~}+׷8xE[uȲDkkE\Nc{H24^RCܦlobp0߯P[_ǒ%5^|ӫ&Go; *VVGU?Y bdjIѧZb޼<+ܼy!Wϛh(|^ wG8~||^':t 0LB: łd&\^aX#SWY8vlŐɨtw,TXָX$I>D]qƗt i^Nؗ%@UL,ʏ3]:ޥId&'HDud2P"k8)[pNu֑ CCֈQZ5@ק!UaɜyR|A\>gJRR<#ȍKi af,-X٬Vtv>̏2xxБ#]a*;K )t<]7Os9~|bhzlWj26qz{HdywKZ2wbpК5o~s^;hi>=(*y'._)bIH[}d2EOGQ+v"?Mh>6uؿ :۞' G-B1gٷ$mXkuUՌ{U ^DabIUۖJQ z6RӪA0LyoU5dE\MGQf 7U"(p!@ \EP*BWU/CsIENDB`atari800-5.0.0/raspbian/menu/atari800stk.desktop000077500000000000000000000004201425067567700212760ustar00rootroot00000000000000#!/usr/bin/env xdg-open [Desktop Entry] Type=Application Name=atari800stk GenericName=atari800 Comment=Atari 800 emulator, standard Linux version Icon=atari800stk Exec=atari800stk Categories=Game Keywords=atari800;application; Name[en_GB]=Atari800 Stock (for Pi 4 & 400) atari800-5.0.0/raspbian/menu/atari800stk.png000077500000000000000000000130251425067567700204160ustar00rootroot00000000000000PNG  IHDRg- pHYs+IDATxy՝?U]}wl|am1`bHcc $B$J 6IJ-! 6"6 `BBp {fz.Lu533U==Sj!{W;J ΀U"(p!@ \E{׿6gVsal2<,Z0FFԴjر0OO_o=8a,磌?{]۴iaݮ]&` \EP*BWJk/ܸ|";v=΍{/\ru؏~ccaw 'N8ť.l|^QW=`iXS:X ˙-+LW:s{72+>!xiW_/G*vrKe_ކ ;v̹dչ :;+++W^M7Uf﷿n{!@ \EP*BW)rwWn u؎97Q>_GjlD"PSSA y&6hXE<|Y/Oddlݻn5QoZ^~~m&X*BWUR4 ޺n /,=C}+zI/|snx(Ji6> q.ttvǏa7j"^]L6xDK/-;U)\qu8a--jP[[RLK ` \EP*BWa>d2O繜Bs4%KʯVx S sno2sйx<׿Z8]Tռ7+VJ.W UP$D,p!@ \EP* Fbuz|--d9Y i 3 æKbhi1XTa>zye2d-@`>}@ \EP*BWU"(p!@ \EP*\0P%4? B*`ޟSr J{+ZUNM*YmNW> ''+,䧧sgaƓ,v BО45"(p!@BZh+g6G?P3rzݘu'HroI{N7C$+fqЧ1{ 2a^| ̐~E,p!@ \EP*BW)v. +`^A S٭!^*, ̏W8$U{a*lu-` \EP*BW5ǀ׫l}P[&l}oQ7W/̃ ]zn. ` \EP*BW{|3FyBpYFʄ p}ʄ]X& `= U"(p!@_ULGFQEī5ʄ5ʄ IlJ oJl~7Uh&X*BWUb wcgJ3hӘ_r8 [^+wB{ 흳y@4WU"(p!@( #pQ \EP*BWU"(p!@ \EP*{<۫bPӾgZYކ$IU{6n`[+;S9%J0 t2 Y9[3I9H`:\S}֭[籕h9Yf`(tWCKKxN6%Q}qܚjU$,8}:N_:N7>+VQ[w$BM9s& Ro;tOX#кn06gd4p|6ATUg0 r9\NE/5[MI$rey~IHd d2^~jwg0fUY3D0)!SWt,|^/If_!tuiok p-YD(%qho:##)zjNt6qG JЖad8yr[YêU -@@aVn"4`h(Ł1z{mgM3xD%lΊx2˖r +Yd2ϑ#?~tznv9 G=̳'/YuF,!;.CUu |sg$wf7o000r9~,o(gɨfx$dzr*f ITp؇YmNݏaiɲ4]K4m*u;IRKKhyꤏ/YdIͬF0sQpKmmC{{H;+fUΜɐϫ%+G.@]]I2a-EtR yȲD(d~ez6U.Kz/j)xϓOΞTϣ1D}}5kE%yOѨ}l\ Yiorn"2o9kbhF FFOtv{Xnr/!q啋 Nyn:;X쉱s^r\zi+"|y-[꫗knzut<9K/u7k{/*@/_%FTA#~%XQ,Mk@]rPрK9LSSkY#/@ÚSOsaH?/M4X7xq Ѩ+\ebwo?tuY p߾~B`Z.hY-jYɲ4Y.k'8[o Q(*~$z=%./r@ {oͩg,cOf N&QS/ jJ'&%&Nߏ$I(gڏRv KFC(c˲D (yz>B f7ʓͪɩ*Sd.L晘;v;Idfr:::Z(X[k::B035N"0ر`l Sı3a[~ɓcC60ݬK&S `l,81F:V4A0'2tt >ի ͛s<F FGӣ9'vN26ZMwlF<8΁|.-[ֱjUCɵCC){럜[O000a{q6skk\~y׷ZMԄu:]WOUsD.q^x$l~@A.(%Qٻ2[iym<?D"ͱgYA$IHҔOBQɿF&aLNudߙC:ΐe C ܒ$++C@@)4czg[)K> àPNIDQb $ Z[#Z0{?Q_`%,[VHY(BGG 55f'U'>mp0YQ7gT`?8҃#yy~œ3/.^\>A*U(pKx,W$3YÇ?ElL$){4y%s R<'Nwo?".y@Q?_\v~@ zu#6-́r\N7o %'^O.s9,>C6MEvX}Bs#߇d2ئ$pK8|jknLoK?p^t{M-3 /4sN>1}ys[(::]]c<1 yV.PK4g4Mgx8c9_@n"#LaDc L+=Kjpˆ lPO*Wse(KFW8N1:iKܦed$߯P__u^jj|ko;ZT f-z^݈ڏ r9"byLK,ZEW_}k.UDgq0N"sFm*@J*6@"2>vx]֟H*){<2 !-4s4YD[It:O"a6$I46hhxw?LLKpl˲/7%@UNOO1ƝuIUNN/k?dJT]7H f2 Lretݜg2:Z37U tJ-㍍eI e}rD ~MIydyaNa&iUh*@]JOǯlZtАeSNx.SBJczh(iO ZZ"%)|slv"/XQ-Fɑ+@z'$eO *j;L-JGߒmzêUUs5~WIF0J1 S,jYS)vAmS5U&:owRo U5f \̈́- 8F*BWU"(p!@ \EP*BWwgIENDB`atari800-5.0.0/raspbian/postinst000077500000000000000000000001411425067567700164730ustar00rootroot00000000000000#!/bin/sh set -e if [ "$1" = "configure" -a -x /usr/bin/update-menus ]; then update-menus ; fi atari800-5.0.0/raspbian/postrm000077500000000000000000000001131425067567700161330ustar00rootroot00000000000000#!/bin/sh set -e if [ -x /usr/bin/update-menus ]; then update-menus ; fi atari800-5.0.0/raspbian/prerm000077500000000000000000000001761425067567700157450ustar00rootroot00000000000000#!/bin/sh set -e if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/atari800 ]; then rm -f /usr/doc/atari800 fi atari800-5.0.0/raspbian/rules000077500000000000000000000116641425067567700157560ustar00rootroot00000000000000#!/usr/bin/make -f # # This make file supports the targets: # build, clean, binary-indep, binary-arch, and binary # # Package name variables # P=atari800 export DEB_BUILD_MAINT_OPTIONS = hardening=+all DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/buildflags.mk CFLAGS+=$(CPPFLAGS) CXXFLAGS+=$(CPPFLAGS) # Build the binary components and assemble the libraries # ===================================================================== build: build-arch build-indep build-arch: build-stamp build-indep: build-stamp build-stamp: $(checkdir) debian/rules bld-sdl touch build-stamp bld-sdl: cp /usr/share/misc/config.guess /usr/share/misc/config.sub src if [ -e Makefile ]; then $(MAKE) clean; fi # Configure and make atari800rpi binary ./configure --target=rpi $(MAKE) mv src/$(P) src/$(P)rpi_bin # Configure and make atari800stk binary ./configure --enable-opengl-by-default $(MAKE) mv src/$(P) src/$(P)stk_bin # Clean up after a build and before building a source package #====================================================================== clean: $(checkdir) -rm -f build-stamp if [ -e Makefile ]; then $(MAKE) clean; fi; \ rm -f config.log config.status config.h Makefile rm -f src/config.guess src/config.sub mv ./atari800.spec ./tmp ; rm -f atari800 ; rm -f atari800.* ; mv ./tmp ./atari800.spec -rm -rf debian/tmp debian/*~ *~ *.orig *.log \ debian/files* debian/substvars* binary: binary-arch # No binary independent components to this package #====================================================================== binary-indep: # # No independent components # echo "No independent binary components." # Install package components into debian/tmp to be built into packages #====================================================================== binary-arch: checkroot build # Clean out old tmp directory # -rm -rf debian/tmp install -d debian/tmp # Install installation scripts # install -d debian/tmp/DEBIAN install -m 755 debian/postinst debian/tmp/DEBIAN/. install -m 755 debian/postrm debian/tmp/DEBIAN/. install -m 755 debian/prerm debian/tmp/DEBIAN/. # Install docs in proper directory and gzip them # install -d debian/tmp/usr/share/doc/$(P) cp debian/changelog debian/tmp/usr/share/doc/$(P)/changelog.Debian cp DOC/ChangeLog debian/tmp/usr/share/doc/$(P)/changelog cp DOC/NEWS debian/tmp/usr/share/doc/$(P)/NEWS cp DOC/CREDITS debian/tmp/usr/share/doc/$(P)/CREDITS cp DOC/README debian/tmp/usr/share/doc/$(P)/README cp DOC/USAGE debian/tmp/usr/share/doc/$(P)/USAGE gzip -9nv debian/tmp/usr/share/doc/$(P)/* # These are too small to gzip # cp DOC/FAQ debian/tmp/usr/share/doc/$(P)/FAQ cp DOC/BUGS debian/tmp/usr/share/doc/$(P)/BUGS cp DOC/TODO debian/tmp/usr/share/doc/$(P)/TODO cp debian/README.Raspbian debian/tmp/usr/share/doc/$(P)/README.Raspbian cp DOC/README.RPI debian/tmp/usr/share/doc/$(P)/README.RPI # and don't gzip the copyright statement # cp debian/copyright debian/tmp/usr/share/doc/$(P)/copyright # install and gzip man page for atari800stk and atari800rpi # install -d debian/tmp/usr/share/man/man1 install -m 644 src/$(P).man debian/tmp/usr/share/man/man1/$(P)stk.1 gzip -9nv debian/tmp/usr/share/man/man1/$(P)stk.1 install -m 644 src/$(P).man debian/tmp/usr/share/man/man1/$(P)rpi.1 gzip -9nv debian/tmp/usr/share/man/man1/$(P)rpi.1 # install menu items, desktop and icon files # install -d debian/tmp/usr/share/applications install -m 644 debian/menu/$(P)rpi.desktop debian/tmp/usr/share/applications/$(P)rpi.desktop install -m 644 debian/menu/$(P)stk.desktop debian/tmp/usr/share/applications/$(P)stk.desktop install -d debian/tmp/usr/share/pixmaps install -m 644 debian/menu/$(P)rpi.png debian/tmp/usr/share/pixmaps/$(P)rpi.png install -m 644 debian/menu/$(P)stk.png debian/tmp/usr/share/pixmaps/$(P)stk.png # install bash scripts # install -d debian/tmp/usr/bin install debian/$(P) debian/tmp/usr/bin/$(P) install debian/$(P)rpi debian/tmp/usr/bin/$(P)rpi install debian/$(P)stk debian/tmp/usr/bin/$(P)stk # install binaries # install -s src/$(P)rpi_bin debian/tmp/usr/bin/$(P)rpi_bin install -s src/$(P)stk_bin debian/tmp/usr/bin/$(P)stk_bin strip -R .comment -R .note -R .note.ABI-tag debian/tmp/usr/bin/$(P)rpi_bin strip -R .comment -R .note -R .note.ABI-tag debian/tmp/usr/bin/$(P)stk_bin # Install lintian overrides install -d debian/tmp/usr/share/lintian/overrides install -m 644 debian/atari800.lintian-overrides debian/tmp/usr/share/lintian/overrides/atari800 # Create dependency information # dpkg-shlibdeps debian/tmp/usr/bin/$(P)stk_bin dpkg-shlibdeps debian/tmp/usr/bin/$(P)rpi_bin # Generate control file for the package # dpkg-gencontrol -p$(P) # Clean up file ownership # chown -R root.root debian/tmp # and permissions # chmod -R g-ws debian/tmp # and build the package # dpkg --build debian/tmp .. define checkdir test -f ./atari800.spec endef # Below here is fairly generic really checkroot: $(checkdir) test root = "`whoami`" .PHONY: binary binary-arch binary-indep clean checkroot atari800-5.0.0/raspbian/source/000077500000000000000000000000001425067567700161665ustar00rootroot00000000000000atari800-5.0.0/raspbian/source/format000077500000000000000000000000141425067567700173770ustar00rootroot000000000000003.0 (quilt) atari800-5.0.0/src/000077500000000000000000000000001425067567700136565ustar00rootroot00000000000000atari800-5.0.0/src/Makefile.am000066400000000000000000000274471425067567700157300ustar00rootroot00000000000000AUTOMAKE_OPTIONS = subdir-objects if CONFIGURE_TARGET_LIBATARI800 TARGET_BASE_NAME = libatari800.a else TARGET_BASE_NAME = atari800 endif TARGET = $(TARGET_BASE_NAME) bin_PROGRAMS = noinst_PROGRAMS = man1dir = $(mandir)/man1 SUFFIXES = .c .cpp .s .o .h .asm doc_DATA = atari800_CPPFLAGS = if CONFIGURE_TARGET_LIBATARI800 lib_LIBRARIES = libatari800.a include_HEADERS = libatari800/libatari800.h libatari800_a_SOURCES = \ libatari800/libatari800.h \ libatari800/api.c \ libatari800/cpu_crash.h \ libatari800/main.c libatari800/main.h \ libatari800/init.c libatari800/init.h \ libatari800/exit.c \ libatari800/input.c libatari800/input.h \ libatari800/video.c libatari800/video.h \ libatari800/statesav.c libatari800/statesav.h \ libatari800/sound.c libatari800/sound.h noinst_PROGRAMS += libatari800_test guess_settings libatari800_test_SOURCES = libatari800/libatari800_test.c libatari800_test_CFLAGS = -Ilibatari800 libatari800_test_LDADD = libatari800.a guess_settings_SOURCES = libatari800/guess_settings.c guess_settings_CFLAGS = -Ilibatari800 guess_settings_LDADD = libatari800.a else if CONFIGURE_HOST_JAVANVM all-local:: $(TARGET_BASE_NAME).jar JAVA = java JAVAC = javac else if CONFIGURE_TARGET_ANDROID all-local:: android else bin_PROGRAMS += atari800 endif endif endif atari800_SOURCES = \ platform.h \ pcjoy.h \ akey.h \ afile.c afile.h \ antic.c antic.h \ atari.c atari.h \ binload.c binload.h \ cartridge.c cartridge.h \ cartridge_info.c cartridge_info.h \ cassette.c cassette.h \ compfile.c compfile.h \ cfg.c cfg.h \ cpu.c cpu.h \ crc32.c crc32.h \ devices.c devices.h \ esc.c esc.h \ gtia.c gtia.h \ img_tape.c img_tape.h \ log.c log.h \ memory.c memory.h \ monitor.c monitor.h \ pbi.c pbi.h \ pia.c pia.h \ pokey.c pokey.h \ roms/altirra_5200_os.c roms/altirra_5200_os.h \ rtime.c rtime.h \ sio.c sio.h \ sysrom.c sysrom.h \ util.c util.h atari800_LDADD = if A8_USE_SDL atari800_SOURCES += sdl/init.c sdl/init.h if CONFIGURE_HOST_WIN atari800_SOURCES += sdl/SDL_win32_main.c atari800_CPPFLAGS += -Dmain=SDL_main endif endif if WITH_SOUND atari800_SOURCES += \ pokeysnd.c pokeysnd.h \ mzpokeysnd.c mzpokeysnd.h \ remez.c remez.h endif if WITH_SOUND_SDL atari800_SOURCES += sound.c sound.h sdl/sound.c endif if WITH_SOUND_FALCON atari800_SOURCES += sound.c falcon/sound.c endif if WITH_SOUND_JAVANVM atari800_SOURCES += sound.c javanvm/sound.c endif if WITH_SOUND_DOSSB atari800_SOURCES += sound.c dos/sound_dos.c dos/dos_sb.c dos/dos_sb.h endif if WITH_SOUND_OSS atari800_SOURCES += sound.c sound_oss.c endif if WITH_SOUND_WIN atari800_SOURCES += win32/sound.c endif if WITH_SOUND_LIBATARI800 atari800_SOURCES += sound.c libatari800/sound.c libatari800/sound.h endif if WANT_POKEYREC atari800_SOURCES += pokeyrec.c pokeyrec.h endif if WITH_FILE_EXPORT atari800_SOURCES += file_export.c file_export.h if WITH_MULTIMEDIA atari800_SOURCES += codecs/container.c codecs/container.h if WITH_SOUND atari800_SOURCES += codecs/container_wav.c codecs/container_wav.h \ codecs/audio.c codecs/audio.h \ codecs/audio_pcm.c codecs/audio_pcm.h \ codecs/audio_adpcm.c codecs/audio_adpcm.h \ codecs/audio_mulaw.c codecs/audio_mulaw.h if WITH_AUDIO_CODEC_MP3 atari800_SOURCES += codecs/audio_mp3.c codecs/audio_mp3.h \ codecs/container_mp3.c codecs/container_mp3.h endif endif if WITH_VIDEO_RECORDING atari800_SOURCES += codecs/container_avi.c codecs/container_avi.h \ codecs/video.c codecs/video.h \ codecs/video_mrle.c codecs/video_mrle.h if WITH_VIDEO_CODEC_PNG atari800_SOURCES += codecs/video_mpng.c codecs/video_mpng.h endif if WITH_VIDEO_CODEC_ZMBV atari800_SOURCES += codecs/video_zmbv.c codecs/video_zmbv.h endif endif endif endif if CONFIGURE_TARGET_FALCON atari800_SOURCES += \ falcon/main.c falcon/c2p_uni.asm falcon/c2p_unid.asm falcon/videl.asm falcon/ikbd.asm \ falcon/res.h falcon/xcb.h falcon/jclkcook.h endif if CONFIGURE_TARGET_PS2 atari800_SOURCES += atari_ps2.c atari800_LDADD += ps2kbd.s usbd.s audsrv.s endif if CONFIGURE_TARGET_RPI atari800_SOURCES += atari_rpi.c gles2/video.c sdl/main.c sdl/input.c sdl/input.h endif if CONFIGURE_TARGET_WINDX noinst_LIBRARIES = libwin32.a libwin32_a_SOURCES = \ win32/atari_win32.c win32/atari_win32.h \ win32/screen_win32.c win32/screen_win32.h \ win32/render_direct3d.c win32/render_direct3d.h \ win32/render_directdraw.c win32/render_directdraw.h \ win32/render_gdi.c win32/render_gdi.h \ win32/render_gdiplus.c win32/render_gdiplus.h \ win32/main.c win32/main.h win32/main_menu.h \ win32/keyboard.c win32/keyboard.h \ win32/joystick.c win32/joystick.h atari800_LDADD += libwin32.a win32/atari.ro # A special rule for win32 to not compile with -ansi -pedantic libwin32_a_CFLAGS = $(CFLAGS_NOANSI) endif if CONFIGURE_TARGET_X11 atari800_SOURCES += atari_x11.c endif if WITH_VIDEO_JAVANVM atari800_SOURCES += javanvm/main.c javanvm/javanvm.h javanvm/video.c javanvm/video.h javanvm/input.c javanvm/input.h endif if WITH_VIDEO_SDL atari800_SOURCES += \ videomode.c videomode.h \ sdl/main.c \ sdl/video.c sdl/video.h \ sdl/video_sw.c sdl/video_sw.h \ sdl/input.c sdl/input.h \ sdl/palette.c sdl/palette.h atari800_SOURCES += pbi_proto80.c pbi_proto80.h af80.c af80.h bit3.c bit3.h endif if WITH_VIDEO_DOSVGA atari800_SOURCES += dos/atari_vga.c dos/vga_gfx.c dos/vga_gfx.h dos/vga_asm.s dos/dos_ints.h endif if WITH_VIDEO_CURSES atari800_SOURCES += atari_curses.c endif if WITH_VIDEO_NO atari800_SOURCES += atari_basic.c else # These objects are not compiled when --with-video=no atari800_SOURCES += input.c input.h statesav.c statesav.h if !WITH_VIDEO_LIBATARI800 atari800_SOURCES += ui_basic.c ui_basic.h ui.c ui.h endif if !WANT_CURSES_BASIC # These objects are not compiled when --with-video=no or --enable-cursesbasic=no atari800_SOURCES += \ artifact.c artifact.h \ colours.c colours.h \ colours_ntsc.c colours_ntsc.h \ colours_pal.c colours_pal.h \ colours_external.c colours_external.h \ screen.c screen.h \ codecs/image.c codecs/image.h \ codecs/image_pcx.c codecs/image_pcx.h if WITH_LIBPNG atari800_SOURCES += codecs/image_png.c codecs/image_png.h endif if WANT_NEW_CYCLE_EXACT atari800_SOURCES += cycle_map.c cycle_map.h endif endif endif if WANT_EMUOS_ALTIRRA atari800_SOURCES += \ roms/altirraos_800.c roms/altirraos_800.h \ roms/altirraos_xl.c roms/altirraos_xl.h \ roms/altirra_basic.c roms/altirra_basic.h endif if WANT_PBI_MIO atari800_SOURCES += pbi_mio.c pbi_mio.h endif if WANT_PBI_BB atari800_SOURCES += pbi_bb.c pbi_bb.h endif if WANT_PBI_MIO_OR_BB atari800_SOURCES += pbi_scsi.c pbi_scsi.h endif if WANT_PBI_XLD if WITH_SOUND atari800_SOURCES += pbi_xld.c pbi_xld.h endif endif if WANT_VOICEBOX if WITH_SOUND atari800_SOURCES += voicebox.c voicebox.h endif endif if WANT_PBI_XLD_OR_VOICEBOX if WITH_SOUND atari800_SOURCES += votrax.c votrax.h votraxsnd.c votraxsnd.h endif endif if WANT_IDE atari800_SOURCES += ide.c ide.h ide_internal.h endif if WITH_OPENGL atari800_SOURCES += sdl/video_gl.c sdl/video_gl.h endif if WANT_FALCON_CPUASM atari800_SOURCES += falcon/cpu_m68k.asm endif if WANT_XEP80_EMULATION atari800_SOURCES += xep80.c xep80.h xep80_fonts.c xep80_fonts.h endif if WANT_NTSC_FILTER atari800_SOURCES += \ filter_ntsc.c filter_ntsc.h \ atari_ntsc/atari_ntsc.c atari_ntsc/atari_ntsc.h \ atari_ntsc/atari_ntsc_config.h atari_ntsc/atari_ntsc_impl.h endif if WANT_PAL_BLENDING atari800_SOURCES += pal_blending.c pal_blending.h endif if WANT_R_IO_DEVICE atari800_SOURCES += rdevice.c rdevice.h endif if CONFIGURE_TARGET_LIBATARI800 libatari800_a_SOURCES += $(atari800_SOURCES) endif # A special rule for SDL_win32_main.c to suppress warnings since this file is # from SDL and should not have to be modified sdl/SDL_win32_main.o: sdl/SDL_win32_main.c $(CC) -c -o $@ $(AM_CPPFLAGS) $(CFLAGS) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< ide.o: ide.c ide.h ide_internal.h $(CC) -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< win32/atari.ro: win32/atari.rc $(WINDRES) -o $@ --output-format coff --target pe-i386 --define WIN32 --define __MINGW32__ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $< # some special rules for some win32 source files which are actually C++ win32/main.o: win32/main.c $(CC) -x c++ -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< win32/render_gdiplus.o: win32/render_gdiplus.c $(CC) -x c++ -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< win32/render_direct3d.o: win32/render_direct3d.c $(CC) -x c++ -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< .asm.o: $(CCAS) $(CCASFLAGS) -o $@ $< if CONFIGURE_HOST_JAVANVM $(TARGET_BASE_NAME).class: javanvm/$(TARGET_BASE_NAME).java | $(TARGET_BASE_NAME)_runtime.class $(JAVAC) -d . $(JAVACFLAGS) $< RUNTIME = _runtime else RUNTIME = endif $(TARGET_BASE_NAME)$(RUNTIME).class: $(TARGET) #To compile using java bytecode directly: # $(JAVA) $(JAVAFLAGS) org.ibex.nestedvm.Compiler -o UnixRuntime -outfile $@ $(TARGET_BASE_NAME)$(RUNTIME) $(TARGET) $(JAVA) $(JAVAFLAGS) org.ibex.nestedvm.Compiler -o UnixRuntime -outformat javasource -outfile $(TARGET_BASE_NAME)$(RUNTIME).java $(TARGET_BASE_NAME)$(RUNTIME) $(TARGET) $(JAVAC) -d . $(JAVACFLAGS) -J-Xmx256m $(TARGET_BASE_NAME)$(RUNTIME).java ##Also, -o UnixRuntime fixes directory browsing but requires /c:/-style paths $(TARGET_BASE_NAME).jar: $(TARGET_BASE_NAME).class $(TARGET_BASE_NAME)$(RUNTIME).class printf "Manifest-Version: 1.0\nMain-Class: $(TARGET_BASE_NAME)\nClass-Path: unix_runtime.jar\n" > .manifest jar cfm $(TARGET_BASE_NAME).jar .manifest *.class # Allow parallel execution in sub-make with '+' android: + $(NDK_BUILD) -C android ant -f android/build.xml debug .PHONY: android CLEANFILES = *.o *.a *.class .manifest $(TARGET) $(TARGET_BASE_NAME).jar $(TARGET_BASE_NAME)_runtime.java core *.bak *~ CLEANFILES += roms/*.o roms/*.bak roms/*~ CLEANFILES += dos/*.o dos/*.bak dos/*~ CLEANFILES += falcon/*.o falcon/*.bak falcon/*~ CLEANFILES += sdl/*.o sdl/*.bak sdl/*~ CLEANFILES += win32/*.o win32/*.ro win32/*.bak win32/*~ CLEANFILES += javanvm/*.o javanvm/*.bak javanvm/*~ CLEANFILES += atari_ntsc/*.o atari_ntsc/*.bak atari_ntsc/*~ CLEANFILES += android/libs android/obj android/bin android/gen CLEANFILES += libatari800/*.o libatari800/*.bak libatari800/*~ DISTCLEANFILES = Makefile configure config.log config.status config.h android/jni/Android.mk DISTCLEANFILES += autom4te.cache install-data-local: $(mkinstalldirs) $(DESTDIR)$(man1dir) $(INSTALL_DATA) $(srcdir)/atari800.man ${DESTDIR}${man1dir}/atari800.1 uninstall-local: $(RM) ${DESTDIR}${man1dir}/atari800.1* readme.html: $(TARGET) ./$(TARGET) -help $@ doc: readme.html EXTRA_DIST = $(doc_DATA) atari800.man EXTRA_DIST += joycfg.c mkimg.c EXTRA_DIST += win32/atari.rc win32/atari1.ico EXTRA_DIST += vtxsmpls.inc EXTRA_DIST += javanvm/UnixRuntime.patch javanvm/atari800.java EXTRA_DIST += macosx EXTRA_DIST += wince EXTRA_DIST += win32/msc EXTRA_DIST += amiga EXTRA_DIST += \ android/AndroidManifest.xml \ android/build.xml \ android/project.properties \ android/jni/Android.mk.in \ android/jni/Application.mk \ android/jni/keys.inc \ android/jni/androidinput.c android/jni/androidinput.h \ android/jni/graphics.c android/jni/graphics.h \ android/jni/jni.c \ android/jni/platform.c \ android/jni/sound.c \ android/res/ \ android/src/A800Renderer.java \ android/src/A800view.java \ android/src/AudioThread.java \ android/src/FileSelector.java \ android/src/KeymapPreference.java \ android/src/MainActivity.java \ android/src/Preferences.java \ android/src/SliderPreference.java \ $(empty) atari800-5.0.0/src/Makefile.in000066400000000000000000011741071425067567700157360ustar00rootroot00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = $(am__EXEEXT_1) noinst_PROGRAMS = $(am__EXEEXT_2) @CONFIGURE_TARGET_LIBATARI800_TRUE@am__append_1 = libatari800_test guess_settings @CONFIGURE_HOST_JAVANVM_FALSE@@CONFIGURE_TARGET_ANDROID_FALSE@@CONFIGURE_TARGET_LIBATARI800_FALSE@am__append_2 = atari800 @A8_USE_SDL_TRUE@am__append_3 = sdl/init.c sdl/init.h @A8_USE_SDL_TRUE@@CONFIGURE_HOST_WIN_TRUE@am__append_4 = sdl/SDL_win32_main.c @A8_USE_SDL_TRUE@@CONFIGURE_HOST_WIN_TRUE@am__append_5 = -Dmain=SDL_main @WITH_SOUND_TRUE@am__append_6 = \ @WITH_SOUND_TRUE@ pokeysnd.c pokeysnd.h \ @WITH_SOUND_TRUE@ mzpokeysnd.c mzpokeysnd.h \ @WITH_SOUND_TRUE@ remez.c remez.h @WITH_SOUND_SDL_TRUE@am__append_7 = sound.c sound.h sdl/sound.c @WITH_SOUND_FALCON_TRUE@am__append_8 = sound.c falcon/sound.c @WITH_SOUND_JAVANVM_TRUE@am__append_9 = sound.c javanvm/sound.c @WITH_SOUND_DOSSB_TRUE@am__append_10 = sound.c dos/sound_dos.c dos/dos_sb.c dos/dos_sb.h @WITH_SOUND_OSS_TRUE@am__append_11 = sound.c sound_oss.c @WITH_SOUND_WIN_TRUE@am__append_12 = win32/sound.c @WITH_SOUND_LIBATARI800_TRUE@am__append_13 = sound.c libatari800/sound.c libatari800/sound.h @WANT_POKEYREC_TRUE@am__append_14 = pokeyrec.c pokeyrec.h @WITH_FILE_EXPORT_TRUE@am__append_15 = file_export.c file_export.h @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@am__append_16 = codecs/container.c codecs/container.h @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@am__append_17 = codecs/container_wav.c codecs/container_wav.h \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio.c codecs/audio.h \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio_pcm.c codecs/audio_pcm.h \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio_adpcm.c codecs/audio_adpcm.h \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio_mulaw.c codecs/audio_mulaw.h @WITH_AUDIO_CODEC_MP3_TRUE@@WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@am__append_18 = codecs/audio_mp3.c codecs/audio_mp3.h \ @WITH_AUDIO_CODEC_MP3_TRUE@@WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/container_mp3.c codecs/container_mp3.h @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__append_19 = codecs/container_avi.c codecs/container_avi.h \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@ codecs/video.c codecs/video.h \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@ codecs/video_mrle.c codecs/video_mrle.h @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_CODEC_PNG_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__append_20 = codecs/video_mpng.c codecs/video_mpng.h @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_CODEC_ZMBV_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__append_21 = codecs/video_zmbv.c codecs/video_zmbv.h @CONFIGURE_TARGET_FALCON_TRUE@am__append_22 = \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/main.c falcon/c2p_uni.asm falcon/c2p_unid.asm falcon/videl.asm falcon/ikbd.asm \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/res.h falcon/xcb.h falcon/jclkcook.h @CONFIGURE_TARGET_PS2_TRUE@am__append_23 = atari_ps2.c @CONFIGURE_TARGET_PS2_TRUE@am__append_24 = ps2kbd.s usbd.s audsrv.s @CONFIGURE_TARGET_RPI_TRUE@am__append_25 = atari_rpi.c gles2/video.c sdl/main.c sdl/input.c sdl/input.h @CONFIGURE_TARGET_WINDX_TRUE@am__append_26 = libwin32.a win32/atari.ro @CONFIGURE_TARGET_X11_TRUE@am__append_27 = atari_x11.c @WITH_VIDEO_JAVANVM_TRUE@am__append_28 = javanvm/main.c javanvm/javanvm.h javanvm/video.c javanvm/video.h javanvm/input.c javanvm/input.h @WITH_VIDEO_SDL_TRUE@am__append_29 = videomode.c videomode.h \ @WITH_VIDEO_SDL_TRUE@ sdl/main.c sdl/video.c sdl/video.h \ @WITH_VIDEO_SDL_TRUE@ sdl/video_sw.c sdl/video_sw.h sdl/input.c \ @WITH_VIDEO_SDL_TRUE@ sdl/input.h sdl/palette.c sdl/palette.h \ @WITH_VIDEO_SDL_TRUE@ pbi_proto80.c pbi_proto80.h af80.c af80.h \ @WITH_VIDEO_SDL_TRUE@ bit3.c bit3.h @WITH_VIDEO_DOSVGA_TRUE@am__append_30 = dos/atari_vga.c dos/vga_gfx.c dos/vga_gfx.h dos/vga_asm.s dos/dos_ints.h @WITH_VIDEO_CURSES_TRUE@am__append_31 = atari_curses.c @WITH_VIDEO_NO_TRUE@am__append_32 = atari_basic.c # These objects are not compiled when --with-video=no @WITH_VIDEO_NO_FALSE@am__append_33 = input.c input.h statesav.c statesav.h @WITH_VIDEO_LIBATARI800_FALSE@@WITH_VIDEO_NO_FALSE@am__append_34 = ui_basic.c ui_basic.h ui.c ui.h # These objects are not compiled when --with-video=no or --enable-cursesbasic=no @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@am__append_35 = \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ artifact.c artifact.h \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours.c colours.h \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours_ntsc.c colours_ntsc.h \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours_pal.c colours_pal.h \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours_external.c colours_external.h \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ screen.c screen.h \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ codecs/image.c codecs/image.h \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ codecs/image_pcx.c codecs/image_pcx.h @WANT_CURSES_BASIC_FALSE@@WITH_LIBPNG_TRUE@@WITH_VIDEO_NO_FALSE@am__append_36 = codecs/image_png.c codecs/image_png.h @WANT_CURSES_BASIC_FALSE@@WANT_NEW_CYCLE_EXACT_TRUE@@WITH_VIDEO_NO_FALSE@am__append_37 = cycle_map.c cycle_map.h @WANT_EMUOS_ALTIRRA_TRUE@am__append_38 = \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/altirraos_800.c roms/altirraos_800.h \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/altirraos_xl.c roms/altirraos_xl.h \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/altirra_basic.c roms/altirra_basic.h @WANT_PBI_MIO_TRUE@am__append_39 = pbi_mio.c pbi_mio.h @WANT_PBI_BB_TRUE@am__append_40 = pbi_bb.c pbi_bb.h @WANT_PBI_MIO_OR_BB_TRUE@am__append_41 = pbi_scsi.c pbi_scsi.h @WANT_PBI_XLD_TRUE@@WITH_SOUND_TRUE@am__append_42 = pbi_xld.c pbi_xld.h @WANT_VOICEBOX_TRUE@@WITH_SOUND_TRUE@am__append_43 = voicebox.c voicebox.h @WANT_PBI_XLD_OR_VOICEBOX_TRUE@@WITH_SOUND_TRUE@am__append_44 = votrax.c votrax.h votraxsnd.c votraxsnd.h @WANT_IDE_TRUE@am__append_45 = ide.c ide.h ide_internal.h @WITH_OPENGL_TRUE@am__append_46 = sdl/video_gl.c sdl/video_gl.h @WANT_FALCON_CPUASM_TRUE@am__append_47 = falcon/cpu_m68k.asm @WANT_XEP80_EMULATION_TRUE@am__append_48 = xep80.c xep80.h xep80_fonts.c xep80_fonts.h @WANT_NTSC_FILTER_TRUE@am__append_49 = \ @WANT_NTSC_FILTER_TRUE@ filter_ntsc.c filter_ntsc.h \ @WANT_NTSC_FILTER_TRUE@ atari_ntsc/atari_ntsc.c atari_ntsc/atari_ntsc.h \ @WANT_NTSC_FILTER_TRUE@ atari_ntsc/atari_ntsc_config.h atari_ntsc/atari_ntsc_impl.h @WANT_PAL_BLENDING_TRUE@am__append_50 = pal_blending.c pal_blending.h @WANT_R_IO_DEVICE_TRUE@am__append_51 = rdevice.c rdevice.h subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/sdl.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__include_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(docdir)" "$(DESTDIR)$(includedir)" LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libatari800_a_AR = $(AR) $(ARFLAGS) libatari800_a_LIBADD = am__libatari800_a_SOURCES_DIST = libatari800/libatari800.h \ libatari800/api.c libatari800/cpu_crash.h libatari800/main.c \ libatari800/main.h libatari800/init.c libatari800/init.h \ libatari800/exit.c libatari800/input.c libatari800/input.h \ libatari800/video.c libatari800/video.h libatari800/statesav.c \ libatari800/statesav.h libatari800/sound.c libatari800/sound.h \ platform.h pcjoy.h akey.h afile.c afile.h antic.c antic.h \ atari.c atari.h binload.c binload.h cartridge.c cartridge.h \ cartridge_info.c cartridge_info.h cassette.c cassette.h \ compfile.c compfile.h cfg.c cfg.h cpu.c cpu.h crc32.c crc32.h \ devices.c devices.h esc.c esc.h gtia.c gtia.h img_tape.c \ img_tape.h log.c log.h memory.c memory.h monitor.c monitor.h \ pbi.c pbi.h pia.c pia.h pokey.c pokey.h roms/altirra_5200_os.c \ roms/altirra_5200_os.h rtime.c rtime.h sio.c sio.h sysrom.c \ sysrom.h util.c util.h sdl/init.c sdl/init.h \ sdl/SDL_win32_main.c pokeysnd.c pokeysnd.h mzpokeysnd.c \ mzpokeysnd.h remez.c remez.h sound.c sound.h sdl/sound.c \ falcon/sound.c javanvm/sound.c dos/sound_dos.c dos/dos_sb.c \ dos/dos_sb.h sound_oss.c win32/sound.c pokeyrec.c pokeyrec.h \ file_export.c file_export.h codecs/container.c \ codecs/container.h codecs/container_wav.c \ codecs/container_wav.h codecs/audio.c codecs/audio.h \ codecs/audio_pcm.c codecs/audio_pcm.h codecs/audio_adpcm.c \ codecs/audio_adpcm.h codecs/audio_mulaw.c codecs/audio_mulaw.h \ codecs/audio_mp3.c codecs/audio_mp3.h codecs/container_mp3.c \ codecs/container_mp3.h codecs/container_avi.c \ codecs/container_avi.h codecs/video.c codecs/video.h \ codecs/video_mrle.c codecs/video_mrle.h codecs/video_mpng.c \ codecs/video_mpng.h codecs/video_zmbv.c codecs/video_zmbv.h \ falcon/main.c falcon/c2p_uni.asm falcon/c2p_unid.asm \ falcon/videl.asm falcon/ikbd.asm falcon/res.h falcon/xcb.h \ falcon/jclkcook.h atari_ps2.c atari_rpi.c gles2/video.c \ sdl/main.c sdl/input.c sdl/input.h atari_x11.c javanvm/main.c \ javanvm/javanvm.h javanvm/video.c javanvm/video.h \ javanvm/input.c javanvm/input.h videomode.c videomode.h \ sdl/video.c sdl/video.h sdl/video_sw.c sdl/video_sw.h \ sdl/palette.c sdl/palette.h pbi_proto80.c pbi_proto80.h af80.c \ af80.h bit3.c bit3.h dos/atari_vga.c dos/vga_gfx.c \ dos/vga_gfx.h dos/vga_asm.s dos/dos_ints.h atari_curses.c \ atari_basic.c input.c input.h statesav.c statesav.h ui_basic.c \ ui_basic.h ui.c ui.h artifact.c artifact.h colours.c colours.h \ colours_ntsc.c colours_ntsc.h colours_pal.c colours_pal.h \ colours_external.c colours_external.h screen.c screen.h \ codecs/image.c codecs/image.h codecs/image_pcx.c \ codecs/image_pcx.h codecs/image_png.c codecs/image_png.h \ cycle_map.c cycle_map.h roms/altirraos_800.c \ roms/altirraos_800.h roms/altirraos_xl.c roms/altirraos_xl.h \ roms/altirra_basic.c roms/altirra_basic.h pbi_mio.c pbi_mio.h \ pbi_bb.c pbi_bb.h pbi_scsi.c pbi_scsi.h pbi_xld.c pbi_xld.h \ voicebox.c voicebox.h votrax.c votrax.h votraxsnd.c \ votraxsnd.h ide.c ide.h ide_internal.h sdl/video_gl.c \ sdl/video_gl.h falcon/cpu_m68k.asm xep80.c xep80.h \ xep80_fonts.c xep80_fonts.h filter_ntsc.c filter_ntsc.h \ atari_ntsc/atari_ntsc.c atari_ntsc/atari_ntsc.h \ atari_ntsc/atari_ntsc_config.h atari_ntsc/atari_ntsc_impl.h \ pal_blending.c pal_blending.h rdevice.c rdevice.h am__dirstamp = $(am__leading_dot)dirstamp @A8_USE_SDL_TRUE@am__objects_1 = sdl/init.$(OBJEXT) @A8_USE_SDL_TRUE@@CONFIGURE_HOST_WIN_TRUE@am__objects_2 = sdl/SDL_win32_main.$(OBJEXT) @WITH_SOUND_TRUE@am__objects_3 = pokeysnd.$(OBJEXT) \ @WITH_SOUND_TRUE@ mzpokeysnd.$(OBJEXT) remez.$(OBJEXT) @WITH_SOUND_SDL_TRUE@am__objects_4 = sound.$(OBJEXT) \ @WITH_SOUND_SDL_TRUE@ sdl/sound.$(OBJEXT) @WITH_SOUND_FALCON_TRUE@am__objects_5 = sound.$(OBJEXT) \ @WITH_SOUND_FALCON_TRUE@ falcon/sound.$(OBJEXT) @WITH_SOUND_JAVANVM_TRUE@am__objects_6 = sound.$(OBJEXT) \ @WITH_SOUND_JAVANVM_TRUE@ javanvm/sound.$(OBJEXT) @WITH_SOUND_DOSSB_TRUE@am__objects_7 = sound.$(OBJEXT) \ @WITH_SOUND_DOSSB_TRUE@ dos/sound_dos.$(OBJEXT) \ @WITH_SOUND_DOSSB_TRUE@ dos/dos_sb.$(OBJEXT) @WITH_SOUND_OSS_TRUE@am__objects_8 = sound.$(OBJEXT) \ @WITH_SOUND_OSS_TRUE@ sound_oss.$(OBJEXT) @WITH_SOUND_WIN_TRUE@am__objects_9 = win32/sound.$(OBJEXT) @WITH_SOUND_LIBATARI800_TRUE@am__objects_10 = sound.$(OBJEXT) \ @WITH_SOUND_LIBATARI800_TRUE@ libatari800/sound.$(OBJEXT) @WANT_POKEYREC_TRUE@am__objects_11 = pokeyrec.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@am__objects_12 = file_export.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@am__objects_13 = codecs/container.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@am__objects_14 = codecs/container_wav.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio_pcm.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio_adpcm.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/audio_mulaw.$(OBJEXT) @WITH_AUDIO_CODEC_MP3_TRUE@@WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@am__objects_15 = codecs/audio_mp3.$(OBJEXT) \ @WITH_AUDIO_CODEC_MP3_TRUE@@WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/container_mp3.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__objects_16 = codecs/container_avi.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@ codecs/video.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@ codecs/video_mrle.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_CODEC_PNG_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__objects_17 = codecs/video_mpng.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_CODEC_ZMBV_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__objects_18 = codecs/video_zmbv.$(OBJEXT) @CONFIGURE_TARGET_FALCON_TRUE@am__objects_19 = falcon/main.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/c2p_uni.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/c2p_unid.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/videl.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/ikbd.$(OBJEXT) @CONFIGURE_TARGET_PS2_TRUE@am__objects_20 = atari_ps2.$(OBJEXT) @CONFIGURE_TARGET_RPI_TRUE@am__objects_21 = atari_rpi.$(OBJEXT) \ @CONFIGURE_TARGET_RPI_TRUE@ gles2/video.$(OBJEXT) \ @CONFIGURE_TARGET_RPI_TRUE@ sdl/main.$(OBJEXT) \ @CONFIGURE_TARGET_RPI_TRUE@ sdl/input.$(OBJEXT) @CONFIGURE_TARGET_X11_TRUE@am__objects_22 = atari_x11.$(OBJEXT) @WITH_VIDEO_JAVANVM_TRUE@am__objects_23 = javanvm/main.$(OBJEXT) \ @WITH_VIDEO_JAVANVM_TRUE@ javanvm/video.$(OBJEXT) \ @WITH_VIDEO_JAVANVM_TRUE@ javanvm/input.$(OBJEXT) @WITH_VIDEO_SDL_TRUE@am__objects_24 = videomode.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/main.$(OBJEXT) sdl/video.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/video_sw.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/input.$(OBJEXT) sdl/palette.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ pbi_proto80.$(OBJEXT) af80.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ bit3.$(OBJEXT) @WITH_VIDEO_DOSVGA_TRUE@am__objects_25 = dos/atari_vga.$(OBJEXT) \ @WITH_VIDEO_DOSVGA_TRUE@ dos/vga_gfx.$(OBJEXT) \ @WITH_VIDEO_DOSVGA_TRUE@ dos/vga_asm.$(OBJEXT) @WITH_VIDEO_CURSES_TRUE@am__objects_26 = atari_curses.$(OBJEXT) @WITH_VIDEO_NO_TRUE@am__objects_27 = atari_basic.$(OBJEXT) @WITH_VIDEO_NO_FALSE@am__objects_28 = input.$(OBJEXT) \ @WITH_VIDEO_NO_FALSE@ statesav.$(OBJEXT) @WITH_VIDEO_LIBATARI800_FALSE@@WITH_VIDEO_NO_FALSE@am__objects_29 = ui_basic.$(OBJEXT) \ @WITH_VIDEO_LIBATARI800_FALSE@@WITH_VIDEO_NO_FALSE@ ui.$(OBJEXT) @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@am__objects_30 = artifact.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours_ntsc.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours_pal.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ colours_external.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ screen.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ codecs/image.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ codecs/image_pcx.$(OBJEXT) @WANT_CURSES_BASIC_FALSE@@WITH_LIBPNG_TRUE@@WITH_VIDEO_NO_FALSE@am__objects_31 = codecs/image_png.$(OBJEXT) @WANT_CURSES_BASIC_FALSE@@WANT_NEW_CYCLE_EXACT_TRUE@@WITH_VIDEO_NO_FALSE@am__objects_32 = cycle_map.$(OBJEXT) @WANT_EMUOS_ALTIRRA_TRUE@am__objects_33 = \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/altirraos_800.$(OBJEXT) \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/altirraos_xl.$(OBJEXT) \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/altirra_basic.$(OBJEXT) @WANT_PBI_MIO_TRUE@am__objects_34 = pbi_mio.$(OBJEXT) @WANT_PBI_BB_TRUE@am__objects_35 = pbi_bb.$(OBJEXT) @WANT_PBI_MIO_OR_BB_TRUE@am__objects_36 = pbi_scsi.$(OBJEXT) @WANT_PBI_XLD_TRUE@@WITH_SOUND_TRUE@am__objects_37 = \ @WANT_PBI_XLD_TRUE@@WITH_SOUND_TRUE@ pbi_xld.$(OBJEXT) @WANT_VOICEBOX_TRUE@@WITH_SOUND_TRUE@am__objects_38 = \ @WANT_VOICEBOX_TRUE@@WITH_SOUND_TRUE@ voicebox.$(OBJEXT) @WANT_PBI_XLD_OR_VOICEBOX_TRUE@@WITH_SOUND_TRUE@am__objects_39 = votrax.$(OBJEXT) \ @WANT_PBI_XLD_OR_VOICEBOX_TRUE@@WITH_SOUND_TRUE@ votraxsnd.$(OBJEXT) @WANT_IDE_TRUE@am__objects_40 = ide.$(OBJEXT) @WITH_OPENGL_TRUE@am__objects_41 = sdl/video_gl.$(OBJEXT) @WANT_FALCON_CPUASM_TRUE@am__objects_42 = falcon/cpu_m68k.$(OBJEXT) @WANT_XEP80_EMULATION_TRUE@am__objects_43 = xep80.$(OBJEXT) \ @WANT_XEP80_EMULATION_TRUE@ xep80_fonts.$(OBJEXT) @WANT_NTSC_FILTER_TRUE@am__objects_44 = filter_ntsc.$(OBJEXT) \ @WANT_NTSC_FILTER_TRUE@ atari_ntsc/atari_ntsc.$(OBJEXT) @WANT_PAL_BLENDING_TRUE@am__objects_45 = pal_blending.$(OBJEXT) @WANT_R_IO_DEVICE_TRUE@am__objects_46 = rdevice.$(OBJEXT) am__objects_47 = afile.$(OBJEXT) antic.$(OBJEXT) atari.$(OBJEXT) \ binload.$(OBJEXT) cartridge.$(OBJEXT) cartridge_info.$(OBJEXT) \ cassette.$(OBJEXT) compfile.$(OBJEXT) cfg.$(OBJEXT) \ cpu.$(OBJEXT) crc32.$(OBJEXT) devices.$(OBJEXT) esc.$(OBJEXT) \ gtia.$(OBJEXT) img_tape.$(OBJEXT) log.$(OBJEXT) \ memory.$(OBJEXT) monitor.$(OBJEXT) pbi.$(OBJEXT) pia.$(OBJEXT) \ pokey.$(OBJEXT) roms/altirra_5200_os.$(OBJEXT) rtime.$(OBJEXT) \ sio.$(OBJEXT) sysrom.$(OBJEXT) util.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) $(am__objects_7) \ $(am__objects_8) $(am__objects_9) $(am__objects_10) \ $(am__objects_11) $(am__objects_12) $(am__objects_13) \ $(am__objects_14) $(am__objects_15) $(am__objects_16) \ $(am__objects_17) $(am__objects_18) $(am__objects_19) \ $(am__objects_20) $(am__objects_21) $(am__objects_22) \ $(am__objects_23) $(am__objects_24) $(am__objects_25) \ $(am__objects_26) $(am__objects_27) $(am__objects_28) \ $(am__objects_29) $(am__objects_30) $(am__objects_31) \ $(am__objects_32) $(am__objects_33) $(am__objects_34) \ $(am__objects_35) $(am__objects_36) $(am__objects_37) \ $(am__objects_38) $(am__objects_39) $(am__objects_40) \ $(am__objects_41) $(am__objects_42) $(am__objects_43) \ $(am__objects_44) $(am__objects_45) $(am__objects_46) @CONFIGURE_TARGET_LIBATARI800_TRUE@am_libatari800_a_OBJECTS = \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/api.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/main.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/init.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/exit.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/input.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/video.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/statesav.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/sound.$(OBJEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ $(am__objects_47) libatari800_a_OBJECTS = $(am_libatari800_a_OBJECTS) libwin32_a_AR = $(AR) $(ARFLAGS) libwin32_a_LIBADD = am__libwin32_a_SOURCES_DIST = win32/atari_win32.c win32/atari_win32.h \ win32/screen_win32.c win32/screen_win32.h \ win32/render_direct3d.c win32/render_direct3d.h \ win32/render_directdraw.c win32/render_directdraw.h \ win32/render_gdi.c win32/render_gdi.h win32/render_gdiplus.c \ win32/render_gdiplus.h win32/main.c win32/main.h \ win32/main_menu.h win32/keyboard.c win32/keyboard.h \ win32/joystick.c win32/joystick.h @CONFIGURE_TARGET_WINDX_TRUE@am_libwin32_a_OBJECTS = win32/libwin32_a-atari_win32.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-screen_win32.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-render_direct3d.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-render_directdraw.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-render_gdi.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-render_gdiplus.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-main.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-keyboard.$(OBJEXT) \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/libwin32_a-joystick.$(OBJEXT) libwin32_a_OBJECTS = $(am_libwin32_a_OBJECTS) @CONFIGURE_HOST_JAVANVM_FALSE@@CONFIGURE_TARGET_ANDROID_FALSE@@CONFIGURE_TARGET_LIBATARI800_FALSE@am__EXEEXT_1 = atari800$(EXEEXT) @CONFIGURE_TARGET_LIBATARI800_TRUE@am__EXEEXT_2 = \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800_test$(EXEEXT) \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ guess_settings$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am__atari800_SOURCES_DIST = platform.h pcjoy.h akey.h afile.c afile.h \ antic.c antic.h atari.c atari.h binload.c binload.h \ cartridge.c cartridge.h cartridge_info.c cartridge_info.h \ cassette.c cassette.h compfile.c compfile.h cfg.c cfg.h cpu.c \ cpu.h crc32.c crc32.h devices.c devices.h esc.c esc.h gtia.c \ gtia.h img_tape.c img_tape.h log.c log.h memory.c memory.h \ monitor.c monitor.h pbi.c pbi.h pia.c pia.h pokey.c pokey.h \ roms/altirra_5200_os.c roms/altirra_5200_os.h rtime.c rtime.h \ sio.c sio.h sysrom.c sysrom.h util.c util.h sdl/init.c \ sdl/init.h sdl/SDL_win32_main.c pokeysnd.c pokeysnd.h \ mzpokeysnd.c mzpokeysnd.h remez.c remez.h sound.c sound.h \ sdl/sound.c falcon/sound.c javanvm/sound.c dos/sound_dos.c \ dos/dos_sb.c dos/dos_sb.h sound_oss.c win32/sound.c \ libatari800/sound.c libatari800/sound.h pokeyrec.c pokeyrec.h \ file_export.c file_export.h codecs/container.c \ codecs/container.h codecs/container_wav.c \ codecs/container_wav.h codecs/audio.c codecs/audio.h \ codecs/audio_pcm.c codecs/audio_pcm.h codecs/audio_adpcm.c \ codecs/audio_adpcm.h codecs/audio_mulaw.c codecs/audio_mulaw.h \ codecs/audio_mp3.c codecs/audio_mp3.h codecs/container_mp3.c \ codecs/container_mp3.h codecs/container_avi.c \ codecs/container_avi.h codecs/video.c codecs/video.h \ codecs/video_mrle.c codecs/video_mrle.h codecs/video_mpng.c \ codecs/video_mpng.h codecs/video_zmbv.c codecs/video_zmbv.h \ falcon/main.c falcon/c2p_uni.asm falcon/c2p_unid.asm \ falcon/videl.asm falcon/ikbd.asm falcon/res.h falcon/xcb.h \ falcon/jclkcook.h atari_ps2.c atari_rpi.c gles2/video.c \ sdl/main.c sdl/input.c sdl/input.h atari_x11.c javanvm/main.c \ javanvm/javanvm.h javanvm/video.c javanvm/video.h \ javanvm/input.c javanvm/input.h videomode.c videomode.h \ sdl/video.c sdl/video.h sdl/video_sw.c sdl/video_sw.h \ sdl/palette.c sdl/palette.h pbi_proto80.c pbi_proto80.h af80.c \ af80.h bit3.c bit3.h dos/atari_vga.c dos/vga_gfx.c \ dos/vga_gfx.h dos/vga_asm.s dos/dos_ints.h atari_curses.c \ atari_basic.c input.c input.h statesav.c statesav.h ui_basic.c \ ui_basic.h ui.c ui.h artifact.c artifact.h colours.c colours.h \ colours_ntsc.c colours_ntsc.h colours_pal.c colours_pal.h \ colours_external.c colours_external.h screen.c screen.h \ codecs/image.c codecs/image.h codecs/image_pcx.c \ codecs/image_pcx.h codecs/image_png.c codecs/image_png.h \ cycle_map.c cycle_map.h roms/altirraos_800.c \ roms/altirraos_800.h roms/altirraos_xl.c roms/altirraos_xl.h \ roms/altirra_basic.c roms/altirra_basic.h pbi_mio.c pbi_mio.h \ pbi_bb.c pbi_bb.h pbi_scsi.c pbi_scsi.h pbi_xld.c pbi_xld.h \ voicebox.c voicebox.h votrax.c votrax.h votraxsnd.c \ votraxsnd.h ide.c ide.h ide_internal.h sdl/video_gl.c \ sdl/video_gl.h falcon/cpu_m68k.asm xep80.c xep80.h \ xep80_fonts.c xep80_fonts.h filter_ntsc.c filter_ntsc.h \ atari_ntsc/atari_ntsc.c atari_ntsc/atari_ntsc.h \ atari_ntsc/atari_ntsc_config.h atari_ntsc/atari_ntsc_impl.h \ pal_blending.c pal_blending.h rdevice.c rdevice.h @A8_USE_SDL_TRUE@am__objects_48 = sdl/atari800-init.$(OBJEXT) @A8_USE_SDL_TRUE@@CONFIGURE_HOST_WIN_TRUE@am__objects_49 = sdl/atari800-SDL_win32_main.$(OBJEXT) @WITH_SOUND_TRUE@am__objects_50 = atari800-pokeysnd.$(OBJEXT) \ @WITH_SOUND_TRUE@ atari800-mzpokeysnd.$(OBJEXT) \ @WITH_SOUND_TRUE@ atari800-remez.$(OBJEXT) @WITH_SOUND_SDL_TRUE@am__objects_51 = atari800-sound.$(OBJEXT) \ @WITH_SOUND_SDL_TRUE@ sdl/atari800-sound.$(OBJEXT) @WITH_SOUND_FALCON_TRUE@am__objects_52 = atari800-sound.$(OBJEXT) \ @WITH_SOUND_FALCON_TRUE@ falcon/atari800-sound.$(OBJEXT) @WITH_SOUND_JAVANVM_TRUE@am__objects_53 = atari800-sound.$(OBJEXT) \ @WITH_SOUND_JAVANVM_TRUE@ javanvm/atari800-sound.$(OBJEXT) @WITH_SOUND_DOSSB_TRUE@am__objects_54 = atari800-sound.$(OBJEXT) \ @WITH_SOUND_DOSSB_TRUE@ dos/atari800-sound_dos.$(OBJEXT) \ @WITH_SOUND_DOSSB_TRUE@ dos/atari800-dos_sb.$(OBJEXT) @WITH_SOUND_OSS_TRUE@am__objects_55 = atari800-sound.$(OBJEXT) \ @WITH_SOUND_OSS_TRUE@ atari800-sound_oss.$(OBJEXT) @WITH_SOUND_WIN_TRUE@am__objects_56 = win32/atari800-sound.$(OBJEXT) @WITH_SOUND_LIBATARI800_TRUE@am__objects_57 = \ @WITH_SOUND_LIBATARI800_TRUE@ atari800-sound.$(OBJEXT) \ @WITH_SOUND_LIBATARI800_TRUE@ libatari800/atari800-sound.$(OBJEXT) @WANT_POKEYREC_TRUE@am__objects_58 = atari800-pokeyrec.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@am__objects_59 = \ @WITH_FILE_EXPORT_TRUE@ atari800-file_export.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@am__objects_60 = codecs/atari800-container.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@am__objects_61 = codecs/atari800-container_wav.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/atari800-audio.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/atari800-audio_pcm.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/atari800-audio_adpcm.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/atari800-audio_mulaw.$(OBJEXT) @WITH_AUDIO_CODEC_MP3_TRUE@@WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@am__objects_62 = codecs/atari800-audio_mp3.$(OBJEXT) \ @WITH_AUDIO_CODEC_MP3_TRUE@@WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_SOUND_TRUE@ codecs/atari800-container_mp3.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__objects_63 = codecs/atari800-container_avi.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@ codecs/atari800-video.$(OBJEXT) \ @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_RECORDING_TRUE@ codecs/atari800-video_mrle.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_CODEC_PNG_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__objects_64 = codecs/atari800-video_mpng.$(OBJEXT) @WITH_FILE_EXPORT_TRUE@@WITH_MULTIMEDIA_TRUE@@WITH_VIDEO_CODEC_ZMBV_TRUE@@WITH_VIDEO_RECORDING_TRUE@am__objects_65 = codecs/atari800-video_zmbv.$(OBJEXT) @CONFIGURE_TARGET_FALCON_TRUE@am__objects_66 = \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/atari800-main.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/c2p_uni.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/c2p_unid.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/videl.$(OBJEXT) \ @CONFIGURE_TARGET_FALCON_TRUE@ falcon/ikbd.$(OBJEXT) @CONFIGURE_TARGET_PS2_TRUE@am__objects_67 = \ @CONFIGURE_TARGET_PS2_TRUE@ atari800-atari_ps2.$(OBJEXT) @CONFIGURE_TARGET_RPI_TRUE@am__objects_68 = \ @CONFIGURE_TARGET_RPI_TRUE@ atari800-atari_rpi.$(OBJEXT) \ @CONFIGURE_TARGET_RPI_TRUE@ gles2/atari800-video.$(OBJEXT) \ @CONFIGURE_TARGET_RPI_TRUE@ sdl/atari800-main.$(OBJEXT) \ @CONFIGURE_TARGET_RPI_TRUE@ sdl/atari800-input.$(OBJEXT) @CONFIGURE_TARGET_X11_TRUE@am__objects_69 = \ @CONFIGURE_TARGET_X11_TRUE@ atari800-atari_x11.$(OBJEXT) @WITH_VIDEO_JAVANVM_TRUE@am__objects_70 = \ @WITH_VIDEO_JAVANVM_TRUE@ javanvm/atari800-main.$(OBJEXT) \ @WITH_VIDEO_JAVANVM_TRUE@ javanvm/atari800-video.$(OBJEXT) \ @WITH_VIDEO_JAVANVM_TRUE@ javanvm/atari800-input.$(OBJEXT) @WITH_VIDEO_SDL_TRUE@am__objects_71 = atari800-videomode.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/atari800-main.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/atari800-video.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/atari800-video_sw.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/atari800-input.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ sdl/atari800-palette.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ atari800-pbi_proto80.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ atari800-af80.$(OBJEXT) \ @WITH_VIDEO_SDL_TRUE@ atari800-bit3.$(OBJEXT) @WITH_VIDEO_DOSVGA_TRUE@am__objects_72 = \ @WITH_VIDEO_DOSVGA_TRUE@ dos/atari800-atari_vga.$(OBJEXT) \ @WITH_VIDEO_DOSVGA_TRUE@ dos/atari800-vga_gfx.$(OBJEXT) \ @WITH_VIDEO_DOSVGA_TRUE@ dos/vga_asm.$(OBJEXT) @WITH_VIDEO_CURSES_TRUE@am__objects_73 = \ @WITH_VIDEO_CURSES_TRUE@ atari800-atari_curses.$(OBJEXT) @WITH_VIDEO_NO_TRUE@am__objects_74 = atari800-atari_basic.$(OBJEXT) @WITH_VIDEO_NO_FALSE@am__objects_75 = atari800-input.$(OBJEXT) \ @WITH_VIDEO_NO_FALSE@ atari800-statesav.$(OBJEXT) @WITH_VIDEO_LIBATARI800_FALSE@@WITH_VIDEO_NO_FALSE@am__objects_76 = atari800-ui_basic.$(OBJEXT) \ @WITH_VIDEO_LIBATARI800_FALSE@@WITH_VIDEO_NO_FALSE@ atari800-ui.$(OBJEXT) @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@am__objects_77 = atari800-artifact.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ atari800-colours.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ atari800-colours_ntsc.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ atari800-colours_pal.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ atari800-colours_external.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ atari800-screen.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ codecs/atari800-image.$(OBJEXT) \ @WANT_CURSES_BASIC_FALSE@@WITH_VIDEO_NO_FALSE@ codecs/atari800-image_pcx.$(OBJEXT) @WANT_CURSES_BASIC_FALSE@@WITH_LIBPNG_TRUE@@WITH_VIDEO_NO_FALSE@am__objects_78 = codecs/atari800-image_png.$(OBJEXT) @WANT_CURSES_BASIC_FALSE@@WANT_NEW_CYCLE_EXACT_TRUE@@WITH_VIDEO_NO_FALSE@am__objects_79 = atari800-cycle_map.$(OBJEXT) @WANT_EMUOS_ALTIRRA_TRUE@am__objects_80 = roms/atari800-altirraos_800.$(OBJEXT) \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/atari800-altirraos_xl.$(OBJEXT) \ @WANT_EMUOS_ALTIRRA_TRUE@ roms/atari800-altirra_basic.$(OBJEXT) @WANT_PBI_MIO_TRUE@am__objects_81 = atari800-pbi_mio.$(OBJEXT) @WANT_PBI_BB_TRUE@am__objects_82 = atari800-pbi_bb.$(OBJEXT) @WANT_PBI_MIO_OR_BB_TRUE@am__objects_83 = atari800-pbi_scsi.$(OBJEXT) @WANT_PBI_XLD_TRUE@@WITH_SOUND_TRUE@am__objects_84 = atari800-pbi_xld.$(OBJEXT) @WANT_VOICEBOX_TRUE@@WITH_SOUND_TRUE@am__objects_85 = atari800-voicebox.$(OBJEXT) @WANT_PBI_XLD_OR_VOICEBOX_TRUE@@WITH_SOUND_TRUE@am__objects_86 = atari800-votrax.$(OBJEXT) \ @WANT_PBI_XLD_OR_VOICEBOX_TRUE@@WITH_SOUND_TRUE@ atari800-votraxsnd.$(OBJEXT) @WANT_IDE_TRUE@am__objects_87 = atari800-ide.$(OBJEXT) @WITH_OPENGL_TRUE@am__objects_88 = sdl/atari800-video_gl.$(OBJEXT) @WANT_XEP80_EMULATION_TRUE@am__objects_89 = atari800-xep80.$(OBJEXT) \ @WANT_XEP80_EMULATION_TRUE@ atari800-xep80_fonts.$(OBJEXT) @WANT_NTSC_FILTER_TRUE@am__objects_90 = \ @WANT_NTSC_FILTER_TRUE@ atari800-filter_ntsc.$(OBJEXT) \ @WANT_NTSC_FILTER_TRUE@ atari_ntsc/atari800-atari_ntsc.$(OBJEXT) @WANT_PAL_BLENDING_TRUE@am__objects_91 = \ @WANT_PAL_BLENDING_TRUE@ atari800-pal_blending.$(OBJEXT) @WANT_R_IO_DEVICE_TRUE@am__objects_92 = atari800-rdevice.$(OBJEXT) am_atari800_OBJECTS = atari800-afile.$(OBJEXT) \ atari800-antic.$(OBJEXT) atari800-atari.$(OBJEXT) \ atari800-binload.$(OBJEXT) atari800-cartridge.$(OBJEXT) \ atari800-cartridge_info.$(OBJEXT) atari800-cassette.$(OBJEXT) \ atari800-compfile.$(OBJEXT) atari800-cfg.$(OBJEXT) \ atari800-cpu.$(OBJEXT) atari800-crc32.$(OBJEXT) \ atari800-devices.$(OBJEXT) atari800-esc.$(OBJEXT) \ atari800-gtia.$(OBJEXT) atari800-img_tape.$(OBJEXT) \ atari800-log.$(OBJEXT) atari800-memory.$(OBJEXT) \ atari800-monitor.$(OBJEXT) atari800-pbi.$(OBJEXT) \ atari800-pia.$(OBJEXT) atari800-pokey.$(OBJEXT) \ roms/atari800-altirra_5200_os.$(OBJEXT) \ atari800-rtime.$(OBJEXT) atari800-sio.$(OBJEXT) \ atari800-sysrom.$(OBJEXT) atari800-util.$(OBJEXT) \ $(am__objects_48) $(am__objects_49) $(am__objects_50) \ $(am__objects_51) $(am__objects_52) $(am__objects_53) \ $(am__objects_54) $(am__objects_55) $(am__objects_56) \ $(am__objects_57) $(am__objects_58) $(am__objects_59) \ $(am__objects_60) $(am__objects_61) $(am__objects_62) \ $(am__objects_63) $(am__objects_64) $(am__objects_65) \ $(am__objects_66) $(am__objects_67) $(am__objects_68) \ $(am__objects_69) $(am__objects_70) $(am__objects_71) \ $(am__objects_72) $(am__objects_73) $(am__objects_74) \ $(am__objects_75) $(am__objects_76) $(am__objects_77) \ $(am__objects_78) $(am__objects_79) $(am__objects_80) \ $(am__objects_81) $(am__objects_82) $(am__objects_83) \ $(am__objects_84) $(am__objects_85) $(am__objects_86) \ $(am__objects_87) $(am__objects_88) $(am__objects_42) \ $(am__objects_89) $(am__objects_90) $(am__objects_91) \ $(am__objects_92) atari800_OBJECTS = $(am_atari800_OBJECTS) atari800_DEPENDENCIES = $(am__append_24) $(am__append_26) am__guess_settings_SOURCES_DIST = libatari800/guess_settings.c @CONFIGURE_TARGET_LIBATARI800_TRUE@am_guess_settings_OBJECTS = libatari800/guess_settings-guess_settings.$(OBJEXT) guess_settings_OBJECTS = $(am_guess_settings_OBJECTS) @CONFIGURE_TARGET_LIBATARI800_TRUE@guess_settings_DEPENDENCIES = \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800.a guess_settings_LINK = $(CCLD) $(guess_settings_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__libatari800_test_SOURCES_DIST = libatari800/libatari800_test.c @CONFIGURE_TARGET_LIBATARI800_TRUE@am_libatari800_test_OBJECTS = libatari800/libatari800_test-libatari800_test.$(OBJEXT) libatari800_test_OBJECTS = $(am_libatari800_test_OBJECTS) @CONFIGURE_TARGET_LIBATARI800_TRUE@libatari800_test_DEPENDENCIES = \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800.a libatari800_test_LINK = $(CCLD) $(libatari800_test_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) AM_V_CCAS = $(am__v_CCAS_@AM_V@) am__v_CCAS_ = $(am__v_CCAS_@AM_DEFAULT_V@) am__v_CCAS_0 = @echo " CCAS " $@; am__v_CCAS_1 = SOURCES = $(libatari800_a_SOURCES) $(libwin32_a_SOURCES) \ $(atari800_SOURCES) $(guess_settings_SOURCES) \ $(libatari800_test_SOURCES) DIST_SOURCES = $(am__libatari800_a_SOURCES_DIST) \ $(am__libwin32_a_SOURCES_DIST) $(am__atari800_SOURCES_DIST) \ $(am__guess_settings_SOURCES_DIST) \ $(am__libatari800_test_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(doc_DATA) am__include_HEADERS_DIST = libatari800/libatari800.h HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/depcomp install-sh DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCAS = @CCAS@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAGS_NOANSI = @CFLAGS_NOANSI@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAVACFLAGS = @JAVACFLAGS@ JAVAFLAGS = @JAVAFLAGS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NDK_BUILD = @NDK_BUILD@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WINDRES = @WINDRES@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_WINDRES = @ac_ct_WINDRES@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = subdir-objects @CONFIGURE_TARGET_LIBATARI800_FALSE@TARGET_BASE_NAME = atari800 @CONFIGURE_TARGET_LIBATARI800_TRUE@TARGET_BASE_NAME = libatari800.a TARGET = $(TARGET_BASE_NAME) man1dir = $(mandir)/man1 SUFFIXES = .c .cpp .s .o .h .asm doc_DATA = atari800_CPPFLAGS = $(am__append_5) @CONFIGURE_TARGET_LIBATARI800_TRUE@lib_LIBRARIES = libatari800.a @CONFIGURE_TARGET_LIBATARI800_TRUE@include_HEADERS = libatari800/libatari800.h @CONFIGURE_TARGET_LIBATARI800_TRUE@libatari800_a_SOURCES = \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/libatari800.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/api.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/cpu_crash.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/main.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/main.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/init.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/init.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/exit.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/input.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/input.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/video.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/video.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/statesav.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/statesav.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/sound.c \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ libatari800/sound.h \ @CONFIGURE_TARGET_LIBATARI800_TRUE@ $(atari800_SOURCES) @CONFIGURE_TARGET_LIBATARI800_TRUE@libatari800_test_SOURCES = libatari800/libatari800_test.c @CONFIGURE_TARGET_LIBATARI800_TRUE@libatari800_test_CFLAGS = -Ilibatari800 @CONFIGURE_TARGET_LIBATARI800_TRUE@libatari800_test_LDADD = libatari800.a @CONFIGURE_TARGET_LIBATARI800_TRUE@guess_settings_SOURCES = libatari800/guess_settings.c @CONFIGURE_TARGET_LIBATARI800_TRUE@guess_settings_CFLAGS = -Ilibatari800 @CONFIGURE_TARGET_LIBATARI800_TRUE@guess_settings_LDADD = libatari800.a @CONFIGURE_HOST_JAVANVM_TRUE@@CONFIGURE_TARGET_LIBATARI800_FALSE@JAVA = java @CONFIGURE_HOST_JAVANVM_TRUE@@CONFIGURE_TARGET_LIBATARI800_FALSE@JAVAC = javac atari800_SOURCES = platform.h pcjoy.h akey.h afile.c afile.h antic.c \ antic.h atari.c atari.h binload.c binload.h cartridge.c \ cartridge.h cartridge_info.c cartridge_info.h cassette.c \ cassette.h compfile.c compfile.h cfg.c cfg.h cpu.c cpu.h \ crc32.c crc32.h devices.c devices.h esc.c esc.h gtia.c gtia.h \ img_tape.c img_tape.h log.c log.h memory.c memory.h monitor.c \ monitor.h pbi.c pbi.h pia.c pia.h pokey.c pokey.h \ roms/altirra_5200_os.c roms/altirra_5200_os.h rtime.c rtime.h \ sio.c sio.h sysrom.c sysrom.h util.c util.h $(am__append_3) \ $(am__append_4) $(am__append_6) $(am__append_7) \ $(am__append_8) $(am__append_9) $(am__append_10) \ $(am__append_11) $(am__append_12) $(am__append_13) \ $(am__append_14) $(am__append_15) $(am__append_16) \ $(am__append_17) $(am__append_18) $(am__append_19) \ $(am__append_20) $(am__append_21) $(am__append_22) \ $(am__append_23) $(am__append_25) $(am__append_27) \ $(am__append_28) $(am__append_29) $(am__append_30) \ $(am__append_31) $(am__append_32) $(am__append_33) \ $(am__append_34) $(am__append_35) $(am__append_36) \ $(am__append_37) $(am__append_38) $(am__append_39) \ $(am__append_40) $(am__append_41) $(am__append_42) \ $(am__append_43) $(am__append_44) $(am__append_45) \ $(am__append_46) $(am__append_47) $(am__append_48) \ $(am__append_49) $(am__append_50) $(am__append_51) atari800_LDADD = $(am__append_24) $(am__append_26) @CONFIGURE_TARGET_WINDX_TRUE@noinst_LIBRARIES = libwin32.a @CONFIGURE_TARGET_WINDX_TRUE@libwin32_a_SOURCES = \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/atari_win32.c win32/atari_win32.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/screen_win32.c win32/screen_win32.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/render_direct3d.c win32/render_direct3d.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/render_directdraw.c win32/render_directdraw.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/render_gdi.c win32/render_gdi.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/render_gdiplus.c win32/render_gdiplus.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/main.c win32/main.h win32/main_menu.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/keyboard.c win32/keyboard.h \ @CONFIGURE_TARGET_WINDX_TRUE@ win32/joystick.c win32/joystick.h # A special rule for win32 to not compile with -ansi -pedantic @CONFIGURE_TARGET_WINDX_TRUE@libwin32_a_CFLAGS = $(CFLAGS_NOANSI) @CONFIGURE_HOST_JAVANVM_FALSE@RUNTIME = @CONFIGURE_HOST_JAVANVM_TRUE@RUNTIME = _runtime CLEANFILES = *.o *.a *.class .manifest $(TARGET) \ $(TARGET_BASE_NAME).jar $(TARGET_BASE_NAME)_runtime.java core \ *.bak *~ roms/*.o roms/*.bak roms/*~ dos/*.o dos/*.bak dos/*~ \ falcon/*.o falcon/*.bak falcon/*~ sdl/*.o sdl/*.bak sdl/*~ \ win32/*.o win32/*.ro win32/*.bak win32/*~ javanvm/*.o \ javanvm/*.bak javanvm/*~ atari_ntsc/*.o atari_ntsc/*.bak \ atari_ntsc/*~ android/libs android/obj android/bin android/gen \ libatari800/*.o libatari800/*.bak libatari800/*~ DISTCLEANFILES = Makefile configure config.log config.status config.h \ android/jni/Android.mk autom4te.cache EXTRA_DIST = $(doc_DATA) atari800.man joycfg.c mkimg.c win32/atari.rc \ win32/atari1.ico vtxsmpls.inc javanvm/UnixRuntime.patch \ javanvm/atari800.java macosx wince win32/msc amiga \ android/AndroidManifest.xml android/build.xml \ android/project.properties android/jni/Android.mk.in \ android/jni/Application.mk android/jni/keys.inc \ android/jni/androidinput.c android/jni/androidinput.h \ android/jni/graphics.c android/jni/graphics.h \ android/jni/jni.c android/jni/platform.c android/jni/sound.c \ android/res/ android/src/A800Renderer.java \ android/src/A800view.java android/src/AudioThread.java \ android/src/FileSelector.java \ android/src/KeymapPreference.java \ android/src/MainActivity.java android/src/Preferences.java \ android/src/SliderPreference.java $(empty) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .cpp .s .o .h .asm .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-libLIBRARIES: $(lib_LIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } @$(POST_INSTALL) @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ if test -f $$p; then \ $(am__strip_dir) \ echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \ ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \ else :; fi; \ done uninstall-libLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir) clean-libLIBRARIES: -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libatari800/$(am__dirstamp): @$(MKDIR_P) libatari800 @: > libatari800/$(am__dirstamp) libatari800/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) libatari800/$(DEPDIR) @: > libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/api.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/main.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/init.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/exit.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/input.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/video.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/statesav.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800/sound.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) roms/$(am__dirstamp): @$(MKDIR_P) roms @: > roms/$(am__dirstamp) roms/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) roms/$(DEPDIR) @: > roms/$(DEPDIR)/$(am__dirstamp) roms/altirra_5200_os.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) sdl/$(am__dirstamp): @$(MKDIR_P) sdl @: > sdl/$(am__dirstamp) sdl/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) sdl/$(DEPDIR) @: > sdl/$(DEPDIR)/$(am__dirstamp) sdl/init.$(OBJEXT): sdl/$(am__dirstamp) sdl/$(DEPDIR)/$(am__dirstamp) sdl/SDL_win32_main.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) sdl/sound.$(OBJEXT): sdl/$(am__dirstamp) sdl/$(DEPDIR)/$(am__dirstamp) falcon/$(am__dirstamp): @$(MKDIR_P) falcon @: > falcon/$(am__dirstamp) falcon/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) falcon/$(DEPDIR) @: > falcon/$(DEPDIR)/$(am__dirstamp) falcon/sound.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) javanvm/$(am__dirstamp): @$(MKDIR_P) javanvm @: > javanvm/$(am__dirstamp) javanvm/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) javanvm/$(DEPDIR) @: > javanvm/$(DEPDIR)/$(am__dirstamp) javanvm/sound.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) dos/$(am__dirstamp): @$(MKDIR_P) dos @: > dos/$(am__dirstamp) dos/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) dos/$(DEPDIR) @: > dos/$(DEPDIR)/$(am__dirstamp) dos/sound_dos.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) dos/dos_sb.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) win32/$(am__dirstamp): @$(MKDIR_P) win32 @: > win32/$(am__dirstamp) win32/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) win32/$(DEPDIR) @: > win32/$(DEPDIR)/$(am__dirstamp) win32/sound.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) codecs/$(am__dirstamp): @$(MKDIR_P) codecs @: > codecs/$(am__dirstamp) codecs/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) codecs/$(DEPDIR) @: > codecs/$(DEPDIR)/$(am__dirstamp) codecs/container.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/container_wav.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/audio.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/audio_pcm.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/audio_adpcm.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/audio_mulaw.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/audio_mp3.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/container_mp3.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/container_avi.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/video.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/video_mrle.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/video_mpng.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/video_zmbv.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) falcon/main.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) falcon/c2p_uni.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) falcon/c2p_unid.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) falcon/videl.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) falcon/ikbd.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) gles2/$(am__dirstamp): @$(MKDIR_P) gles2 @: > gles2/$(am__dirstamp) gles2/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) gles2/$(DEPDIR) @: > gles2/$(DEPDIR)/$(am__dirstamp) gles2/video.$(OBJEXT): gles2/$(am__dirstamp) \ gles2/$(DEPDIR)/$(am__dirstamp) sdl/main.$(OBJEXT): sdl/$(am__dirstamp) sdl/$(DEPDIR)/$(am__dirstamp) sdl/input.$(OBJEXT): sdl/$(am__dirstamp) sdl/$(DEPDIR)/$(am__dirstamp) javanvm/main.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) javanvm/video.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) javanvm/input.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) sdl/video.$(OBJEXT): sdl/$(am__dirstamp) sdl/$(DEPDIR)/$(am__dirstamp) sdl/video_sw.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) sdl/palette.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) dos/atari_vga.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) dos/vga_gfx.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) dos/vga_asm.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) codecs/image.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/image_pcx.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/image_png.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) roms/altirraos_800.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) roms/altirraos_xl.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) roms/altirra_basic.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) sdl/video_gl.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) falcon/cpu_m68k.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) atari_ntsc/$(am__dirstamp): @$(MKDIR_P) atari_ntsc @: > atari_ntsc/$(am__dirstamp) atari_ntsc/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) atari_ntsc/$(DEPDIR) @: > atari_ntsc/$(DEPDIR)/$(am__dirstamp) atari_ntsc/atari_ntsc.$(OBJEXT): atari_ntsc/$(am__dirstamp) \ atari_ntsc/$(DEPDIR)/$(am__dirstamp) libatari800.a: $(libatari800_a_OBJECTS) $(libatari800_a_DEPENDENCIES) $(EXTRA_libatari800_a_DEPENDENCIES) $(AM_V_at)-rm -f libatari800.a $(AM_V_AR)$(libatari800_a_AR) libatari800.a $(libatari800_a_OBJECTS) $(libatari800_a_LIBADD) $(AM_V_at)$(RANLIB) libatari800.a win32/libwin32_a-atari_win32.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-screen_win32.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-render_direct3d.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-render_directdraw.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-render_gdi.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-render_gdiplus.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-main.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-keyboard.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) win32/libwin32_a-joystick.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) libwin32.a: $(libwin32_a_OBJECTS) $(libwin32_a_DEPENDENCIES) $(EXTRA_libwin32_a_DEPENDENCIES) $(AM_V_at)-rm -f libwin32.a $(AM_V_AR)$(libwin32_a_AR) libwin32.a $(libwin32_a_OBJECTS) $(libwin32_a_LIBADD) $(AM_V_at)$(RANLIB) libwin32.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) roms/atari800-altirra_5200_os.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) sdl/atari800-init.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) sdl/atari800-SDL_win32_main.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) sdl/atari800-sound.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) falcon/atari800-sound.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) javanvm/atari800-sound.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) dos/atari800-sound_dos.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) dos/atari800-dos_sb.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) win32/atari800-sound.$(OBJEXT): win32/$(am__dirstamp) \ win32/$(DEPDIR)/$(am__dirstamp) libatari800/atari800-sound.$(OBJEXT): libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) codecs/atari800-container.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-container_wav.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-audio.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-audio_pcm.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-audio_adpcm.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-audio_mulaw.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-audio_mp3.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-container_mp3.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-container_avi.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-video.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-video_mrle.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-video_mpng.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-video_zmbv.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) falcon/atari800-main.$(OBJEXT): falcon/$(am__dirstamp) \ falcon/$(DEPDIR)/$(am__dirstamp) gles2/atari800-video.$(OBJEXT): gles2/$(am__dirstamp) \ gles2/$(DEPDIR)/$(am__dirstamp) sdl/atari800-main.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) sdl/atari800-input.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) javanvm/atari800-main.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) javanvm/atari800-video.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) javanvm/atari800-input.$(OBJEXT): javanvm/$(am__dirstamp) \ javanvm/$(DEPDIR)/$(am__dirstamp) sdl/atari800-video.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) sdl/atari800-video_sw.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) sdl/atari800-palette.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) dos/atari800-atari_vga.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) dos/atari800-vga_gfx.$(OBJEXT): dos/$(am__dirstamp) \ dos/$(DEPDIR)/$(am__dirstamp) codecs/atari800-image.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-image_pcx.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) codecs/atari800-image_png.$(OBJEXT): codecs/$(am__dirstamp) \ codecs/$(DEPDIR)/$(am__dirstamp) roms/atari800-altirraos_800.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) roms/atari800-altirraos_xl.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) roms/atari800-altirra_basic.$(OBJEXT): roms/$(am__dirstamp) \ roms/$(DEPDIR)/$(am__dirstamp) sdl/atari800-video_gl.$(OBJEXT): sdl/$(am__dirstamp) \ sdl/$(DEPDIR)/$(am__dirstamp) atari_ntsc/atari800-atari_ntsc.$(OBJEXT): atari_ntsc/$(am__dirstamp) \ atari_ntsc/$(DEPDIR)/$(am__dirstamp) atari800$(EXEEXT): $(atari800_OBJECTS) $(atari800_DEPENDENCIES) $(EXTRA_atari800_DEPENDENCIES) @rm -f atari800$(EXEEXT) $(AM_V_CCLD)$(LINK) $(atari800_OBJECTS) $(atari800_LDADD) $(LIBS) libatari800/guess_settings-guess_settings.$(OBJEXT): \ libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) guess_settings$(EXEEXT): $(guess_settings_OBJECTS) $(guess_settings_DEPENDENCIES) $(EXTRA_guess_settings_DEPENDENCIES) @rm -f guess_settings$(EXEEXT) $(AM_V_CCLD)$(guess_settings_LINK) $(guess_settings_OBJECTS) $(guess_settings_LDADD) $(LIBS) libatari800/libatari800_test-libatari800_test.$(OBJEXT): \ libatari800/$(am__dirstamp) \ libatari800/$(DEPDIR)/$(am__dirstamp) libatari800_test$(EXEEXT): $(libatari800_test_OBJECTS) $(libatari800_test_DEPENDENCIES) $(EXTRA_libatari800_test_DEPENDENCIES) @rm -f libatari800_test$(EXEEXT) $(AM_V_CCLD)$(libatari800_test_LINK) $(libatari800_test_OBJECTS) $(libatari800_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f atari_ntsc/*.$(OBJEXT) -rm -f codecs/*.$(OBJEXT) -rm -f dos/*.$(OBJEXT) -rm -f falcon/*.$(OBJEXT) -rm -f gles2/*.$(OBJEXT) -rm -f javanvm/*.$(OBJEXT) -rm -f libatari800/*.$(OBJEXT) -rm -f roms/*.$(OBJEXT) -rm -f sdl/*.$(OBJEXT) -rm -f win32/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/af80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/afile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/antic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/artifact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-af80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-afile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-antic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-artifact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-atari.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-atari_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-atari_curses.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-atari_ps2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-atari_rpi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-atari_x11.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-binload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-bit3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-cartridge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-cartridge_info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-cassette.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-cfg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-colours.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-colours_external.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-colours_ntsc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-colours_pal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-compfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-cpu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-crc32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-cycle_map.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-devices.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-esc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-file_export.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-filter_ntsc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-gtia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-ide.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-img_tape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-monitor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-mzpokeysnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pal_blending.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pbi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pbi_bb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pbi_mio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pbi_proto80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pbi_scsi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pbi_xld.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pokey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pokeyrec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-pokeysnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-rdevice.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-remez.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-rtime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-screen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-sio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-sound_oss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-statesav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-sysrom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-ui_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-videomode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-voicebox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-votrax.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-votraxsnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-xep80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari800-xep80_fonts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari_curses.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari_ps2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari_rpi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari_x11.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bit3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cartridge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cartridge_info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cassette.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colours.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colours_external.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colours_ntsc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colours_pal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cycle_map.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/devices.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/esc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_export.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filter_ntsc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ide.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/img_tape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mzpokeysnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pal_blending.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbi_bb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbi_mio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbi_proto80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbi_scsi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pbi_xld.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pokey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pokeyrec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pokeysnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdevice.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remez.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/screen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound_oss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statesav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sysrom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/videomode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/voicebox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/votrax.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/votraxsnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xep80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xep80_fonts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@atari_ntsc/$(DEPDIR)/atari800-atari_ntsc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@atari_ntsc/$(DEPDIR)/atari_ntsc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-audio_adpcm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-audio_mp3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-audio_mulaw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-audio_pcm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-container_avi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-container_mp3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-container_wav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-image_pcx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-image_png.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-video_mpng.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-video_mrle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/atari800-video_zmbv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/audio_adpcm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/audio_mp3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/audio_mulaw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/audio_pcm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/container_avi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/container_mp3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/container_wav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/image_pcx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/image_png.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/video_mpng.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/video_mrle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@codecs/$(DEPDIR)/video_zmbv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/atari800-atari_vga.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/atari800-dos_sb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/atari800-sound_dos.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/atari800-vga_gfx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/atari_vga.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/dos_sb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/sound_dos.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@dos/$(DEPDIR)/vga_gfx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@falcon/$(DEPDIR)/atari800-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@falcon/$(DEPDIR)/atari800-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@falcon/$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@falcon/$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gles2/$(DEPDIR)/atari800-video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gles2/$(DEPDIR)/video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/atari800-input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/atari800-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/atari800-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/atari800-video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@javanvm/$(DEPDIR)/video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/api.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/atari800-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/exit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/guess_settings-guess_settings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/libatari800_test-libatari800_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/statesav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libatari800/$(DEPDIR)/video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/altirra_5200_os.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/altirra_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/altirraos_800.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/altirraos_xl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/atari800-altirra_5200_os.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/atari800-altirra_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/atari800-altirraos_800.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@roms/$(DEPDIR)/atari800-altirraos_xl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/SDL_win32_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-SDL_win32_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-palette.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-video_gl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/atari800-video_sw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/palette.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/video_gl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@sdl/$(DEPDIR)/video_sw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/atari800-sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-atari_win32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-joystick.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-render_direct3d.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-render_directdraw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-render_gdi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-render_gdiplus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/libwin32_a-screen_win32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@win32/$(DEPDIR)/sound.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` win32/libwin32_a-atari_win32.o: win32/atari_win32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-atari_win32.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-atari_win32.Tpo -c -o win32/libwin32_a-atari_win32.o `test -f 'win32/atari_win32.c' || echo '$(srcdir)/'`win32/atari_win32.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-atari_win32.Tpo win32/$(DEPDIR)/libwin32_a-atari_win32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/atari_win32.c' object='win32/libwin32_a-atari_win32.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-atari_win32.o `test -f 'win32/atari_win32.c' || echo '$(srcdir)/'`win32/atari_win32.c win32/libwin32_a-atari_win32.obj: win32/atari_win32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-atari_win32.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-atari_win32.Tpo -c -o win32/libwin32_a-atari_win32.obj `if test -f 'win32/atari_win32.c'; then $(CYGPATH_W) 'win32/atari_win32.c'; else $(CYGPATH_W) '$(srcdir)/win32/atari_win32.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-atari_win32.Tpo win32/$(DEPDIR)/libwin32_a-atari_win32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/atari_win32.c' object='win32/libwin32_a-atari_win32.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-atari_win32.obj `if test -f 'win32/atari_win32.c'; then $(CYGPATH_W) 'win32/atari_win32.c'; else $(CYGPATH_W) '$(srcdir)/win32/atari_win32.c'; fi` win32/libwin32_a-screen_win32.o: win32/screen_win32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-screen_win32.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-screen_win32.Tpo -c -o win32/libwin32_a-screen_win32.o `test -f 'win32/screen_win32.c' || echo '$(srcdir)/'`win32/screen_win32.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-screen_win32.Tpo win32/$(DEPDIR)/libwin32_a-screen_win32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/screen_win32.c' object='win32/libwin32_a-screen_win32.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-screen_win32.o `test -f 'win32/screen_win32.c' || echo '$(srcdir)/'`win32/screen_win32.c win32/libwin32_a-screen_win32.obj: win32/screen_win32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-screen_win32.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-screen_win32.Tpo -c -o win32/libwin32_a-screen_win32.obj `if test -f 'win32/screen_win32.c'; then $(CYGPATH_W) 'win32/screen_win32.c'; else $(CYGPATH_W) '$(srcdir)/win32/screen_win32.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-screen_win32.Tpo win32/$(DEPDIR)/libwin32_a-screen_win32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/screen_win32.c' object='win32/libwin32_a-screen_win32.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-screen_win32.obj `if test -f 'win32/screen_win32.c'; then $(CYGPATH_W) 'win32/screen_win32.c'; else $(CYGPATH_W) '$(srcdir)/win32/screen_win32.c'; fi` win32/libwin32_a-render_direct3d.o: win32/render_direct3d.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_direct3d.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_direct3d.Tpo -c -o win32/libwin32_a-render_direct3d.o `test -f 'win32/render_direct3d.c' || echo '$(srcdir)/'`win32/render_direct3d.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_direct3d.Tpo win32/$(DEPDIR)/libwin32_a-render_direct3d.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_direct3d.c' object='win32/libwin32_a-render_direct3d.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_direct3d.o `test -f 'win32/render_direct3d.c' || echo '$(srcdir)/'`win32/render_direct3d.c win32/libwin32_a-render_direct3d.obj: win32/render_direct3d.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_direct3d.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_direct3d.Tpo -c -o win32/libwin32_a-render_direct3d.obj `if test -f 'win32/render_direct3d.c'; then $(CYGPATH_W) 'win32/render_direct3d.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_direct3d.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_direct3d.Tpo win32/$(DEPDIR)/libwin32_a-render_direct3d.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_direct3d.c' object='win32/libwin32_a-render_direct3d.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_direct3d.obj `if test -f 'win32/render_direct3d.c'; then $(CYGPATH_W) 'win32/render_direct3d.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_direct3d.c'; fi` win32/libwin32_a-render_directdraw.o: win32/render_directdraw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_directdraw.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_directdraw.Tpo -c -o win32/libwin32_a-render_directdraw.o `test -f 'win32/render_directdraw.c' || echo '$(srcdir)/'`win32/render_directdraw.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_directdraw.Tpo win32/$(DEPDIR)/libwin32_a-render_directdraw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_directdraw.c' object='win32/libwin32_a-render_directdraw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_directdraw.o `test -f 'win32/render_directdraw.c' || echo '$(srcdir)/'`win32/render_directdraw.c win32/libwin32_a-render_directdraw.obj: win32/render_directdraw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_directdraw.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_directdraw.Tpo -c -o win32/libwin32_a-render_directdraw.obj `if test -f 'win32/render_directdraw.c'; then $(CYGPATH_W) 'win32/render_directdraw.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_directdraw.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_directdraw.Tpo win32/$(DEPDIR)/libwin32_a-render_directdraw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_directdraw.c' object='win32/libwin32_a-render_directdraw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_directdraw.obj `if test -f 'win32/render_directdraw.c'; then $(CYGPATH_W) 'win32/render_directdraw.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_directdraw.c'; fi` win32/libwin32_a-render_gdi.o: win32/render_gdi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_gdi.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_gdi.Tpo -c -o win32/libwin32_a-render_gdi.o `test -f 'win32/render_gdi.c' || echo '$(srcdir)/'`win32/render_gdi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_gdi.Tpo win32/$(DEPDIR)/libwin32_a-render_gdi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_gdi.c' object='win32/libwin32_a-render_gdi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_gdi.o `test -f 'win32/render_gdi.c' || echo '$(srcdir)/'`win32/render_gdi.c win32/libwin32_a-render_gdi.obj: win32/render_gdi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_gdi.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_gdi.Tpo -c -o win32/libwin32_a-render_gdi.obj `if test -f 'win32/render_gdi.c'; then $(CYGPATH_W) 'win32/render_gdi.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_gdi.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_gdi.Tpo win32/$(DEPDIR)/libwin32_a-render_gdi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_gdi.c' object='win32/libwin32_a-render_gdi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_gdi.obj `if test -f 'win32/render_gdi.c'; then $(CYGPATH_W) 'win32/render_gdi.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_gdi.c'; fi` win32/libwin32_a-render_gdiplus.o: win32/render_gdiplus.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_gdiplus.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_gdiplus.Tpo -c -o win32/libwin32_a-render_gdiplus.o `test -f 'win32/render_gdiplus.c' || echo '$(srcdir)/'`win32/render_gdiplus.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_gdiplus.Tpo win32/$(DEPDIR)/libwin32_a-render_gdiplus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_gdiplus.c' object='win32/libwin32_a-render_gdiplus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_gdiplus.o `test -f 'win32/render_gdiplus.c' || echo '$(srcdir)/'`win32/render_gdiplus.c win32/libwin32_a-render_gdiplus.obj: win32/render_gdiplus.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-render_gdiplus.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-render_gdiplus.Tpo -c -o win32/libwin32_a-render_gdiplus.obj `if test -f 'win32/render_gdiplus.c'; then $(CYGPATH_W) 'win32/render_gdiplus.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_gdiplus.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-render_gdiplus.Tpo win32/$(DEPDIR)/libwin32_a-render_gdiplus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/render_gdiplus.c' object='win32/libwin32_a-render_gdiplus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-render_gdiplus.obj `if test -f 'win32/render_gdiplus.c'; then $(CYGPATH_W) 'win32/render_gdiplus.c'; else $(CYGPATH_W) '$(srcdir)/win32/render_gdiplus.c'; fi` win32/libwin32_a-main.o: win32/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-main.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-main.Tpo -c -o win32/libwin32_a-main.o `test -f 'win32/main.c' || echo '$(srcdir)/'`win32/main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-main.Tpo win32/$(DEPDIR)/libwin32_a-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/main.c' object='win32/libwin32_a-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-main.o `test -f 'win32/main.c' || echo '$(srcdir)/'`win32/main.c win32/libwin32_a-main.obj: win32/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-main.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-main.Tpo -c -o win32/libwin32_a-main.obj `if test -f 'win32/main.c'; then $(CYGPATH_W) 'win32/main.c'; else $(CYGPATH_W) '$(srcdir)/win32/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-main.Tpo win32/$(DEPDIR)/libwin32_a-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/main.c' object='win32/libwin32_a-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-main.obj `if test -f 'win32/main.c'; then $(CYGPATH_W) 'win32/main.c'; else $(CYGPATH_W) '$(srcdir)/win32/main.c'; fi` win32/libwin32_a-keyboard.o: win32/keyboard.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-keyboard.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-keyboard.Tpo -c -o win32/libwin32_a-keyboard.o `test -f 'win32/keyboard.c' || echo '$(srcdir)/'`win32/keyboard.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-keyboard.Tpo win32/$(DEPDIR)/libwin32_a-keyboard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/keyboard.c' object='win32/libwin32_a-keyboard.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-keyboard.o `test -f 'win32/keyboard.c' || echo '$(srcdir)/'`win32/keyboard.c win32/libwin32_a-keyboard.obj: win32/keyboard.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-keyboard.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-keyboard.Tpo -c -o win32/libwin32_a-keyboard.obj `if test -f 'win32/keyboard.c'; then $(CYGPATH_W) 'win32/keyboard.c'; else $(CYGPATH_W) '$(srcdir)/win32/keyboard.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-keyboard.Tpo win32/$(DEPDIR)/libwin32_a-keyboard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/keyboard.c' object='win32/libwin32_a-keyboard.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-keyboard.obj `if test -f 'win32/keyboard.c'; then $(CYGPATH_W) 'win32/keyboard.c'; else $(CYGPATH_W) '$(srcdir)/win32/keyboard.c'; fi` win32/libwin32_a-joystick.o: win32/joystick.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-joystick.o -MD -MP -MF win32/$(DEPDIR)/libwin32_a-joystick.Tpo -c -o win32/libwin32_a-joystick.o `test -f 'win32/joystick.c' || echo '$(srcdir)/'`win32/joystick.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-joystick.Tpo win32/$(DEPDIR)/libwin32_a-joystick.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/joystick.c' object='win32/libwin32_a-joystick.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-joystick.o `test -f 'win32/joystick.c' || echo '$(srcdir)/'`win32/joystick.c win32/libwin32_a-joystick.obj: win32/joystick.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -MT win32/libwin32_a-joystick.obj -MD -MP -MF win32/$(DEPDIR)/libwin32_a-joystick.Tpo -c -o win32/libwin32_a-joystick.obj `if test -f 'win32/joystick.c'; then $(CYGPATH_W) 'win32/joystick.c'; else $(CYGPATH_W) '$(srcdir)/win32/joystick.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/libwin32_a-joystick.Tpo win32/$(DEPDIR)/libwin32_a-joystick.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/joystick.c' object='win32/libwin32_a-joystick.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libwin32_a_CFLAGS) $(CFLAGS) -c -o win32/libwin32_a-joystick.obj `if test -f 'win32/joystick.c'; then $(CYGPATH_W) 'win32/joystick.c'; else $(CYGPATH_W) '$(srcdir)/win32/joystick.c'; fi` atari800-afile.o: afile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-afile.o -MD -MP -MF $(DEPDIR)/atari800-afile.Tpo -c -o atari800-afile.o `test -f 'afile.c' || echo '$(srcdir)/'`afile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-afile.Tpo $(DEPDIR)/atari800-afile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='afile.c' object='atari800-afile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-afile.o `test -f 'afile.c' || echo '$(srcdir)/'`afile.c atari800-afile.obj: afile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-afile.obj -MD -MP -MF $(DEPDIR)/atari800-afile.Tpo -c -o atari800-afile.obj `if test -f 'afile.c'; then $(CYGPATH_W) 'afile.c'; else $(CYGPATH_W) '$(srcdir)/afile.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-afile.Tpo $(DEPDIR)/atari800-afile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='afile.c' object='atari800-afile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-afile.obj `if test -f 'afile.c'; then $(CYGPATH_W) 'afile.c'; else $(CYGPATH_W) '$(srcdir)/afile.c'; fi` atari800-antic.o: antic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-antic.o -MD -MP -MF $(DEPDIR)/atari800-antic.Tpo -c -o atari800-antic.o `test -f 'antic.c' || echo '$(srcdir)/'`antic.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-antic.Tpo $(DEPDIR)/atari800-antic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='antic.c' object='atari800-antic.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-antic.o `test -f 'antic.c' || echo '$(srcdir)/'`antic.c atari800-antic.obj: antic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-antic.obj -MD -MP -MF $(DEPDIR)/atari800-antic.Tpo -c -o atari800-antic.obj `if test -f 'antic.c'; then $(CYGPATH_W) 'antic.c'; else $(CYGPATH_W) '$(srcdir)/antic.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-antic.Tpo $(DEPDIR)/atari800-antic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='antic.c' object='atari800-antic.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-antic.obj `if test -f 'antic.c'; then $(CYGPATH_W) 'antic.c'; else $(CYGPATH_W) '$(srcdir)/antic.c'; fi` atari800-atari.o: atari.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari.o -MD -MP -MF $(DEPDIR)/atari800-atari.Tpo -c -o atari800-atari.o `test -f 'atari.c' || echo '$(srcdir)/'`atari.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari.Tpo $(DEPDIR)/atari800-atari.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari.c' object='atari800-atari.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari.o `test -f 'atari.c' || echo '$(srcdir)/'`atari.c atari800-atari.obj: atari.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari.obj -MD -MP -MF $(DEPDIR)/atari800-atari.Tpo -c -o atari800-atari.obj `if test -f 'atari.c'; then $(CYGPATH_W) 'atari.c'; else $(CYGPATH_W) '$(srcdir)/atari.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari.Tpo $(DEPDIR)/atari800-atari.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari.c' object='atari800-atari.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari.obj `if test -f 'atari.c'; then $(CYGPATH_W) 'atari.c'; else $(CYGPATH_W) '$(srcdir)/atari.c'; fi` atari800-binload.o: binload.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-binload.o -MD -MP -MF $(DEPDIR)/atari800-binload.Tpo -c -o atari800-binload.o `test -f 'binload.c' || echo '$(srcdir)/'`binload.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-binload.Tpo $(DEPDIR)/atari800-binload.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='binload.c' object='atari800-binload.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-binload.o `test -f 'binload.c' || echo '$(srcdir)/'`binload.c atari800-binload.obj: binload.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-binload.obj -MD -MP -MF $(DEPDIR)/atari800-binload.Tpo -c -o atari800-binload.obj `if test -f 'binload.c'; then $(CYGPATH_W) 'binload.c'; else $(CYGPATH_W) '$(srcdir)/binload.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-binload.Tpo $(DEPDIR)/atari800-binload.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='binload.c' object='atari800-binload.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-binload.obj `if test -f 'binload.c'; then $(CYGPATH_W) 'binload.c'; else $(CYGPATH_W) '$(srcdir)/binload.c'; fi` atari800-cartridge.o: cartridge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cartridge.o -MD -MP -MF $(DEPDIR)/atari800-cartridge.Tpo -c -o atari800-cartridge.o `test -f 'cartridge.c' || echo '$(srcdir)/'`cartridge.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cartridge.Tpo $(DEPDIR)/atari800-cartridge.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cartridge.c' object='atari800-cartridge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cartridge.o `test -f 'cartridge.c' || echo '$(srcdir)/'`cartridge.c atari800-cartridge.obj: cartridge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cartridge.obj -MD -MP -MF $(DEPDIR)/atari800-cartridge.Tpo -c -o atari800-cartridge.obj `if test -f 'cartridge.c'; then $(CYGPATH_W) 'cartridge.c'; else $(CYGPATH_W) '$(srcdir)/cartridge.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cartridge.Tpo $(DEPDIR)/atari800-cartridge.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cartridge.c' object='atari800-cartridge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cartridge.obj `if test -f 'cartridge.c'; then $(CYGPATH_W) 'cartridge.c'; else $(CYGPATH_W) '$(srcdir)/cartridge.c'; fi` atari800-cartridge_info.o: cartridge_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cartridge_info.o -MD -MP -MF $(DEPDIR)/atari800-cartridge_info.Tpo -c -o atari800-cartridge_info.o `test -f 'cartridge_info.c' || echo '$(srcdir)/'`cartridge_info.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cartridge_info.Tpo $(DEPDIR)/atari800-cartridge_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cartridge_info.c' object='atari800-cartridge_info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cartridge_info.o `test -f 'cartridge_info.c' || echo '$(srcdir)/'`cartridge_info.c atari800-cartridge_info.obj: cartridge_info.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cartridge_info.obj -MD -MP -MF $(DEPDIR)/atari800-cartridge_info.Tpo -c -o atari800-cartridge_info.obj `if test -f 'cartridge_info.c'; then $(CYGPATH_W) 'cartridge_info.c'; else $(CYGPATH_W) '$(srcdir)/cartridge_info.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cartridge_info.Tpo $(DEPDIR)/atari800-cartridge_info.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cartridge_info.c' object='atari800-cartridge_info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cartridge_info.obj `if test -f 'cartridge_info.c'; then $(CYGPATH_W) 'cartridge_info.c'; else $(CYGPATH_W) '$(srcdir)/cartridge_info.c'; fi` atari800-cassette.o: cassette.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cassette.o -MD -MP -MF $(DEPDIR)/atari800-cassette.Tpo -c -o atari800-cassette.o `test -f 'cassette.c' || echo '$(srcdir)/'`cassette.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cassette.Tpo $(DEPDIR)/atari800-cassette.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cassette.c' object='atari800-cassette.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cassette.o `test -f 'cassette.c' || echo '$(srcdir)/'`cassette.c atari800-cassette.obj: cassette.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cassette.obj -MD -MP -MF $(DEPDIR)/atari800-cassette.Tpo -c -o atari800-cassette.obj `if test -f 'cassette.c'; then $(CYGPATH_W) 'cassette.c'; else $(CYGPATH_W) '$(srcdir)/cassette.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cassette.Tpo $(DEPDIR)/atari800-cassette.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cassette.c' object='atari800-cassette.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cassette.obj `if test -f 'cassette.c'; then $(CYGPATH_W) 'cassette.c'; else $(CYGPATH_W) '$(srcdir)/cassette.c'; fi` atari800-compfile.o: compfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-compfile.o -MD -MP -MF $(DEPDIR)/atari800-compfile.Tpo -c -o atari800-compfile.o `test -f 'compfile.c' || echo '$(srcdir)/'`compfile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-compfile.Tpo $(DEPDIR)/atari800-compfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='compfile.c' object='atari800-compfile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-compfile.o `test -f 'compfile.c' || echo '$(srcdir)/'`compfile.c atari800-compfile.obj: compfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-compfile.obj -MD -MP -MF $(DEPDIR)/atari800-compfile.Tpo -c -o atari800-compfile.obj `if test -f 'compfile.c'; then $(CYGPATH_W) 'compfile.c'; else $(CYGPATH_W) '$(srcdir)/compfile.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-compfile.Tpo $(DEPDIR)/atari800-compfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='compfile.c' object='atari800-compfile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-compfile.obj `if test -f 'compfile.c'; then $(CYGPATH_W) 'compfile.c'; else $(CYGPATH_W) '$(srcdir)/compfile.c'; fi` atari800-cfg.o: cfg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cfg.o -MD -MP -MF $(DEPDIR)/atari800-cfg.Tpo -c -o atari800-cfg.o `test -f 'cfg.c' || echo '$(srcdir)/'`cfg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cfg.Tpo $(DEPDIR)/atari800-cfg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cfg.c' object='atari800-cfg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cfg.o `test -f 'cfg.c' || echo '$(srcdir)/'`cfg.c atari800-cfg.obj: cfg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cfg.obj -MD -MP -MF $(DEPDIR)/atari800-cfg.Tpo -c -o atari800-cfg.obj `if test -f 'cfg.c'; then $(CYGPATH_W) 'cfg.c'; else $(CYGPATH_W) '$(srcdir)/cfg.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cfg.Tpo $(DEPDIR)/atari800-cfg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cfg.c' object='atari800-cfg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cfg.obj `if test -f 'cfg.c'; then $(CYGPATH_W) 'cfg.c'; else $(CYGPATH_W) '$(srcdir)/cfg.c'; fi` atari800-cpu.o: cpu.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cpu.o -MD -MP -MF $(DEPDIR)/atari800-cpu.Tpo -c -o atari800-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cpu.Tpo $(DEPDIR)/atari800-cpu.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cpu.c' object='atari800-cpu.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c atari800-cpu.obj: cpu.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cpu.obj -MD -MP -MF $(DEPDIR)/atari800-cpu.Tpo -c -o atari800-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cpu.Tpo $(DEPDIR)/atari800-cpu.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cpu.c' object='atari800-cpu.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi` atari800-crc32.o: crc32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-crc32.o -MD -MP -MF $(DEPDIR)/atari800-crc32.Tpo -c -o atari800-crc32.o `test -f 'crc32.c' || echo '$(srcdir)/'`crc32.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-crc32.Tpo $(DEPDIR)/atari800-crc32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crc32.c' object='atari800-crc32.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-crc32.o `test -f 'crc32.c' || echo '$(srcdir)/'`crc32.c atari800-crc32.obj: crc32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-crc32.obj -MD -MP -MF $(DEPDIR)/atari800-crc32.Tpo -c -o atari800-crc32.obj `if test -f 'crc32.c'; then $(CYGPATH_W) 'crc32.c'; else $(CYGPATH_W) '$(srcdir)/crc32.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-crc32.Tpo $(DEPDIR)/atari800-crc32.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crc32.c' object='atari800-crc32.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-crc32.obj `if test -f 'crc32.c'; then $(CYGPATH_W) 'crc32.c'; else $(CYGPATH_W) '$(srcdir)/crc32.c'; fi` atari800-devices.o: devices.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-devices.o -MD -MP -MF $(DEPDIR)/atari800-devices.Tpo -c -o atari800-devices.o `test -f 'devices.c' || echo '$(srcdir)/'`devices.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-devices.Tpo $(DEPDIR)/atari800-devices.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices.c' object='atari800-devices.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-devices.o `test -f 'devices.c' || echo '$(srcdir)/'`devices.c atari800-devices.obj: devices.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-devices.obj -MD -MP -MF $(DEPDIR)/atari800-devices.Tpo -c -o atari800-devices.obj `if test -f 'devices.c'; then $(CYGPATH_W) 'devices.c'; else $(CYGPATH_W) '$(srcdir)/devices.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-devices.Tpo $(DEPDIR)/atari800-devices.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='devices.c' object='atari800-devices.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-devices.obj `if test -f 'devices.c'; then $(CYGPATH_W) 'devices.c'; else $(CYGPATH_W) '$(srcdir)/devices.c'; fi` atari800-esc.o: esc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-esc.o -MD -MP -MF $(DEPDIR)/atari800-esc.Tpo -c -o atari800-esc.o `test -f 'esc.c' || echo '$(srcdir)/'`esc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-esc.Tpo $(DEPDIR)/atari800-esc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='esc.c' object='atari800-esc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-esc.o `test -f 'esc.c' || echo '$(srcdir)/'`esc.c atari800-esc.obj: esc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-esc.obj -MD -MP -MF $(DEPDIR)/atari800-esc.Tpo -c -o atari800-esc.obj `if test -f 'esc.c'; then $(CYGPATH_W) 'esc.c'; else $(CYGPATH_W) '$(srcdir)/esc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-esc.Tpo $(DEPDIR)/atari800-esc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='esc.c' object='atari800-esc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-esc.obj `if test -f 'esc.c'; then $(CYGPATH_W) 'esc.c'; else $(CYGPATH_W) '$(srcdir)/esc.c'; fi` atari800-gtia.o: gtia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-gtia.o -MD -MP -MF $(DEPDIR)/atari800-gtia.Tpo -c -o atari800-gtia.o `test -f 'gtia.c' || echo '$(srcdir)/'`gtia.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-gtia.Tpo $(DEPDIR)/atari800-gtia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtia.c' object='atari800-gtia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-gtia.o `test -f 'gtia.c' || echo '$(srcdir)/'`gtia.c atari800-gtia.obj: gtia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-gtia.obj -MD -MP -MF $(DEPDIR)/atari800-gtia.Tpo -c -o atari800-gtia.obj `if test -f 'gtia.c'; then $(CYGPATH_W) 'gtia.c'; else $(CYGPATH_W) '$(srcdir)/gtia.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-gtia.Tpo $(DEPDIR)/atari800-gtia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtia.c' object='atari800-gtia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-gtia.obj `if test -f 'gtia.c'; then $(CYGPATH_W) 'gtia.c'; else $(CYGPATH_W) '$(srcdir)/gtia.c'; fi` atari800-img_tape.o: img_tape.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-img_tape.o -MD -MP -MF $(DEPDIR)/atari800-img_tape.Tpo -c -o atari800-img_tape.o `test -f 'img_tape.c' || echo '$(srcdir)/'`img_tape.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-img_tape.Tpo $(DEPDIR)/atari800-img_tape.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='img_tape.c' object='atari800-img_tape.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-img_tape.o `test -f 'img_tape.c' || echo '$(srcdir)/'`img_tape.c atari800-img_tape.obj: img_tape.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-img_tape.obj -MD -MP -MF $(DEPDIR)/atari800-img_tape.Tpo -c -o atari800-img_tape.obj `if test -f 'img_tape.c'; then $(CYGPATH_W) 'img_tape.c'; else $(CYGPATH_W) '$(srcdir)/img_tape.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-img_tape.Tpo $(DEPDIR)/atari800-img_tape.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='img_tape.c' object='atari800-img_tape.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-img_tape.obj `if test -f 'img_tape.c'; then $(CYGPATH_W) 'img_tape.c'; else $(CYGPATH_W) '$(srcdir)/img_tape.c'; fi` atari800-log.o: log.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-log.o -MD -MP -MF $(DEPDIR)/atari800-log.Tpo -c -o atari800-log.o `test -f 'log.c' || echo '$(srcdir)/'`log.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-log.Tpo $(DEPDIR)/atari800-log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='log.c' object='atari800-log.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-log.o `test -f 'log.c' || echo '$(srcdir)/'`log.c atari800-log.obj: log.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-log.obj -MD -MP -MF $(DEPDIR)/atari800-log.Tpo -c -o atari800-log.obj `if test -f 'log.c'; then $(CYGPATH_W) 'log.c'; else $(CYGPATH_W) '$(srcdir)/log.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-log.Tpo $(DEPDIR)/atari800-log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='log.c' object='atari800-log.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-log.obj `if test -f 'log.c'; then $(CYGPATH_W) 'log.c'; else $(CYGPATH_W) '$(srcdir)/log.c'; fi` atari800-memory.o: memory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-memory.o -MD -MP -MF $(DEPDIR)/atari800-memory.Tpo -c -o atari800-memory.o `test -f 'memory.c' || echo '$(srcdir)/'`memory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-memory.Tpo $(DEPDIR)/atari800-memory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memory.c' object='atari800-memory.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-memory.o `test -f 'memory.c' || echo '$(srcdir)/'`memory.c atari800-memory.obj: memory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-memory.obj -MD -MP -MF $(DEPDIR)/atari800-memory.Tpo -c -o atari800-memory.obj `if test -f 'memory.c'; then $(CYGPATH_W) 'memory.c'; else $(CYGPATH_W) '$(srcdir)/memory.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-memory.Tpo $(DEPDIR)/atari800-memory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memory.c' object='atari800-memory.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-memory.obj `if test -f 'memory.c'; then $(CYGPATH_W) 'memory.c'; else $(CYGPATH_W) '$(srcdir)/memory.c'; fi` atari800-monitor.o: monitor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-monitor.o -MD -MP -MF $(DEPDIR)/atari800-monitor.Tpo -c -o atari800-monitor.o `test -f 'monitor.c' || echo '$(srcdir)/'`monitor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-monitor.Tpo $(DEPDIR)/atari800-monitor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='monitor.c' object='atari800-monitor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-monitor.o `test -f 'monitor.c' || echo '$(srcdir)/'`monitor.c atari800-monitor.obj: monitor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-monitor.obj -MD -MP -MF $(DEPDIR)/atari800-monitor.Tpo -c -o atari800-monitor.obj `if test -f 'monitor.c'; then $(CYGPATH_W) 'monitor.c'; else $(CYGPATH_W) '$(srcdir)/monitor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-monitor.Tpo $(DEPDIR)/atari800-monitor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='monitor.c' object='atari800-monitor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-monitor.obj `if test -f 'monitor.c'; then $(CYGPATH_W) 'monitor.c'; else $(CYGPATH_W) '$(srcdir)/monitor.c'; fi` atari800-pbi.o: pbi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi.o -MD -MP -MF $(DEPDIR)/atari800-pbi.Tpo -c -o atari800-pbi.o `test -f 'pbi.c' || echo '$(srcdir)/'`pbi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi.Tpo $(DEPDIR)/atari800-pbi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi.c' object='atari800-pbi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi.o `test -f 'pbi.c' || echo '$(srcdir)/'`pbi.c atari800-pbi.obj: pbi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi.obj -MD -MP -MF $(DEPDIR)/atari800-pbi.Tpo -c -o atari800-pbi.obj `if test -f 'pbi.c'; then $(CYGPATH_W) 'pbi.c'; else $(CYGPATH_W) '$(srcdir)/pbi.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi.Tpo $(DEPDIR)/atari800-pbi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi.c' object='atari800-pbi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi.obj `if test -f 'pbi.c'; then $(CYGPATH_W) 'pbi.c'; else $(CYGPATH_W) '$(srcdir)/pbi.c'; fi` atari800-pia.o: pia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pia.o -MD -MP -MF $(DEPDIR)/atari800-pia.Tpo -c -o atari800-pia.o `test -f 'pia.c' || echo '$(srcdir)/'`pia.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pia.Tpo $(DEPDIR)/atari800-pia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pia.c' object='atari800-pia.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pia.o `test -f 'pia.c' || echo '$(srcdir)/'`pia.c atari800-pia.obj: pia.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pia.obj -MD -MP -MF $(DEPDIR)/atari800-pia.Tpo -c -o atari800-pia.obj `if test -f 'pia.c'; then $(CYGPATH_W) 'pia.c'; else $(CYGPATH_W) '$(srcdir)/pia.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pia.Tpo $(DEPDIR)/atari800-pia.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pia.c' object='atari800-pia.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pia.obj `if test -f 'pia.c'; then $(CYGPATH_W) 'pia.c'; else $(CYGPATH_W) '$(srcdir)/pia.c'; fi` atari800-pokey.o: pokey.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pokey.o -MD -MP -MF $(DEPDIR)/atari800-pokey.Tpo -c -o atari800-pokey.o `test -f 'pokey.c' || echo '$(srcdir)/'`pokey.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pokey.Tpo $(DEPDIR)/atari800-pokey.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pokey.c' object='atari800-pokey.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pokey.o `test -f 'pokey.c' || echo '$(srcdir)/'`pokey.c atari800-pokey.obj: pokey.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pokey.obj -MD -MP -MF $(DEPDIR)/atari800-pokey.Tpo -c -o atari800-pokey.obj `if test -f 'pokey.c'; then $(CYGPATH_W) 'pokey.c'; else $(CYGPATH_W) '$(srcdir)/pokey.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pokey.Tpo $(DEPDIR)/atari800-pokey.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pokey.c' object='atari800-pokey.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pokey.obj `if test -f 'pokey.c'; then $(CYGPATH_W) 'pokey.c'; else $(CYGPATH_W) '$(srcdir)/pokey.c'; fi` roms/atari800-altirra_5200_os.o: roms/altirra_5200_os.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirra_5200_os.o -MD -MP -MF roms/$(DEPDIR)/atari800-altirra_5200_os.Tpo -c -o roms/atari800-altirra_5200_os.o `test -f 'roms/altirra_5200_os.c' || echo '$(srcdir)/'`roms/altirra_5200_os.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirra_5200_os.Tpo roms/$(DEPDIR)/atari800-altirra_5200_os.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirra_5200_os.c' object='roms/atari800-altirra_5200_os.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirra_5200_os.o `test -f 'roms/altirra_5200_os.c' || echo '$(srcdir)/'`roms/altirra_5200_os.c roms/atari800-altirra_5200_os.obj: roms/altirra_5200_os.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirra_5200_os.obj -MD -MP -MF roms/$(DEPDIR)/atari800-altirra_5200_os.Tpo -c -o roms/atari800-altirra_5200_os.obj `if test -f 'roms/altirra_5200_os.c'; then $(CYGPATH_W) 'roms/altirra_5200_os.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirra_5200_os.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirra_5200_os.Tpo roms/$(DEPDIR)/atari800-altirra_5200_os.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirra_5200_os.c' object='roms/atari800-altirra_5200_os.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirra_5200_os.obj `if test -f 'roms/altirra_5200_os.c'; then $(CYGPATH_W) 'roms/altirra_5200_os.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirra_5200_os.c'; fi` atari800-rtime.o: rtime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-rtime.o -MD -MP -MF $(DEPDIR)/atari800-rtime.Tpo -c -o atari800-rtime.o `test -f 'rtime.c' || echo '$(srcdir)/'`rtime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-rtime.Tpo $(DEPDIR)/atari800-rtime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rtime.c' object='atari800-rtime.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-rtime.o `test -f 'rtime.c' || echo '$(srcdir)/'`rtime.c atari800-rtime.obj: rtime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-rtime.obj -MD -MP -MF $(DEPDIR)/atari800-rtime.Tpo -c -o atari800-rtime.obj `if test -f 'rtime.c'; then $(CYGPATH_W) 'rtime.c'; else $(CYGPATH_W) '$(srcdir)/rtime.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-rtime.Tpo $(DEPDIR)/atari800-rtime.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rtime.c' object='atari800-rtime.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-rtime.obj `if test -f 'rtime.c'; then $(CYGPATH_W) 'rtime.c'; else $(CYGPATH_W) '$(srcdir)/rtime.c'; fi` atari800-sio.o: sio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sio.o -MD -MP -MF $(DEPDIR)/atari800-sio.Tpo -c -o atari800-sio.o `test -f 'sio.c' || echo '$(srcdir)/'`sio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sio.Tpo $(DEPDIR)/atari800-sio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sio.c' object='atari800-sio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sio.o `test -f 'sio.c' || echo '$(srcdir)/'`sio.c atari800-sio.obj: sio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sio.obj -MD -MP -MF $(DEPDIR)/atari800-sio.Tpo -c -o atari800-sio.obj `if test -f 'sio.c'; then $(CYGPATH_W) 'sio.c'; else $(CYGPATH_W) '$(srcdir)/sio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sio.Tpo $(DEPDIR)/atari800-sio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sio.c' object='atari800-sio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sio.obj `if test -f 'sio.c'; then $(CYGPATH_W) 'sio.c'; else $(CYGPATH_W) '$(srcdir)/sio.c'; fi` atari800-sysrom.o: sysrom.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sysrom.o -MD -MP -MF $(DEPDIR)/atari800-sysrom.Tpo -c -o atari800-sysrom.o `test -f 'sysrom.c' || echo '$(srcdir)/'`sysrom.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sysrom.Tpo $(DEPDIR)/atari800-sysrom.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sysrom.c' object='atari800-sysrom.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sysrom.o `test -f 'sysrom.c' || echo '$(srcdir)/'`sysrom.c atari800-sysrom.obj: sysrom.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sysrom.obj -MD -MP -MF $(DEPDIR)/atari800-sysrom.Tpo -c -o atari800-sysrom.obj `if test -f 'sysrom.c'; then $(CYGPATH_W) 'sysrom.c'; else $(CYGPATH_W) '$(srcdir)/sysrom.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sysrom.Tpo $(DEPDIR)/atari800-sysrom.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sysrom.c' object='atari800-sysrom.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sysrom.obj `if test -f 'sysrom.c'; then $(CYGPATH_W) 'sysrom.c'; else $(CYGPATH_W) '$(srcdir)/sysrom.c'; fi` atari800-util.o: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-util.o -MD -MP -MF $(DEPDIR)/atari800-util.Tpo -c -o atari800-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-util.Tpo $(DEPDIR)/atari800-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='atari800-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c atari800-util.obj: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-util.obj -MD -MP -MF $(DEPDIR)/atari800-util.Tpo -c -o atari800-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-util.Tpo $(DEPDIR)/atari800-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='atari800-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` sdl/atari800-init.o: sdl/init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-init.o -MD -MP -MF sdl/$(DEPDIR)/atari800-init.Tpo -c -o sdl/atari800-init.o `test -f 'sdl/init.c' || echo '$(srcdir)/'`sdl/init.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-init.Tpo sdl/$(DEPDIR)/atari800-init.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/init.c' object='sdl/atari800-init.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-init.o `test -f 'sdl/init.c' || echo '$(srcdir)/'`sdl/init.c sdl/atari800-init.obj: sdl/init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-init.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-init.Tpo -c -o sdl/atari800-init.obj `if test -f 'sdl/init.c'; then $(CYGPATH_W) 'sdl/init.c'; else $(CYGPATH_W) '$(srcdir)/sdl/init.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-init.Tpo sdl/$(DEPDIR)/atari800-init.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/init.c' object='sdl/atari800-init.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-init.obj `if test -f 'sdl/init.c'; then $(CYGPATH_W) 'sdl/init.c'; else $(CYGPATH_W) '$(srcdir)/sdl/init.c'; fi` sdl/atari800-SDL_win32_main.o: sdl/SDL_win32_main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-SDL_win32_main.o -MD -MP -MF sdl/$(DEPDIR)/atari800-SDL_win32_main.Tpo -c -o sdl/atari800-SDL_win32_main.o `test -f 'sdl/SDL_win32_main.c' || echo '$(srcdir)/'`sdl/SDL_win32_main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-SDL_win32_main.Tpo sdl/$(DEPDIR)/atari800-SDL_win32_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/SDL_win32_main.c' object='sdl/atari800-SDL_win32_main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-SDL_win32_main.o `test -f 'sdl/SDL_win32_main.c' || echo '$(srcdir)/'`sdl/SDL_win32_main.c sdl/atari800-SDL_win32_main.obj: sdl/SDL_win32_main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-SDL_win32_main.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-SDL_win32_main.Tpo -c -o sdl/atari800-SDL_win32_main.obj `if test -f 'sdl/SDL_win32_main.c'; then $(CYGPATH_W) 'sdl/SDL_win32_main.c'; else $(CYGPATH_W) '$(srcdir)/sdl/SDL_win32_main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-SDL_win32_main.Tpo sdl/$(DEPDIR)/atari800-SDL_win32_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/SDL_win32_main.c' object='sdl/atari800-SDL_win32_main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-SDL_win32_main.obj `if test -f 'sdl/SDL_win32_main.c'; then $(CYGPATH_W) 'sdl/SDL_win32_main.c'; else $(CYGPATH_W) '$(srcdir)/sdl/SDL_win32_main.c'; fi` atari800-pokeysnd.o: pokeysnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pokeysnd.o -MD -MP -MF $(DEPDIR)/atari800-pokeysnd.Tpo -c -o atari800-pokeysnd.o `test -f 'pokeysnd.c' || echo '$(srcdir)/'`pokeysnd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pokeysnd.Tpo $(DEPDIR)/atari800-pokeysnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pokeysnd.c' object='atari800-pokeysnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pokeysnd.o `test -f 'pokeysnd.c' || echo '$(srcdir)/'`pokeysnd.c atari800-pokeysnd.obj: pokeysnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pokeysnd.obj -MD -MP -MF $(DEPDIR)/atari800-pokeysnd.Tpo -c -o atari800-pokeysnd.obj `if test -f 'pokeysnd.c'; then $(CYGPATH_W) 'pokeysnd.c'; else $(CYGPATH_W) '$(srcdir)/pokeysnd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pokeysnd.Tpo $(DEPDIR)/atari800-pokeysnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pokeysnd.c' object='atari800-pokeysnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pokeysnd.obj `if test -f 'pokeysnd.c'; then $(CYGPATH_W) 'pokeysnd.c'; else $(CYGPATH_W) '$(srcdir)/pokeysnd.c'; fi` atari800-mzpokeysnd.o: mzpokeysnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-mzpokeysnd.o -MD -MP -MF $(DEPDIR)/atari800-mzpokeysnd.Tpo -c -o atari800-mzpokeysnd.o `test -f 'mzpokeysnd.c' || echo '$(srcdir)/'`mzpokeysnd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-mzpokeysnd.Tpo $(DEPDIR)/atari800-mzpokeysnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mzpokeysnd.c' object='atari800-mzpokeysnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-mzpokeysnd.o `test -f 'mzpokeysnd.c' || echo '$(srcdir)/'`mzpokeysnd.c atari800-mzpokeysnd.obj: mzpokeysnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-mzpokeysnd.obj -MD -MP -MF $(DEPDIR)/atari800-mzpokeysnd.Tpo -c -o atari800-mzpokeysnd.obj `if test -f 'mzpokeysnd.c'; then $(CYGPATH_W) 'mzpokeysnd.c'; else $(CYGPATH_W) '$(srcdir)/mzpokeysnd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-mzpokeysnd.Tpo $(DEPDIR)/atari800-mzpokeysnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mzpokeysnd.c' object='atari800-mzpokeysnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-mzpokeysnd.obj `if test -f 'mzpokeysnd.c'; then $(CYGPATH_W) 'mzpokeysnd.c'; else $(CYGPATH_W) '$(srcdir)/mzpokeysnd.c'; fi` atari800-remez.o: remez.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-remez.o -MD -MP -MF $(DEPDIR)/atari800-remez.Tpo -c -o atari800-remez.o `test -f 'remez.c' || echo '$(srcdir)/'`remez.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-remez.Tpo $(DEPDIR)/atari800-remez.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='remez.c' object='atari800-remez.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-remez.o `test -f 'remez.c' || echo '$(srcdir)/'`remez.c atari800-remez.obj: remez.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-remez.obj -MD -MP -MF $(DEPDIR)/atari800-remez.Tpo -c -o atari800-remez.obj `if test -f 'remez.c'; then $(CYGPATH_W) 'remez.c'; else $(CYGPATH_W) '$(srcdir)/remez.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-remez.Tpo $(DEPDIR)/atari800-remez.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='remez.c' object='atari800-remez.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-remez.obj `if test -f 'remez.c'; then $(CYGPATH_W) 'remez.c'; else $(CYGPATH_W) '$(srcdir)/remez.c'; fi` atari800-sound.o: sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sound.o -MD -MP -MF $(DEPDIR)/atari800-sound.Tpo -c -o atari800-sound.o `test -f 'sound.c' || echo '$(srcdir)/'`sound.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sound.Tpo $(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sound.c' object='atari800-sound.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sound.o `test -f 'sound.c' || echo '$(srcdir)/'`sound.c atari800-sound.obj: sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sound.obj -MD -MP -MF $(DEPDIR)/atari800-sound.Tpo -c -o atari800-sound.obj `if test -f 'sound.c'; then $(CYGPATH_W) 'sound.c'; else $(CYGPATH_W) '$(srcdir)/sound.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sound.Tpo $(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sound.c' object='atari800-sound.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sound.obj `if test -f 'sound.c'; then $(CYGPATH_W) 'sound.c'; else $(CYGPATH_W) '$(srcdir)/sound.c'; fi` sdl/atari800-sound.o: sdl/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-sound.o -MD -MP -MF sdl/$(DEPDIR)/atari800-sound.Tpo -c -o sdl/atari800-sound.o `test -f 'sdl/sound.c' || echo '$(srcdir)/'`sdl/sound.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-sound.Tpo sdl/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/sound.c' object='sdl/atari800-sound.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-sound.o `test -f 'sdl/sound.c' || echo '$(srcdir)/'`sdl/sound.c sdl/atari800-sound.obj: sdl/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-sound.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-sound.Tpo -c -o sdl/atari800-sound.obj `if test -f 'sdl/sound.c'; then $(CYGPATH_W) 'sdl/sound.c'; else $(CYGPATH_W) '$(srcdir)/sdl/sound.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-sound.Tpo sdl/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/sound.c' object='sdl/atari800-sound.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-sound.obj `if test -f 'sdl/sound.c'; then $(CYGPATH_W) 'sdl/sound.c'; else $(CYGPATH_W) '$(srcdir)/sdl/sound.c'; fi` falcon/atari800-sound.o: falcon/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT falcon/atari800-sound.o -MD -MP -MF falcon/$(DEPDIR)/atari800-sound.Tpo -c -o falcon/atari800-sound.o `test -f 'falcon/sound.c' || echo '$(srcdir)/'`falcon/sound.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) falcon/$(DEPDIR)/atari800-sound.Tpo falcon/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='falcon/sound.c' object='falcon/atari800-sound.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o falcon/atari800-sound.o `test -f 'falcon/sound.c' || echo '$(srcdir)/'`falcon/sound.c falcon/atari800-sound.obj: falcon/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT falcon/atari800-sound.obj -MD -MP -MF falcon/$(DEPDIR)/atari800-sound.Tpo -c -o falcon/atari800-sound.obj `if test -f 'falcon/sound.c'; then $(CYGPATH_W) 'falcon/sound.c'; else $(CYGPATH_W) '$(srcdir)/falcon/sound.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) falcon/$(DEPDIR)/atari800-sound.Tpo falcon/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='falcon/sound.c' object='falcon/atari800-sound.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o falcon/atari800-sound.obj `if test -f 'falcon/sound.c'; then $(CYGPATH_W) 'falcon/sound.c'; else $(CYGPATH_W) '$(srcdir)/falcon/sound.c'; fi` javanvm/atari800-sound.o: javanvm/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-sound.o -MD -MP -MF javanvm/$(DEPDIR)/atari800-sound.Tpo -c -o javanvm/atari800-sound.o `test -f 'javanvm/sound.c' || echo '$(srcdir)/'`javanvm/sound.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-sound.Tpo javanvm/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/sound.c' object='javanvm/atari800-sound.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-sound.o `test -f 'javanvm/sound.c' || echo '$(srcdir)/'`javanvm/sound.c javanvm/atari800-sound.obj: javanvm/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-sound.obj -MD -MP -MF javanvm/$(DEPDIR)/atari800-sound.Tpo -c -o javanvm/atari800-sound.obj `if test -f 'javanvm/sound.c'; then $(CYGPATH_W) 'javanvm/sound.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/sound.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-sound.Tpo javanvm/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/sound.c' object='javanvm/atari800-sound.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-sound.obj `if test -f 'javanvm/sound.c'; then $(CYGPATH_W) 'javanvm/sound.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/sound.c'; fi` dos/atari800-sound_dos.o: dos/sound_dos.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-sound_dos.o -MD -MP -MF dos/$(DEPDIR)/atari800-sound_dos.Tpo -c -o dos/atari800-sound_dos.o `test -f 'dos/sound_dos.c' || echo '$(srcdir)/'`dos/sound_dos.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-sound_dos.Tpo dos/$(DEPDIR)/atari800-sound_dos.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/sound_dos.c' object='dos/atari800-sound_dos.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-sound_dos.o `test -f 'dos/sound_dos.c' || echo '$(srcdir)/'`dos/sound_dos.c dos/atari800-sound_dos.obj: dos/sound_dos.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-sound_dos.obj -MD -MP -MF dos/$(DEPDIR)/atari800-sound_dos.Tpo -c -o dos/atari800-sound_dos.obj `if test -f 'dos/sound_dos.c'; then $(CYGPATH_W) 'dos/sound_dos.c'; else $(CYGPATH_W) '$(srcdir)/dos/sound_dos.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-sound_dos.Tpo dos/$(DEPDIR)/atari800-sound_dos.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/sound_dos.c' object='dos/atari800-sound_dos.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-sound_dos.obj `if test -f 'dos/sound_dos.c'; then $(CYGPATH_W) 'dos/sound_dos.c'; else $(CYGPATH_W) '$(srcdir)/dos/sound_dos.c'; fi` dos/atari800-dos_sb.o: dos/dos_sb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-dos_sb.o -MD -MP -MF dos/$(DEPDIR)/atari800-dos_sb.Tpo -c -o dos/atari800-dos_sb.o `test -f 'dos/dos_sb.c' || echo '$(srcdir)/'`dos/dos_sb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-dos_sb.Tpo dos/$(DEPDIR)/atari800-dos_sb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/dos_sb.c' object='dos/atari800-dos_sb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-dos_sb.o `test -f 'dos/dos_sb.c' || echo '$(srcdir)/'`dos/dos_sb.c dos/atari800-dos_sb.obj: dos/dos_sb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-dos_sb.obj -MD -MP -MF dos/$(DEPDIR)/atari800-dos_sb.Tpo -c -o dos/atari800-dos_sb.obj `if test -f 'dos/dos_sb.c'; then $(CYGPATH_W) 'dos/dos_sb.c'; else $(CYGPATH_W) '$(srcdir)/dos/dos_sb.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-dos_sb.Tpo dos/$(DEPDIR)/atari800-dos_sb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/dos_sb.c' object='dos/atari800-dos_sb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-dos_sb.obj `if test -f 'dos/dos_sb.c'; then $(CYGPATH_W) 'dos/dos_sb.c'; else $(CYGPATH_W) '$(srcdir)/dos/dos_sb.c'; fi` atari800-sound_oss.o: sound_oss.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sound_oss.o -MD -MP -MF $(DEPDIR)/atari800-sound_oss.Tpo -c -o atari800-sound_oss.o `test -f 'sound_oss.c' || echo '$(srcdir)/'`sound_oss.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sound_oss.Tpo $(DEPDIR)/atari800-sound_oss.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sound_oss.c' object='atari800-sound_oss.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sound_oss.o `test -f 'sound_oss.c' || echo '$(srcdir)/'`sound_oss.c atari800-sound_oss.obj: sound_oss.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-sound_oss.obj -MD -MP -MF $(DEPDIR)/atari800-sound_oss.Tpo -c -o atari800-sound_oss.obj `if test -f 'sound_oss.c'; then $(CYGPATH_W) 'sound_oss.c'; else $(CYGPATH_W) '$(srcdir)/sound_oss.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-sound_oss.Tpo $(DEPDIR)/atari800-sound_oss.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sound_oss.c' object='atari800-sound_oss.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-sound_oss.obj `if test -f 'sound_oss.c'; then $(CYGPATH_W) 'sound_oss.c'; else $(CYGPATH_W) '$(srcdir)/sound_oss.c'; fi` win32/atari800-sound.o: win32/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT win32/atari800-sound.o -MD -MP -MF win32/$(DEPDIR)/atari800-sound.Tpo -c -o win32/atari800-sound.o `test -f 'win32/sound.c' || echo '$(srcdir)/'`win32/sound.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/atari800-sound.Tpo win32/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/sound.c' object='win32/atari800-sound.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o win32/atari800-sound.o `test -f 'win32/sound.c' || echo '$(srcdir)/'`win32/sound.c win32/atari800-sound.obj: win32/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT win32/atari800-sound.obj -MD -MP -MF win32/$(DEPDIR)/atari800-sound.Tpo -c -o win32/atari800-sound.obj `if test -f 'win32/sound.c'; then $(CYGPATH_W) 'win32/sound.c'; else $(CYGPATH_W) '$(srcdir)/win32/sound.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) win32/$(DEPDIR)/atari800-sound.Tpo win32/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win32/sound.c' object='win32/atari800-sound.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o win32/atari800-sound.obj `if test -f 'win32/sound.c'; then $(CYGPATH_W) 'win32/sound.c'; else $(CYGPATH_W) '$(srcdir)/win32/sound.c'; fi` libatari800/atari800-sound.o: libatari800/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libatari800/atari800-sound.o -MD -MP -MF libatari800/$(DEPDIR)/atari800-sound.Tpo -c -o libatari800/atari800-sound.o `test -f 'libatari800/sound.c' || echo '$(srcdir)/'`libatari800/sound.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libatari800/$(DEPDIR)/atari800-sound.Tpo libatari800/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libatari800/sound.c' object='libatari800/atari800-sound.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libatari800/atari800-sound.o `test -f 'libatari800/sound.c' || echo '$(srcdir)/'`libatari800/sound.c libatari800/atari800-sound.obj: libatari800/sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libatari800/atari800-sound.obj -MD -MP -MF libatari800/$(DEPDIR)/atari800-sound.Tpo -c -o libatari800/atari800-sound.obj `if test -f 'libatari800/sound.c'; then $(CYGPATH_W) 'libatari800/sound.c'; else $(CYGPATH_W) '$(srcdir)/libatari800/sound.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libatari800/$(DEPDIR)/atari800-sound.Tpo libatari800/$(DEPDIR)/atari800-sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libatari800/sound.c' object='libatari800/atari800-sound.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libatari800/atari800-sound.obj `if test -f 'libatari800/sound.c'; then $(CYGPATH_W) 'libatari800/sound.c'; else $(CYGPATH_W) '$(srcdir)/libatari800/sound.c'; fi` atari800-pokeyrec.o: pokeyrec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pokeyrec.o -MD -MP -MF $(DEPDIR)/atari800-pokeyrec.Tpo -c -o atari800-pokeyrec.o `test -f 'pokeyrec.c' || echo '$(srcdir)/'`pokeyrec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pokeyrec.Tpo $(DEPDIR)/atari800-pokeyrec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pokeyrec.c' object='atari800-pokeyrec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pokeyrec.o `test -f 'pokeyrec.c' || echo '$(srcdir)/'`pokeyrec.c atari800-pokeyrec.obj: pokeyrec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pokeyrec.obj -MD -MP -MF $(DEPDIR)/atari800-pokeyrec.Tpo -c -o atari800-pokeyrec.obj `if test -f 'pokeyrec.c'; then $(CYGPATH_W) 'pokeyrec.c'; else $(CYGPATH_W) '$(srcdir)/pokeyrec.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pokeyrec.Tpo $(DEPDIR)/atari800-pokeyrec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pokeyrec.c' object='atari800-pokeyrec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pokeyrec.obj `if test -f 'pokeyrec.c'; then $(CYGPATH_W) 'pokeyrec.c'; else $(CYGPATH_W) '$(srcdir)/pokeyrec.c'; fi` atari800-file_export.o: file_export.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-file_export.o -MD -MP -MF $(DEPDIR)/atari800-file_export.Tpo -c -o atari800-file_export.o `test -f 'file_export.c' || echo '$(srcdir)/'`file_export.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-file_export.Tpo $(DEPDIR)/atari800-file_export.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file_export.c' object='atari800-file_export.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-file_export.o `test -f 'file_export.c' || echo '$(srcdir)/'`file_export.c atari800-file_export.obj: file_export.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-file_export.obj -MD -MP -MF $(DEPDIR)/atari800-file_export.Tpo -c -o atari800-file_export.obj `if test -f 'file_export.c'; then $(CYGPATH_W) 'file_export.c'; else $(CYGPATH_W) '$(srcdir)/file_export.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-file_export.Tpo $(DEPDIR)/atari800-file_export.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file_export.c' object='atari800-file_export.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-file_export.obj `if test -f 'file_export.c'; then $(CYGPATH_W) 'file_export.c'; else $(CYGPATH_W) '$(srcdir)/file_export.c'; fi` codecs/atari800-container.o: codecs/container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container.o -MD -MP -MF codecs/$(DEPDIR)/atari800-container.Tpo -c -o codecs/atari800-container.o `test -f 'codecs/container.c' || echo '$(srcdir)/'`codecs/container.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container.Tpo codecs/$(DEPDIR)/atari800-container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container.c' object='codecs/atari800-container.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container.o `test -f 'codecs/container.c' || echo '$(srcdir)/'`codecs/container.c codecs/atari800-container.obj: codecs/container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-container.Tpo -c -o codecs/atari800-container.obj `if test -f 'codecs/container.c'; then $(CYGPATH_W) 'codecs/container.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container.Tpo codecs/$(DEPDIR)/atari800-container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container.c' object='codecs/atari800-container.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container.obj `if test -f 'codecs/container.c'; then $(CYGPATH_W) 'codecs/container.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container.c'; fi` codecs/atari800-container_wav.o: codecs/container_wav.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container_wav.o -MD -MP -MF codecs/$(DEPDIR)/atari800-container_wav.Tpo -c -o codecs/atari800-container_wav.o `test -f 'codecs/container_wav.c' || echo '$(srcdir)/'`codecs/container_wav.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container_wav.Tpo codecs/$(DEPDIR)/atari800-container_wav.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container_wav.c' object='codecs/atari800-container_wav.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container_wav.o `test -f 'codecs/container_wav.c' || echo '$(srcdir)/'`codecs/container_wav.c codecs/atari800-container_wav.obj: codecs/container_wav.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container_wav.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-container_wav.Tpo -c -o codecs/atari800-container_wav.obj `if test -f 'codecs/container_wav.c'; then $(CYGPATH_W) 'codecs/container_wav.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container_wav.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container_wav.Tpo codecs/$(DEPDIR)/atari800-container_wav.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container_wav.c' object='codecs/atari800-container_wav.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container_wav.obj `if test -f 'codecs/container_wav.c'; then $(CYGPATH_W) 'codecs/container_wav.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container_wav.c'; fi` codecs/atari800-audio.o: codecs/audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio.o -MD -MP -MF codecs/$(DEPDIR)/atari800-audio.Tpo -c -o codecs/atari800-audio.o `test -f 'codecs/audio.c' || echo '$(srcdir)/'`codecs/audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio.Tpo codecs/$(DEPDIR)/atari800-audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio.c' object='codecs/atari800-audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio.o `test -f 'codecs/audio.c' || echo '$(srcdir)/'`codecs/audio.c codecs/atari800-audio.obj: codecs/audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-audio.Tpo -c -o codecs/atari800-audio.obj `if test -f 'codecs/audio.c'; then $(CYGPATH_W) 'codecs/audio.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio.Tpo codecs/$(DEPDIR)/atari800-audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio.c' object='codecs/atari800-audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio.obj `if test -f 'codecs/audio.c'; then $(CYGPATH_W) 'codecs/audio.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio.c'; fi` codecs/atari800-audio_pcm.o: codecs/audio_pcm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_pcm.o -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_pcm.Tpo -c -o codecs/atari800-audio_pcm.o `test -f 'codecs/audio_pcm.c' || echo '$(srcdir)/'`codecs/audio_pcm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_pcm.Tpo codecs/$(DEPDIR)/atari800-audio_pcm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_pcm.c' object='codecs/atari800-audio_pcm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_pcm.o `test -f 'codecs/audio_pcm.c' || echo '$(srcdir)/'`codecs/audio_pcm.c codecs/atari800-audio_pcm.obj: codecs/audio_pcm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_pcm.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_pcm.Tpo -c -o codecs/atari800-audio_pcm.obj `if test -f 'codecs/audio_pcm.c'; then $(CYGPATH_W) 'codecs/audio_pcm.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_pcm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_pcm.Tpo codecs/$(DEPDIR)/atari800-audio_pcm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_pcm.c' object='codecs/atari800-audio_pcm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_pcm.obj `if test -f 'codecs/audio_pcm.c'; then $(CYGPATH_W) 'codecs/audio_pcm.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_pcm.c'; fi` codecs/atari800-audio_adpcm.o: codecs/audio_adpcm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_adpcm.o -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_adpcm.Tpo -c -o codecs/atari800-audio_adpcm.o `test -f 'codecs/audio_adpcm.c' || echo '$(srcdir)/'`codecs/audio_adpcm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_adpcm.Tpo codecs/$(DEPDIR)/atari800-audio_adpcm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_adpcm.c' object='codecs/atari800-audio_adpcm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_adpcm.o `test -f 'codecs/audio_adpcm.c' || echo '$(srcdir)/'`codecs/audio_adpcm.c codecs/atari800-audio_adpcm.obj: codecs/audio_adpcm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_adpcm.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_adpcm.Tpo -c -o codecs/atari800-audio_adpcm.obj `if test -f 'codecs/audio_adpcm.c'; then $(CYGPATH_W) 'codecs/audio_adpcm.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_adpcm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_adpcm.Tpo codecs/$(DEPDIR)/atari800-audio_adpcm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_adpcm.c' object='codecs/atari800-audio_adpcm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_adpcm.obj `if test -f 'codecs/audio_adpcm.c'; then $(CYGPATH_W) 'codecs/audio_adpcm.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_adpcm.c'; fi` codecs/atari800-audio_mulaw.o: codecs/audio_mulaw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_mulaw.o -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_mulaw.Tpo -c -o codecs/atari800-audio_mulaw.o `test -f 'codecs/audio_mulaw.c' || echo '$(srcdir)/'`codecs/audio_mulaw.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_mulaw.Tpo codecs/$(DEPDIR)/atari800-audio_mulaw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_mulaw.c' object='codecs/atari800-audio_mulaw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_mulaw.o `test -f 'codecs/audio_mulaw.c' || echo '$(srcdir)/'`codecs/audio_mulaw.c codecs/atari800-audio_mulaw.obj: codecs/audio_mulaw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_mulaw.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_mulaw.Tpo -c -o codecs/atari800-audio_mulaw.obj `if test -f 'codecs/audio_mulaw.c'; then $(CYGPATH_W) 'codecs/audio_mulaw.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_mulaw.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_mulaw.Tpo codecs/$(DEPDIR)/atari800-audio_mulaw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_mulaw.c' object='codecs/atari800-audio_mulaw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_mulaw.obj `if test -f 'codecs/audio_mulaw.c'; then $(CYGPATH_W) 'codecs/audio_mulaw.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_mulaw.c'; fi` codecs/atari800-audio_mp3.o: codecs/audio_mp3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_mp3.o -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_mp3.Tpo -c -o codecs/atari800-audio_mp3.o `test -f 'codecs/audio_mp3.c' || echo '$(srcdir)/'`codecs/audio_mp3.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_mp3.Tpo codecs/$(DEPDIR)/atari800-audio_mp3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_mp3.c' object='codecs/atari800-audio_mp3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_mp3.o `test -f 'codecs/audio_mp3.c' || echo '$(srcdir)/'`codecs/audio_mp3.c codecs/atari800-audio_mp3.obj: codecs/audio_mp3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-audio_mp3.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-audio_mp3.Tpo -c -o codecs/atari800-audio_mp3.obj `if test -f 'codecs/audio_mp3.c'; then $(CYGPATH_W) 'codecs/audio_mp3.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_mp3.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-audio_mp3.Tpo codecs/$(DEPDIR)/atari800-audio_mp3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/audio_mp3.c' object='codecs/atari800-audio_mp3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-audio_mp3.obj `if test -f 'codecs/audio_mp3.c'; then $(CYGPATH_W) 'codecs/audio_mp3.c'; else $(CYGPATH_W) '$(srcdir)/codecs/audio_mp3.c'; fi` codecs/atari800-container_mp3.o: codecs/container_mp3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container_mp3.o -MD -MP -MF codecs/$(DEPDIR)/atari800-container_mp3.Tpo -c -o codecs/atari800-container_mp3.o `test -f 'codecs/container_mp3.c' || echo '$(srcdir)/'`codecs/container_mp3.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container_mp3.Tpo codecs/$(DEPDIR)/atari800-container_mp3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container_mp3.c' object='codecs/atari800-container_mp3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container_mp3.o `test -f 'codecs/container_mp3.c' || echo '$(srcdir)/'`codecs/container_mp3.c codecs/atari800-container_mp3.obj: codecs/container_mp3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container_mp3.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-container_mp3.Tpo -c -o codecs/atari800-container_mp3.obj `if test -f 'codecs/container_mp3.c'; then $(CYGPATH_W) 'codecs/container_mp3.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container_mp3.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container_mp3.Tpo codecs/$(DEPDIR)/atari800-container_mp3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container_mp3.c' object='codecs/atari800-container_mp3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container_mp3.obj `if test -f 'codecs/container_mp3.c'; then $(CYGPATH_W) 'codecs/container_mp3.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container_mp3.c'; fi` codecs/atari800-container_avi.o: codecs/container_avi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container_avi.o -MD -MP -MF codecs/$(DEPDIR)/atari800-container_avi.Tpo -c -o codecs/atari800-container_avi.o `test -f 'codecs/container_avi.c' || echo '$(srcdir)/'`codecs/container_avi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container_avi.Tpo codecs/$(DEPDIR)/atari800-container_avi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container_avi.c' object='codecs/atari800-container_avi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container_avi.o `test -f 'codecs/container_avi.c' || echo '$(srcdir)/'`codecs/container_avi.c codecs/atari800-container_avi.obj: codecs/container_avi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-container_avi.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-container_avi.Tpo -c -o codecs/atari800-container_avi.obj `if test -f 'codecs/container_avi.c'; then $(CYGPATH_W) 'codecs/container_avi.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container_avi.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-container_avi.Tpo codecs/$(DEPDIR)/atari800-container_avi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/container_avi.c' object='codecs/atari800-container_avi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-container_avi.obj `if test -f 'codecs/container_avi.c'; then $(CYGPATH_W) 'codecs/container_avi.c'; else $(CYGPATH_W) '$(srcdir)/codecs/container_avi.c'; fi` codecs/atari800-video.o: codecs/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video.o -MD -MP -MF codecs/$(DEPDIR)/atari800-video.Tpo -c -o codecs/atari800-video.o `test -f 'codecs/video.c' || echo '$(srcdir)/'`codecs/video.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video.Tpo codecs/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video.c' object='codecs/atari800-video.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video.o `test -f 'codecs/video.c' || echo '$(srcdir)/'`codecs/video.c codecs/atari800-video.obj: codecs/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-video.Tpo -c -o codecs/atari800-video.obj `if test -f 'codecs/video.c'; then $(CYGPATH_W) 'codecs/video.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video.Tpo codecs/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video.c' object='codecs/atari800-video.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video.obj `if test -f 'codecs/video.c'; then $(CYGPATH_W) 'codecs/video.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video.c'; fi` codecs/atari800-video_mrle.o: codecs/video_mrle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video_mrle.o -MD -MP -MF codecs/$(DEPDIR)/atari800-video_mrle.Tpo -c -o codecs/atari800-video_mrle.o `test -f 'codecs/video_mrle.c' || echo '$(srcdir)/'`codecs/video_mrle.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video_mrle.Tpo codecs/$(DEPDIR)/atari800-video_mrle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video_mrle.c' object='codecs/atari800-video_mrle.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video_mrle.o `test -f 'codecs/video_mrle.c' || echo '$(srcdir)/'`codecs/video_mrle.c codecs/atari800-video_mrle.obj: codecs/video_mrle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video_mrle.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-video_mrle.Tpo -c -o codecs/atari800-video_mrle.obj `if test -f 'codecs/video_mrle.c'; then $(CYGPATH_W) 'codecs/video_mrle.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video_mrle.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video_mrle.Tpo codecs/$(DEPDIR)/atari800-video_mrle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video_mrle.c' object='codecs/atari800-video_mrle.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video_mrle.obj `if test -f 'codecs/video_mrle.c'; then $(CYGPATH_W) 'codecs/video_mrle.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video_mrle.c'; fi` codecs/atari800-video_mpng.o: codecs/video_mpng.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video_mpng.o -MD -MP -MF codecs/$(DEPDIR)/atari800-video_mpng.Tpo -c -o codecs/atari800-video_mpng.o `test -f 'codecs/video_mpng.c' || echo '$(srcdir)/'`codecs/video_mpng.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video_mpng.Tpo codecs/$(DEPDIR)/atari800-video_mpng.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video_mpng.c' object='codecs/atari800-video_mpng.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video_mpng.o `test -f 'codecs/video_mpng.c' || echo '$(srcdir)/'`codecs/video_mpng.c codecs/atari800-video_mpng.obj: codecs/video_mpng.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video_mpng.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-video_mpng.Tpo -c -o codecs/atari800-video_mpng.obj `if test -f 'codecs/video_mpng.c'; then $(CYGPATH_W) 'codecs/video_mpng.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video_mpng.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video_mpng.Tpo codecs/$(DEPDIR)/atari800-video_mpng.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video_mpng.c' object='codecs/atari800-video_mpng.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video_mpng.obj `if test -f 'codecs/video_mpng.c'; then $(CYGPATH_W) 'codecs/video_mpng.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video_mpng.c'; fi` codecs/atari800-video_zmbv.o: codecs/video_zmbv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video_zmbv.o -MD -MP -MF codecs/$(DEPDIR)/atari800-video_zmbv.Tpo -c -o codecs/atari800-video_zmbv.o `test -f 'codecs/video_zmbv.c' || echo '$(srcdir)/'`codecs/video_zmbv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video_zmbv.Tpo codecs/$(DEPDIR)/atari800-video_zmbv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video_zmbv.c' object='codecs/atari800-video_zmbv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video_zmbv.o `test -f 'codecs/video_zmbv.c' || echo '$(srcdir)/'`codecs/video_zmbv.c codecs/atari800-video_zmbv.obj: codecs/video_zmbv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-video_zmbv.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-video_zmbv.Tpo -c -o codecs/atari800-video_zmbv.obj `if test -f 'codecs/video_zmbv.c'; then $(CYGPATH_W) 'codecs/video_zmbv.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video_zmbv.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-video_zmbv.Tpo codecs/$(DEPDIR)/atari800-video_zmbv.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/video_zmbv.c' object='codecs/atari800-video_zmbv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-video_zmbv.obj `if test -f 'codecs/video_zmbv.c'; then $(CYGPATH_W) 'codecs/video_zmbv.c'; else $(CYGPATH_W) '$(srcdir)/codecs/video_zmbv.c'; fi` falcon/atari800-main.o: falcon/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT falcon/atari800-main.o -MD -MP -MF falcon/$(DEPDIR)/atari800-main.Tpo -c -o falcon/atari800-main.o `test -f 'falcon/main.c' || echo '$(srcdir)/'`falcon/main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) falcon/$(DEPDIR)/atari800-main.Tpo falcon/$(DEPDIR)/atari800-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='falcon/main.c' object='falcon/atari800-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o falcon/atari800-main.o `test -f 'falcon/main.c' || echo '$(srcdir)/'`falcon/main.c falcon/atari800-main.obj: falcon/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT falcon/atari800-main.obj -MD -MP -MF falcon/$(DEPDIR)/atari800-main.Tpo -c -o falcon/atari800-main.obj `if test -f 'falcon/main.c'; then $(CYGPATH_W) 'falcon/main.c'; else $(CYGPATH_W) '$(srcdir)/falcon/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) falcon/$(DEPDIR)/atari800-main.Tpo falcon/$(DEPDIR)/atari800-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='falcon/main.c' object='falcon/atari800-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o falcon/atari800-main.obj `if test -f 'falcon/main.c'; then $(CYGPATH_W) 'falcon/main.c'; else $(CYGPATH_W) '$(srcdir)/falcon/main.c'; fi` atari800-atari_ps2.o: atari_ps2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_ps2.o -MD -MP -MF $(DEPDIR)/atari800-atari_ps2.Tpo -c -o atari800-atari_ps2.o `test -f 'atari_ps2.c' || echo '$(srcdir)/'`atari_ps2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_ps2.Tpo $(DEPDIR)/atari800-atari_ps2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_ps2.c' object='atari800-atari_ps2.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_ps2.o `test -f 'atari_ps2.c' || echo '$(srcdir)/'`atari_ps2.c atari800-atari_ps2.obj: atari_ps2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_ps2.obj -MD -MP -MF $(DEPDIR)/atari800-atari_ps2.Tpo -c -o atari800-atari_ps2.obj `if test -f 'atari_ps2.c'; then $(CYGPATH_W) 'atari_ps2.c'; else $(CYGPATH_W) '$(srcdir)/atari_ps2.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_ps2.Tpo $(DEPDIR)/atari800-atari_ps2.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_ps2.c' object='atari800-atari_ps2.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_ps2.obj `if test -f 'atari_ps2.c'; then $(CYGPATH_W) 'atari_ps2.c'; else $(CYGPATH_W) '$(srcdir)/atari_ps2.c'; fi` atari800-atari_rpi.o: atari_rpi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_rpi.o -MD -MP -MF $(DEPDIR)/atari800-atari_rpi.Tpo -c -o atari800-atari_rpi.o `test -f 'atari_rpi.c' || echo '$(srcdir)/'`atari_rpi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_rpi.Tpo $(DEPDIR)/atari800-atari_rpi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_rpi.c' object='atari800-atari_rpi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_rpi.o `test -f 'atari_rpi.c' || echo '$(srcdir)/'`atari_rpi.c atari800-atari_rpi.obj: atari_rpi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_rpi.obj -MD -MP -MF $(DEPDIR)/atari800-atari_rpi.Tpo -c -o atari800-atari_rpi.obj `if test -f 'atari_rpi.c'; then $(CYGPATH_W) 'atari_rpi.c'; else $(CYGPATH_W) '$(srcdir)/atari_rpi.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_rpi.Tpo $(DEPDIR)/atari800-atari_rpi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_rpi.c' object='atari800-atari_rpi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_rpi.obj `if test -f 'atari_rpi.c'; then $(CYGPATH_W) 'atari_rpi.c'; else $(CYGPATH_W) '$(srcdir)/atari_rpi.c'; fi` gles2/atari800-video.o: gles2/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gles2/atari800-video.o -MD -MP -MF gles2/$(DEPDIR)/atari800-video.Tpo -c -o gles2/atari800-video.o `test -f 'gles2/video.c' || echo '$(srcdir)/'`gles2/video.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gles2/$(DEPDIR)/atari800-video.Tpo gles2/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gles2/video.c' object='gles2/atari800-video.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gles2/atari800-video.o `test -f 'gles2/video.c' || echo '$(srcdir)/'`gles2/video.c gles2/atari800-video.obj: gles2/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gles2/atari800-video.obj -MD -MP -MF gles2/$(DEPDIR)/atari800-video.Tpo -c -o gles2/atari800-video.obj `if test -f 'gles2/video.c'; then $(CYGPATH_W) 'gles2/video.c'; else $(CYGPATH_W) '$(srcdir)/gles2/video.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gles2/$(DEPDIR)/atari800-video.Tpo gles2/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gles2/video.c' object='gles2/atari800-video.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gles2/atari800-video.obj `if test -f 'gles2/video.c'; then $(CYGPATH_W) 'gles2/video.c'; else $(CYGPATH_W) '$(srcdir)/gles2/video.c'; fi` sdl/atari800-main.o: sdl/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-main.o -MD -MP -MF sdl/$(DEPDIR)/atari800-main.Tpo -c -o sdl/atari800-main.o `test -f 'sdl/main.c' || echo '$(srcdir)/'`sdl/main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-main.Tpo sdl/$(DEPDIR)/atari800-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/main.c' object='sdl/atari800-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-main.o `test -f 'sdl/main.c' || echo '$(srcdir)/'`sdl/main.c sdl/atari800-main.obj: sdl/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-main.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-main.Tpo -c -o sdl/atari800-main.obj `if test -f 'sdl/main.c'; then $(CYGPATH_W) 'sdl/main.c'; else $(CYGPATH_W) '$(srcdir)/sdl/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-main.Tpo sdl/$(DEPDIR)/atari800-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/main.c' object='sdl/atari800-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-main.obj `if test -f 'sdl/main.c'; then $(CYGPATH_W) 'sdl/main.c'; else $(CYGPATH_W) '$(srcdir)/sdl/main.c'; fi` sdl/atari800-input.o: sdl/input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-input.o -MD -MP -MF sdl/$(DEPDIR)/atari800-input.Tpo -c -o sdl/atari800-input.o `test -f 'sdl/input.c' || echo '$(srcdir)/'`sdl/input.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-input.Tpo sdl/$(DEPDIR)/atari800-input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/input.c' object='sdl/atari800-input.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-input.o `test -f 'sdl/input.c' || echo '$(srcdir)/'`sdl/input.c sdl/atari800-input.obj: sdl/input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-input.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-input.Tpo -c -o sdl/atari800-input.obj `if test -f 'sdl/input.c'; then $(CYGPATH_W) 'sdl/input.c'; else $(CYGPATH_W) '$(srcdir)/sdl/input.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-input.Tpo sdl/$(DEPDIR)/atari800-input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/input.c' object='sdl/atari800-input.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-input.obj `if test -f 'sdl/input.c'; then $(CYGPATH_W) 'sdl/input.c'; else $(CYGPATH_W) '$(srcdir)/sdl/input.c'; fi` atari800-atari_x11.o: atari_x11.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_x11.o -MD -MP -MF $(DEPDIR)/atari800-atari_x11.Tpo -c -o atari800-atari_x11.o `test -f 'atari_x11.c' || echo '$(srcdir)/'`atari_x11.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_x11.Tpo $(DEPDIR)/atari800-atari_x11.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_x11.c' object='atari800-atari_x11.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_x11.o `test -f 'atari_x11.c' || echo '$(srcdir)/'`atari_x11.c atari800-atari_x11.obj: atari_x11.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_x11.obj -MD -MP -MF $(DEPDIR)/atari800-atari_x11.Tpo -c -o atari800-atari_x11.obj `if test -f 'atari_x11.c'; then $(CYGPATH_W) 'atari_x11.c'; else $(CYGPATH_W) '$(srcdir)/atari_x11.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_x11.Tpo $(DEPDIR)/atari800-atari_x11.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_x11.c' object='atari800-atari_x11.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_x11.obj `if test -f 'atari_x11.c'; then $(CYGPATH_W) 'atari_x11.c'; else $(CYGPATH_W) '$(srcdir)/atari_x11.c'; fi` javanvm/atari800-main.o: javanvm/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-main.o -MD -MP -MF javanvm/$(DEPDIR)/atari800-main.Tpo -c -o javanvm/atari800-main.o `test -f 'javanvm/main.c' || echo '$(srcdir)/'`javanvm/main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-main.Tpo javanvm/$(DEPDIR)/atari800-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/main.c' object='javanvm/atari800-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-main.o `test -f 'javanvm/main.c' || echo '$(srcdir)/'`javanvm/main.c javanvm/atari800-main.obj: javanvm/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-main.obj -MD -MP -MF javanvm/$(DEPDIR)/atari800-main.Tpo -c -o javanvm/atari800-main.obj `if test -f 'javanvm/main.c'; then $(CYGPATH_W) 'javanvm/main.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-main.Tpo javanvm/$(DEPDIR)/atari800-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/main.c' object='javanvm/atari800-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-main.obj `if test -f 'javanvm/main.c'; then $(CYGPATH_W) 'javanvm/main.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/main.c'; fi` javanvm/atari800-video.o: javanvm/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-video.o -MD -MP -MF javanvm/$(DEPDIR)/atari800-video.Tpo -c -o javanvm/atari800-video.o `test -f 'javanvm/video.c' || echo '$(srcdir)/'`javanvm/video.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-video.Tpo javanvm/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/video.c' object='javanvm/atari800-video.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-video.o `test -f 'javanvm/video.c' || echo '$(srcdir)/'`javanvm/video.c javanvm/atari800-video.obj: javanvm/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-video.obj -MD -MP -MF javanvm/$(DEPDIR)/atari800-video.Tpo -c -o javanvm/atari800-video.obj `if test -f 'javanvm/video.c'; then $(CYGPATH_W) 'javanvm/video.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/video.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-video.Tpo javanvm/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/video.c' object='javanvm/atari800-video.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-video.obj `if test -f 'javanvm/video.c'; then $(CYGPATH_W) 'javanvm/video.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/video.c'; fi` javanvm/atari800-input.o: javanvm/input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-input.o -MD -MP -MF javanvm/$(DEPDIR)/atari800-input.Tpo -c -o javanvm/atari800-input.o `test -f 'javanvm/input.c' || echo '$(srcdir)/'`javanvm/input.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-input.Tpo javanvm/$(DEPDIR)/atari800-input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/input.c' object='javanvm/atari800-input.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-input.o `test -f 'javanvm/input.c' || echo '$(srcdir)/'`javanvm/input.c javanvm/atari800-input.obj: javanvm/input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT javanvm/atari800-input.obj -MD -MP -MF javanvm/$(DEPDIR)/atari800-input.Tpo -c -o javanvm/atari800-input.obj `if test -f 'javanvm/input.c'; then $(CYGPATH_W) 'javanvm/input.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/input.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) javanvm/$(DEPDIR)/atari800-input.Tpo javanvm/$(DEPDIR)/atari800-input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='javanvm/input.c' object='javanvm/atari800-input.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o javanvm/atari800-input.obj `if test -f 'javanvm/input.c'; then $(CYGPATH_W) 'javanvm/input.c'; else $(CYGPATH_W) '$(srcdir)/javanvm/input.c'; fi` atari800-videomode.o: videomode.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-videomode.o -MD -MP -MF $(DEPDIR)/atari800-videomode.Tpo -c -o atari800-videomode.o `test -f 'videomode.c' || echo '$(srcdir)/'`videomode.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-videomode.Tpo $(DEPDIR)/atari800-videomode.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='videomode.c' object='atari800-videomode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-videomode.o `test -f 'videomode.c' || echo '$(srcdir)/'`videomode.c atari800-videomode.obj: videomode.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-videomode.obj -MD -MP -MF $(DEPDIR)/atari800-videomode.Tpo -c -o atari800-videomode.obj `if test -f 'videomode.c'; then $(CYGPATH_W) 'videomode.c'; else $(CYGPATH_W) '$(srcdir)/videomode.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-videomode.Tpo $(DEPDIR)/atari800-videomode.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='videomode.c' object='atari800-videomode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-videomode.obj `if test -f 'videomode.c'; then $(CYGPATH_W) 'videomode.c'; else $(CYGPATH_W) '$(srcdir)/videomode.c'; fi` sdl/atari800-video.o: sdl/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-video.o -MD -MP -MF sdl/$(DEPDIR)/atari800-video.Tpo -c -o sdl/atari800-video.o `test -f 'sdl/video.c' || echo '$(srcdir)/'`sdl/video.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-video.Tpo sdl/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/video.c' object='sdl/atari800-video.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-video.o `test -f 'sdl/video.c' || echo '$(srcdir)/'`sdl/video.c sdl/atari800-video.obj: sdl/video.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-video.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-video.Tpo -c -o sdl/atari800-video.obj `if test -f 'sdl/video.c'; then $(CYGPATH_W) 'sdl/video.c'; else $(CYGPATH_W) '$(srcdir)/sdl/video.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-video.Tpo sdl/$(DEPDIR)/atari800-video.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/video.c' object='sdl/atari800-video.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-video.obj `if test -f 'sdl/video.c'; then $(CYGPATH_W) 'sdl/video.c'; else $(CYGPATH_W) '$(srcdir)/sdl/video.c'; fi` sdl/atari800-video_sw.o: sdl/video_sw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-video_sw.o -MD -MP -MF sdl/$(DEPDIR)/atari800-video_sw.Tpo -c -o sdl/atari800-video_sw.o `test -f 'sdl/video_sw.c' || echo '$(srcdir)/'`sdl/video_sw.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-video_sw.Tpo sdl/$(DEPDIR)/atari800-video_sw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/video_sw.c' object='sdl/atari800-video_sw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-video_sw.o `test -f 'sdl/video_sw.c' || echo '$(srcdir)/'`sdl/video_sw.c sdl/atari800-video_sw.obj: sdl/video_sw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-video_sw.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-video_sw.Tpo -c -o sdl/atari800-video_sw.obj `if test -f 'sdl/video_sw.c'; then $(CYGPATH_W) 'sdl/video_sw.c'; else $(CYGPATH_W) '$(srcdir)/sdl/video_sw.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-video_sw.Tpo sdl/$(DEPDIR)/atari800-video_sw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/video_sw.c' object='sdl/atari800-video_sw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-video_sw.obj `if test -f 'sdl/video_sw.c'; then $(CYGPATH_W) 'sdl/video_sw.c'; else $(CYGPATH_W) '$(srcdir)/sdl/video_sw.c'; fi` sdl/atari800-palette.o: sdl/palette.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-palette.o -MD -MP -MF sdl/$(DEPDIR)/atari800-palette.Tpo -c -o sdl/atari800-palette.o `test -f 'sdl/palette.c' || echo '$(srcdir)/'`sdl/palette.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-palette.Tpo sdl/$(DEPDIR)/atari800-palette.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/palette.c' object='sdl/atari800-palette.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-palette.o `test -f 'sdl/palette.c' || echo '$(srcdir)/'`sdl/palette.c sdl/atari800-palette.obj: sdl/palette.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-palette.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-palette.Tpo -c -o sdl/atari800-palette.obj `if test -f 'sdl/palette.c'; then $(CYGPATH_W) 'sdl/palette.c'; else $(CYGPATH_W) '$(srcdir)/sdl/palette.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-palette.Tpo sdl/$(DEPDIR)/atari800-palette.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/palette.c' object='sdl/atari800-palette.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-palette.obj `if test -f 'sdl/palette.c'; then $(CYGPATH_W) 'sdl/palette.c'; else $(CYGPATH_W) '$(srcdir)/sdl/palette.c'; fi` atari800-pbi_proto80.o: pbi_proto80.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_proto80.o -MD -MP -MF $(DEPDIR)/atari800-pbi_proto80.Tpo -c -o atari800-pbi_proto80.o `test -f 'pbi_proto80.c' || echo '$(srcdir)/'`pbi_proto80.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_proto80.Tpo $(DEPDIR)/atari800-pbi_proto80.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_proto80.c' object='atari800-pbi_proto80.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_proto80.o `test -f 'pbi_proto80.c' || echo '$(srcdir)/'`pbi_proto80.c atari800-pbi_proto80.obj: pbi_proto80.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_proto80.obj -MD -MP -MF $(DEPDIR)/atari800-pbi_proto80.Tpo -c -o atari800-pbi_proto80.obj `if test -f 'pbi_proto80.c'; then $(CYGPATH_W) 'pbi_proto80.c'; else $(CYGPATH_W) '$(srcdir)/pbi_proto80.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_proto80.Tpo $(DEPDIR)/atari800-pbi_proto80.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_proto80.c' object='atari800-pbi_proto80.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_proto80.obj `if test -f 'pbi_proto80.c'; then $(CYGPATH_W) 'pbi_proto80.c'; else $(CYGPATH_W) '$(srcdir)/pbi_proto80.c'; fi` atari800-af80.o: af80.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-af80.o -MD -MP -MF $(DEPDIR)/atari800-af80.Tpo -c -o atari800-af80.o `test -f 'af80.c' || echo '$(srcdir)/'`af80.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-af80.Tpo $(DEPDIR)/atari800-af80.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='af80.c' object='atari800-af80.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-af80.o `test -f 'af80.c' || echo '$(srcdir)/'`af80.c atari800-af80.obj: af80.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-af80.obj -MD -MP -MF $(DEPDIR)/atari800-af80.Tpo -c -o atari800-af80.obj `if test -f 'af80.c'; then $(CYGPATH_W) 'af80.c'; else $(CYGPATH_W) '$(srcdir)/af80.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-af80.Tpo $(DEPDIR)/atari800-af80.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='af80.c' object='atari800-af80.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-af80.obj `if test -f 'af80.c'; then $(CYGPATH_W) 'af80.c'; else $(CYGPATH_W) '$(srcdir)/af80.c'; fi` atari800-bit3.o: bit3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-bit3.o -MD -MP -MF $(DEPDIR)/atari800-bit3.Tpo -c -o atari800-bit3.o `test -f 'bit3.c' || echo '$(srcdir)/'`bit3.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-bit3.Tpo $(DEPDIR)/atari800-bit3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bit3.c' object='atari800-bit3.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-bit3.o `test -f 'bit3.c' || echo '$(srcdir)/'`bit3.c atari800-bit3.obj: bit3.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-bit3.obj -MD -MP -MF $(DEPDIR)/atari800-bit3.Tpo -c -o atari800-bit3.obj `if test -f 'bit3.c'; then $(CYGPATH_W) 'bit3.c'; else $(CYGPATH_W) '$(srcdir)/bit3.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-bit3.Tpo $(DEPDIR)/atari800-bit3.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bit3.c' object='atari800-bit3.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-bit3.obj `if test -f 'bit3.c'; then $(CYGPATH_W) 'bit3.c'; else $(CYGPATH_W) '$(srcdir)/bit3.c'; fi` dos/atari800-atari_vga.o: dos/atari_vga.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-atari_vga.o -MD -MP -MF dos/$(DEPDIR)/atari800-atari_vga.Tpo -c -o dos/atari800-atari_vga.o `test -f 'dos/atari_vga.c' || echo '$(srcdir)/'`dos/atari_vga.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-atari_vga.Tpo dos/$(DEPDIR)/atari800-atari_vga.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/atari_vga.c' object='dos/atari800-atari_vga.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-atari_vga.o `test -f 'dos/atari_vga.c' || echo '$(srcdir)/'`dos/atari_vga.c dos/atari800-atari_vga.obj: dos/atari_vga.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-atari_vga.obj -MD -MP -MF dos/$(DEPDIR)/atari800-atari_vga.Tpo -c -o dos/atari800-atari_vga.obj `if test -f 'dos/atari_vga.c'; then $(CYGPATH_W) 'dos/atari_vga.c'; else $(CYGPATH_W) '$(srcdir)/dos/atari_vga.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-atari_vga.Tpo dos/$(DEPDIR)/atari800-atari_vga.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/atari_vga.c' object='dos/atari800-atari_vga.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-atari_vga.obj `if test -f 'dos/atari_vga.c'; then $(CYGPATH_W) 'dos/atari_vga.c'; else $(CYGPATH_W) '$(srcdir)/dos/atari_vga.c'; fi` dos/atari800-vga_gfx.o: dos/vga_gfx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-vga_gfx.o -MD -MP -MF dos/$(DEPDIR)/atari800-vga_gfx.Tpo -c -o dos/atari800-vga_gfx.o `test -f 'dos/vga_gfx.c' || echo '$(srcdir)/'`dos/vga_gfx.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-vga_gfx.Tpo dos/$(DEPDIR)/atari800-vga_gfx.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/vga_gfx.c' object='dos/atari800-vga_gfx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-vga_gfx.o `test -f 'dos/vga_gfx.c' || echo '$(srcdir)/'`dos/vga_gfx.c dos/atari800-vga_gfx.obj: dos/vga_gfx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dos/atari800-vga_gfx.obj -MD -MP -MF dos/$(DEPDIR)/atari800-vga_gfx.Tpo -c -o dos/atari800-vga_gfx.obj `if test -f 'dos/vga_gfx.c'; then $(CYGPATH_W) 'dos/vga_gfx.c'; else $(CYGPATH_W) '$(srcdir)/dos/vga_gfx.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) dos/$(DEPDIR)/atari800-vga_gfx.Tpo dos/$(DEPDIR)/atari800-vga_gfx.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dos/vga_gfx.c' object='dos/atari800-vga_gfx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dos/atari800-vga_gfx.obj `if test -f 'dos/vga_gfx.c'; then $(CYGPATH_W) 'dos/vga_gfx.c'; else $(CYGPATH_W) '$(srcdir)/dos/vga_gfx.c'; fi` atari800-atari_curses.o: atari_curses.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_curses.o -MD -MP -MF $(DEPDIR)/atari800-atari_curses.Tpo -c -o atari800-atari_curses.o `test -f 'atari_curses.c' || echo '$(srcdir)/'`atari_curses.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_curses.Tpo $(DEPDIR)/atari800-atari_curses.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_curses.c' object='atari800-atari_curses.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_curses.o `test -f 'atari_curses.c' || echo '$(srcdir)/'`atari_curses.c atari800-atari_curses.obj: atari_curses.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_curses.obj -MD -MP -MF $(DEPDIR)/atari800-atari_curses.Tpo -c -o atari800-atari_curses.obj `if test -f 'atari_curses.c'; then $(CYGPATH_W) 'atari_curses.c'; else $(CYGPATH_W) '$(srcdir)/atari_curses.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_curses.Tpo $(DEPDIR)/atari800-atari_curses.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_curses.c' object='atari800-atari_curses.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_curses.obj `if test -f 'atari_curses.c'; then $(CYGPATH_W) 'atari_curses.c'; else $(CYGPATH_W) '$(srcdir)/atari_curses.c'; fi` atari800-atari_basic.o: atari_basic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_basic.o -MD -MP -MF $(DEPDIR)/atari800-atari_basic.Tpo -c -o atari800-atari_basic.o `test -f 'atari_basic.c' || echo '$(srcdir)/'`atari_basic.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_basic.Tpo $(DEPDIR)/atari800-atari_basic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_basic.c' object='atari800-atari_basic.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_basic.o `test -f 'atari_basic.c' || echo '$(srcdir)/'`atari_basic.c atari800-atari_basic.obj: atari_basic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-atari_basic.obj -MD -MP -MF $(DEPDIR)/atari800-atari_basic.Tpo -c -o atari800-atari_basic.obj `if test -f 'atari_basic.c'; then $(CYGPATH_W) 'atari_basic.c'; else $(CYGPATH_W) '$(srcdir)/atari_basic.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-atari_basic.Tpo $(DEPDIR)/atari800-atari_basic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_basic.c' object='atari800-atari_basic.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-atari_basic.obj `if test -f 'atari_basic.c'; then $(CYGPATH_W) 'atari_basic.c'; else $(CYGPATH_W) '$(srcdir)/atari_basic.c'; fi` atari800-input.o: input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-input.o -MD -MP -MF $(DEPDIR)/atari800-input.Tpo -c -o atari800-input.o `test -f 'input.c' || echo '$(srcdir)/'`input.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-input.Tpo $(DEPDIR)/atari800-input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='input.c' object='atari800-input.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-input.o `test -f 'input.c' || echo '$(srcdir)/'`input.c atari800-input.obj: input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-input.obj -MD -MP -MF $(DEPDIR)/atari800-input.Tpo -c -o atari800-input.obj `if test -f 'input.c'; then $(CYGPATH_W) 'input.c'; else $(CYGPATH_W) '$(srcdir)/input.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-input.Tpo $(DEPDIR)/atari800-input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='input.c' object='atari800-input.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-input.obj `if test -f 'input.c'; then $(CYGPATH_W) 'input.c'; else $(CYGPATH_W) '$(srcdir)/input.c'; fi` atari800-statesav.o: statesav.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-statesav.o -MD -MP -MF $(DEPDIR)/atari800-statesav.Tpo -c -o atari800-statesav.o `test -f 'statesav.c' || echo '$(srcdir)/'`statesav.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-statesav.Tpo $(DEPDIR)/atari800-statesav.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='statesav.c' object='atari800-statesav.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-statesav.o `test -f 'statesav.c' || echo '$(srcdir)/'`statesav.c atari800-statesav.obj: statesav.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-statesav.obj -MD -MP -MF $(DEPDIR)/atari800-statesav.Tpo -c -o atari800-statesav.obj `if test -f 'statesav.c'; then $(CYGPATH_W) 'statesav.c'; else $(CYGPATH_W) '$(srcdir)/statesav.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-statesav.Tpo $(DEPDIR)/atari800-statesav.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='statesav.c' object='atari800-statesav.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-statesav.obj `if test -f 'statesav.c'; then $(CYGPATH_W) 'statesav.c'; else $(CYGPATH_W) '$(srcdir)/statesav.c'; fi` atari800-ui_basic.o: ui_basic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-ui_basic.o -MD -MP -MF $(DEPDIR)/atari800-ui_basic.Tpo -c -o atari800-ui_basic.o `test -f 'ui_basic.c' || echo '$(srcdir)/'`ui_basic.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-ui_basic.Tpo $(DEPDIR)/atari800-ui_basic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ui_basic.c' object='atari800-ui_basic.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-ui_basic.o `test -f 'ui_basic.c' || echo '$(srcdir)/'`ui_basic.c atari800-ui_basic.obj: ui_basic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-ui_basic.obj -MD -MP -MF $(DEPDIR)/atari800-ui_basic.Tpo -c -o atari800-ui_basic.obj `if test -f 'ui_basic.c'; then $(CYGPATH_W) 'ui_basic.c'; else $(CYGPATH_W) '$(srcdir)/ui_basic.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-ui_basic.Tpo $(DEPDIR)/atari800-ui_basic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ui_basic.c' object='atari800-ui_basic.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-ui_basic.obj `if test -f 'ui_basic.c'; then $(CYGPATH_W) 'ui_basic.c'; else $(CYGPATH_W) '$(srcdir)/ui_basic.c'; fi` atari800-ui.o: ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-ui.o -MD -MP -MF $(DEPDIR)/atari800-ui.Tpo -c -o atari800-ui.o `test -f 'ui.c' || echo '$(srcdir)/'`ui.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-ui.Tpo $(DEPDIR)/atari800-ui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ui.c' object='atari800-ui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-ui.o `test -f 'ui.c' || echo '$(srcdir)/'`ui.c atari800-ui.obj: ui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-ui.obj -MD -MP -MF $(DEPDIR)/atari800-ui.Tpo -c -o atari800-ui.obj `if test -f 'ui.c'; then $(CYGPATH_W) 'ui.c'; else $(CYGPATH_W) '$(srcdir)/ui.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-ui.Tpo $(DEPDIR)/atari800-ui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ui.c' object='atari800-ui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-ui.obj `if test -f 'ui.c'; then $(CYGPATH_W) 'ui.c'; else $(CYGPATH_W) '$(srcdir)/ui.c'; fi` atari800-artifact.o: artifact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-artifact.o -MD -MP -MF $(DEPDIR)/atari800-artifact.Tpo -c -o atari800-artifact.o `test -f 'artifact.c' || echo '$(srcdir)/'`artifact.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-artifact.Tpo $(DEPDIR)/atari800-artifact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='artifact.c' object='atari800-artifact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-artifact.o `test -f 'artifact.c' || echo '$(srcdir)/'`artifact.c atari800-artifact.obj: artifact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-artifact.obj -MD -MP -MF $(DEPDIR)/atari800-artifact.Tpo -c -o atari800-artifact.obj `if test -f 'artifact.c'; then $(CYGPATH_W) 'artifact.c'; else $(CYGPATH_W) '$(srcdir)/artifact.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-artifact.Tpo $(DEPDIR)/atari800-artifact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='artifact.c' object='atari800-artifact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-artifact.obj `if test -f 'artifact.c'; then $(CYGPATH_W) 'artifact.c'; else $(CYGPATH_W) '$(srcdir)/artifact.c'; fi` atari800-colours.o: colours.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours.o -MD -MP -MF $(DEPDIR)/atari800-colours.Tpo -c -o atari800-colours.o `test -f 'colours.c' || echo '$(srcdir)/'`colours.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours.Tpo $(DEPDIR)/atari800-colours.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours.c' object='atari800-colours.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours.o `test -f 'colours.c' || echo '$(srcdir)/'`colours.c atari800-colours.obj: colours.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours.obj -MD -MP -MF $(DEPDIR)/atari800-colours.Tpo -c -o atari800-colours.obj `if test -f 'colours.c'; then $(CYGPATH_W) 'colours.c'; else $(CYGPATH_W) '$(srcdir)/colours.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours.Tpo $(DEPDIR)/atari800-colours.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours.c' object='atari800-colours.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours.obj `if test -f 'colours.c'; then $(CYGPATH_W) 'colours.c'; else $(CYGPATH_W) '$(srcdir)/colours.c'; fi` atari800-colours_ntsc.o: colours_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours_ntsc.o -MD -MP -MF $(DEPDIR)/atari800-colours_ntsc.Tpo -c -o atari800-colours_ntsc.o `test -f 'colours_ntsc.c' || echo '$(srcdir)/'`colours_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours_ntsc.Tpo $(DEPDIR)/atari800-colours_ntsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours_ntsc.c' object='atari800-colours_ntsc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours_ntsc.o `test -f 'colours_ntsc.c' || echo '$(srcdir)/'`colours_ntsc.c atari800-colours_ntsc.obj: colours_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours_ntsc.obj -MD -MP -MF $(DEPDIR)/atari800-colours_ntsc.Tpo -c -o atari800-colours_ntsc.obj `if test -f 'colours_ntsc.c'; then $(CYGPATH_W) 'colours_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/colours_ntsc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours_ntsc.Tpo $(DEPDIR)/atari800-colours_ntsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours_ntsc.c' object='atari800-colours_ntsc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours_ntsc.obj `if test -f 'colours_ntsc.c'; then $(CYGPATH_W) 'colours_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/colours_ntsc.c'; fi` atari800-colours_pal.o: colours_pal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours_pal.o -MD -MP -MF $(DEPDIR)/atari800-colours_pal.Tpo -c -o atari800-colours_pal.o `test -f 'colours_pal.c' || echo '$(srcdir)/'`colours_pal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours_pal.Tpo $(DEPDIR)/atari800-colours_pal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours_pal.c' object='atari800-colours_pal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours_pal.o `test -f 'colours_pal.c' || echo '$(srcdir)/'`colours_pal.c atari800-colours_pal.obj: colours_pal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours_pal.obj -MD -MP -MF $(DEPDIR)/atari800-colours_pal.Tpo -c -o atari800-colours_pal.obj `if test -f 'colours_pal.c'; then $(CYGPATH_W) 'colours_pal.c'; else $(CYGPATH_W) '$(srcdir)/colours_pal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours_pal.Tpo $(DEPDIR)/atari800-colours_pal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours_pal.c' object='atari800-colours_pal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours_pal.obj `if test -f 'colours_pal.c'; then $(CYGPATH_W) 'colours_pal.c'; else $(CYGPATH_W) '$(srcdir)/colours_pal.c'; fi` atari800-colours_external.o: colours_external.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours_external.o -MD -MP -MF $(DEPDIR)/atari800-colours_external.Tpo -c -o atari800-colours_external.o `test -f 'colours_external.c' || echo '$(srcdir)/'`colours_external.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours_external.Tpo $(DEPDIR)/atari800-colours_external.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours_external.c' object='atari800-colours_external.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours_external.o `test -f 'colours_external.c' || echo '$(srcdir)/'`colours_external.c atari800-colours_external.obj: colours_external.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-colours_external.obj -MD -MP -MF $(DEPDIR)/atari800-colours_external.Tpo -c -o atari800-colours_external.obj `if test -f 'colours_external.c'; then $(CYGPATH_W) 'colours_external.c'; else $(CYGPATH_W) '$(srcdir)/colours_external.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-colours_external.Tpo $(DEPDIR)/atari800-colours_external.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colours_external.c' object='atari800-colours_external.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-colours_external.obj `if test -f 'colours_external.c'; then $(CYGPATH_W) 'colours_external.c'; else $(CYGPATH_W) '$(srcdir)/colours_external.c'; fi` atari800-screen.o: screen.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-screen.o -MD -MP -MF $(DEPDIR)/atari800-screen.Tpo -c -o atari800-screen.o `test -f 'screen.c' || echo '$(srcdir)/'`screen.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-screen.Tpo $(DEPDIR)/atari800-screen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='screen.c' object='atari800-screen.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-screen.o `test -f 'screen.c' || echo '$(srcdir)/'`screen.c atari800-screen.obj: screen.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-screen.obj -MD -MP -MF $(DEPDIR)/atari800-screen.Tpo -c -o atari800-screen.obj `if test -f 'screen.c'; then $(CYGPATH_W) 'screen.c'; else $(CYGPATH_W) '$(srcdir)/screen.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-screen.Tpo $(DEPDIR)/atari800-screen.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='screen.c' object='atari800-screen.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-screen.obj `if test -f 'screen.c'; then $(CYGPATH_W) 'screen.c'; else $(CYGPATH_W) '$(srcdir)/screen.c'; fi` codecs/atari800-image.o: codecs/image.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-image.o -MD -MP -MF codecs/$(DEPDIR)/atari800-image.Tpo -c -o codecs/atari800-image.o `test -f 'codecs/image.c' || echo '$(srcdir)/'`codecs/image.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-image.Tpo codecs/$(DEPDIR)/atari800-image.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/image.c' object='codecs/atari800-image.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-image.o `test -f 'codecs/image.c' || echo '$(srcdir)/'`codecs/image.c codecs/atari800-image.obj: codecs/image.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-image.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-image.Tpo -c -o codecs/atari800-image.obj `if test -f 'codecs/image.c'; then $(CYGPATH_W) 'codecs/image.c'; else $(CYGPATH_W) '$(srcdir)/codecs/image.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-image.Tpo codecs/$(DEPDIR)/atari800-image.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/image.c' object='codecs/atari800-image.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-image.obj `if test -f 'codecs/image.c'; then $(CYGPATH_W) 'codecs/image.c'; else $(CYGPATH_W) '$(srcdir)/codecs/image.c'; fi` codecs/atari800-image_pcx.o: codecs/image_pcx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-image_pcx.o -MD -MP -MF codecs/$(DEPDIR)/atari800-image_pcx.Tpo -c -o codecs/atari800-image_pcx.o `test -f 'codecs/image_pcx.c' || echo '$(srcdir)/'`codecs/image_pcx.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-image_pcx.Tpo codecs/$(DEPDIR)/atari800-image_pcx.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/image_pcx.c' object='codecs/atari800-image_pcx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-image_pcx.o `test -f 'codecs/image_pcx.c' || echo '$(srcdir)/'`codecs/image_pcx.c codecs/atari800-image_pcx.obj: codecs/image_pcx.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-image_pcx.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-image_pcx.Tpo -c -o codecs/atari800-image_pcx.obj `if test -f 'codecs/image_pcx.c'; then $(CYGPATH_W) 'codecs/image_pcx.c'; else $(CYGPATH_W) '$(srcdir)/codecs/image_pcx.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-image_pcx.Tpo codecs/$(DEPDIR)/atari800-image_pcx.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/image_pcx.c' object='codecs/atari800-image_pcx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-image_pcx.obj `if test -f 'codecs/image_pcx.c'; then $(CYGPATH_W) 'codecs/image_pcx.c'; else $(CYGPATH_W) '$(srcdir)/codecs/image_pcx.c'; fi` codecs/atari800-image_png.o: codecs/image_png.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-image_png.o -MD -MP -MF codecs/$(DEPDIR)/atari800-image_png.Tpo -c -o codecs/atari800-image_png.o `test -f 'codecs/image_png.c' || echo '$(srcdir)/'`codecs/image_png.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-image_png.Tpo codecs/$(DEPDIR)/atari800-image_png.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/image_png.c' object='codecs/atari800-image_png.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-image_png.o `test -f 'codecs/image_png.c' || echo '$(srcdir)/'`codecs/image_png.c codecs/atari800-image_png.obj: codecs/image_png.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT codecs/atari800-image_png.obj -MD -MP -MF codecs/$(DEPDIR)/atari800-image_png.Tpo -c -o codecs/atari800-image_png.obj `if test -f 'codecs/image_png.c'; then $(CYGPATH_W) 'codecs/image_png.c'; else $(CYGPATH_W) '$(srcdir)/codecs/image_png.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) codecs/$(DEPDIR)/atari800-image_png.Tpo codecs/$(DEPDIR)/atari800-image_png.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codecs/image_png.c' object='codecs/atari800-image_png.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o codecs/atari800-image_png.obj `if test -f 'codecs/image_png.c'; then $(CYGPATH_W) 'codecs/image_png.c'; else $(CYGPATH_W) '$(srcdir)/codecs/image_png.c'; fi` atari800-cycle_map.o: cycle_map.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cycle_map.o -MD -MP -MF $(DEPDIR)/atari800-cycle_map.Tpo -c -o atari800-cycle_map.o `test -f 'cycle_map.c' || echo '$(srcdir)/'`cycle_map.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cycle_map.Tpo $(DEPDIR)/atari800-cycle_map.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cycle_map.c' object='atari800-cycle_map.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cycle_map.o `test -f 'cycle_map.c' || echo '$(srcdir)/'`cycle_map.c atari800-cycle_map.obj: cycle_map.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-cycle_map.obj -MD -MP -MF $(DEPDIR)/atari800-cycle_map.Tpo -c -o atari800-cycle_map.obj `if test -f 'cycle_map.c'; then $(CYGPATH_W) 'cycle_map.c'; else $(CYGPATH_W) '$(srcdir)/cycle_map.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-cycle_map.Tpo $(DEPDIR)/atari800-cycle_map.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cycle_map.c' object='atari800-cycle_map.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-cycle_map.obj `if test -f 'cycle_map.c'; then $(CYGPATH_W) 'cycle_map.c'; else $(CYGPATH_W) '$(srcdir)/cycle_map.c'; fi` roms/atari800-altirraos_800.o: roms/altirraos_800.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirraos_800.o -MD -MP -MF roms/$(DEPDIR)/atari800-altirraos_800.Tpo -c -o roms/atari800-altirraos_800.o `test -f 'roms/altirraos_800.c' || echo '$(srcdir)/'`roms/altirraos_800.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirraos_800.Tpo roms/$(DEPDIR)/atari800-altirraos_800.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirraos_800.c' object='roms/atari800-altirraos_800.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirraos_800.o `test -f 'roms/altirraos_800.c' || echo '$(srcdir)/'`roms/altirraos_800.c roms/atari800-altirraos_800.obj: roms/altirraos_800.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirraos_800.obj -MD -MP -MF roms/$(DEPDIR)/atari800-altirraos_800.Tpo -c -o roms/atari800-altirraos_800.obj `if test -f 'roms/altirraos_800.c'; then $(CYGPATH_W) 'roms/altirraos_800.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirraos_800.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirraos_800.Tpo roms/$(DEPDIR)/atari800-altirraos_800.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirraos_800.c' object='roms/atari800-altirraos_800.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirraos_800.obj `if test -f 'roms/altirraos_800.c'; then $(CYGPATH_W) 'roms/altirraos_800.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirraos_800.c'; fi` roms/atari800-altirraos_xl.o: roms/altirraos_xl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirraos_xl.o -MD -MP -MF roms/$(DEPDIR)/atari800-altirraos_xl.Tpo -c -o roms/atari800-altirraos_xl.o `test -f 'roms/altirraos_xl.c' || echo '$(srcdir)/'`roms/altirraos_xl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirraos_xl.Tpo roms/$(DEPDIR)/atari800-altirraos_xl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirraos_xl.c' object='roms/atari800-altirraos_xl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirraos_xl.o `test -f 'roms/altirraos_xl.c' || echo '$(srcdir)/'`roms/altirraos_xl.c roms/atari800-altirraos_xl.obj: roms/altirraos_xl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirraos_xl.obj -MD -MP -MF roms/$(DEPDIR)/atari800-altirraos_xl.Tpo -c -o roms/atari800-altirraos_xl.obj `if test -f 'roms/altirraos_xl.c'; then $(CYGPATH_W) 'roms/altirraos_xl.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirraos_xl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirraos_xl.Tpo roms/$(DEPDIR)/atari800-altirraos_xl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirraos_xl.c' object='roms/atari800-altirraos_xl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirraos_xl.obj `if test -f 'roms/altirraos_xl.c'; then $(CYGPATH_W) 'roms/altirraos_xl.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirraos_xl.c'; fi` roms/atari800-altirra_basic.o: roms/altirra_basic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirra_basic.o -MD -MP -MF roms/$(DEPDIR)/atari800-altirra_basic.Tpo -c -o roms/atari800-altirra_basic.o `test -f 'roms/altirra_basic.c' || echo '$(srcdir)/'`roms/altirra_basic.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirra_basic.Tpo roms/$(DEPDIR)/atari800-altirra_basic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirra_basic.c' object='roms/atari800-altirra_basic.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirra_basic.o `test -f 'roms/altirra_basic.c' || echo '$(srcdir)/'`roms/altirra_basic.c roms/atari800-altirra_basic.obj: roms/altirra_basic.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT roms/atari800-altirra_basic.obj -MD -MP -MF roms/$(DEPDIR)/atari800-altirra_basic.Tpo -c -o roms/atari800-altirra_basic.obj `if test -f 'roms/altirra_basic.c'; then $(CYGPATH_W) 'roms/altirra_basic.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirra_basic.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) roms/$(DEPDIR)/atari800-altirra_basic.Tpo roms/$(DEPDIR)/atari800-altirra_basic.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roms/altirra_basic.c' object='roms/atari800-altirra_basic.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o roms/atari800-altirra_basic.obj `if test -f 'roms/altirra_basic.c'; then $(CYGPATH_W) 'roms/altirra_basic.c'; else $(CYGPATH_W) '$(srcdir)/roms/altirra_basic.c'; fi` atari800-pbi_mio.o: pbi_mio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_mio.o -MD -MP -MF $(DEPDIR)/atari800-pbi_mio.Tpo -c -o atari800-pbi_mio.o `test -f 'pbi_mio.c' || echo '$(srcdir)/'`pbi_mio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_mio.Tpo $(DEPDIR)/atari800-pbi_mio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_mio.c' object='atari800-pbi_mio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_mio.o `test -f 'pbi_mio.c' || echo '$(srcdir)/'`pbi_mio.c atari800-pbi_mio.obj: pbi_mio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_mio.obj -MD -MP -MF $(DEPDIR)/atari800-pbi_mio.Tpo -c -o atari800-pbi_mio.obj `if test -f 'pbi_mio.c'; then $(CYGPATH_W) 'pbi_mio.c'; else $(CYGPATH_W) '$(srcdir)/pbi_mio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_mio.Tpo $(DEPDIR)/atari800-pbi_mio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_mio.c' object='atari800-pbi_mio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_mio.obj `if test -f 'pbi_mio.c'; then $(CYGPATH_W) 'pbi_mio.c'; else $(CYGPATH_W) '$(srcdir)/pbi_mio.c'; fi` atari800-pbi_bb.o: pbi_bb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_bb.o -MD -MP -MF $(DEPDIR)/atari800-pbi_bb.Tpo -c -o atari800-pbi_bb.o `test -f 'pbi_bb.c' || echo '$(srcdir)/'`pbi_bb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_bb.Tpo $(DEPDIR)/atari800-pbi_bb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_bb.c' object='atari800-pbi_bb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_bb.o `test -f 'pbi_bb.c' || echo '$(srcdir)/'`pbi_bb.c atari800-pbi_bb.obj: pbi_bb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_bb.obj -MD -MP -MF $(DEPDIR)/atari800-pbi_bb.Tpo -c -o atari800-pbi_bb.obj `if test -f 'pbi_bb.c'; then $(CYGPATH_W) 'pbi_bb.c'; else $(CYGPATH_W) '$(srcdir)/pbi_bb.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_bb.Tpo $(DEPDIR)/atari800-pbi_bb.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_bb.c' object='atari800-pbi_bb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_bb.obj `if test -f 'pbi_bb.c'; then $(CYGPATH_W) 'pbi_bb.c'; else $(CYGPATH_W) '$(srcdir)/pbi_bb.c'; fi` atari800-pbi_scsi.o: pbi_scsi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_scsi.o -MD -MP -MF $(DEPDIR)/atari800-pbi_scsi.Tpo -c -o atari800-pbi_scsi.o `test -f 'pbi_scsi.c' || echo '$(srcdir)/'`pbi_scsi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_scsi.Tpo $(DEPDIR)/atari800-pbi_scsi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_scsi.c' object='atari800-pbi_scsi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_scsi.o `test -f 'pbi_scsi.c' || echo '$(srcdir)/'`pbi_scsi.c atari800-pbi_scsi.obj: pbi_scsi.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_scsi.obj -MD -MP -MF $(DEPDIR)/atari800-pbi_scsi.Tpo -c -o atari800-pbi_scsi.obj `if test -f 'pbi_scsi.c'; then $(CYGPATH_W) 'pbi_scsi.c'; else $(CYGPATH_W) '$(srcdir)/pbi_scsi.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_scsi.Tpo $(DEPDIR)/atari800-pbi_scsi.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_scsi.c' object='atari800-pbi_scsi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_scsi.obj `if test -f 'pbi_scsi.c'; then $(CYGPATH_W) 'pbi_scsi.c'; else $(CYGPATH_W) '$(srcdir)/pbi_scsi.c'; fi` atari800-pbi_xld.o: pbi_xld.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_xld.o -MD -MP -MF $(DEPDIR)/atari800-pbi_xld.Tpo -c -o atari800-pbi_xld.o `test -f 'pbi_xld.c' || echo '$(srcdir)/'`pbi_xld.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_xld.Tpo $(DEPDIR)/atari800-pbi_xld.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_xld.c' object='atari800-pbi_xld.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_xld.o `test -f 'pbi_xld.c' || echo '$(srcdir)/'`pbi_xld.c atari800-pbi_xld.obj: pbi_xld.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pbi_xld.obj -MD -MP -MF $(DEPDIR)/atari800-pbi_xld.Tpo -c -o atari800-pbi_xld.obj `if test -f 'pbi_xld.c'; then $(CYGPATH_W) 'pbi_xld.c'; else $(CYGPATH_W) '$(srcdir)/pbi_xld.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pbi_xld.Tpo $(DEPDIR)/atari800-pbi_xld.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pbi_xld.c' object='atari800-pbi_xld.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pbi_xld.obj `if test -f 'pbi_xld.c'; then $(CYGPATH_W) 'pbi_xld.c'; else $(CYGPATH_W) '$(srcdir)/pbi_xld.c'; fi` atari800-voicebox.o: voicebox.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-voicebox.o -MD -MP -MF $(DEPDIR)/atari800-voicebox.Tpo -c -o atari800-voicebox.o `test -f 'voicebox.c' || echo '$(srcdir)/'`voicebox.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-voicebox.Tpo $(DEPDIR)/atari800-voicebox.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='voicebox.c' object='atari800-voicebox.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-voicebox.o `test -f 'voicebox.c' || echo '$(srcdir)/'`voicebox.c atari800-voicebox.obj: voicebox.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-voicebox.obj -MD -MP -MF $(DEPDIR)/atari800-voicebox.Tpo -c -o atari800-voicebox.obj `if test -f 'voicebox.c'; then $(CYGPATH_W) 'voicebox.c'; else $(CYGPATH_W) '$(srcdir)/voicebox.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-voicebox.Tpo $(DEPDIR)/atari800-voicebox.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='voicebox.c' object='atari800-voicebox.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-voicebox.obj `if test -f 'voicebox.c'; then $(CYGPATH_W) 'voicebox.c'; else $(CYGPATH_W) '$(srcdir)/voicebox.c'; fi` atari800-votrax.o: votrax.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-votrax.o -MD -MP -MF $(DEPDIR)/atari800-votrax.Tpo -c -o atari800-votrax.o `test -f 'votrax.c' || echo '$(srcdir)/'`votrax.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-votrax.Tpo $(DEPDIR)/atari800-votrax.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='votrax.c' object='atari800-votrax.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-votrax.o `test -f 'votrax.c' || echo '$(srcdir)/'`votrax.c atari800-votrax.obj: votrax.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-votrax.obj -MD -MP -MF $(DEPDIR)/atari800-votrax.Tpo -c -o atari800-votrax.obj `if test -f 'votrax.c'; then $(CYGPATH_W) 'votrax.c'; else $(CYGPATH_W) '$(srcdir)/votrax.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-votrax.Tpo $(DEPDIR)/atari800-votrax.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='votrax.c' object='atari800-votrax.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-votrax.obj `if test -f 'votrax.c'; then $(CYGPATH_W) 'votrax.c'; else $(CYGPATH_W) '$(srcdir)/votrax.c'; fi` atari800-votraxsnd.o: votraxsnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-votraxsnd.o -MD -MP -MF $(DEPDIR)/atari800-votraxsnd.Tpo -c -o atari800-votraxsnd.o `test -f 'votraxsnd.c' || echo '$(srcdir)/'`votraxsnd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-votraxsnd.Tpo $(DEPDIR)/atari800-votraxsnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='votraxsnd.c' object='atari800-votraxsnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-votraxsnd.o `test -f 'votraxsnd.c' || echo '$(srcdir)/'`votraxsnd.c atari800-votraxsnd.obj: votraxsnd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-votraxsnd.obj -MD -MP -MF $(DEPDIR)/atari800-votraxsnd.Tpo -c -o atari800-votraxsnd.obj `if test -f 'votraxsnd.c'; then $(CYGPATH_W) 'votraxsnd.c'; else $(CYGPATH_W) '$(srcdir)/votraxsnd.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-votraxsnd.Tpo $(DEPDIR)/atari800-votraxsnd.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='votraxsnd.c' object='atari800-votraxsnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-votraxsnd.obj `if test -f 'votraxsnd.c'; then $(CYGPATH_W) 'votraxsnd.c'; else $(CYGPATH_W) '$(srcdir)/votraxsnd.c'; fi` atari800-ide.o: ide.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-ide.o -MD -MP -MF $(DEPDIR)/atari800-ide.Tpo -c -o atari800-ide.o `test -f 'ide.c' || echo '$(srcdir)/'`ide.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-ide.Tpo $(DEPDIR)/atari800-ide.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ide.c' object='atari800-ide.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-ide.o `test -f 'ide.c' || echo '$(srcdir)/'`ide.c atari800-ide.obj: ide.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-ide.obj -MD -MP -MF $(DEPDIR)/atari800-ide.Tpo -c -o atari800-ide.obj `if test -f 'ide.c'; then $(CYGPATH_W) 'ide.c'; else $(CYGPATH_W) '$(srcdir)/ide.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-ide.Tpo $(DEPDIR)/atari800-ide.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ide.c' object='atari800-ide.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-ide.obj `if test -f 'ide.c'; then $(CYGPATH_W) 'ide.c'; else $(CYGPATH_W) '$(srcdir)/ide.c'; fi` sdl/atari800-video_gl.o: sdl/video_gl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-video_gl.o -MD -MP -MF sdl/$(DEPDIR)/atari800-video_gl.Tpo -c -o sdl/atari800-video_gl.o `test -f 'sdl/video_gl.c' || echo '$(srcdir)/'`sdl/video_gl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-video_gl.Tpo sdl/$(DEPDIR)/atari800-video_gl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/video_gl.c' object='sdl/atari800-video_gl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-video_gl.o `test -f 'sdl/video_gl.c' || echo '$(srcdir)/'`sdl/video_gl.c sdl/atari800-video_gl.obj: sdl/video_gl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sdl/atari800-video_gl.obj -MD -MP -MF sdl/$(DEPDIR)/atari800-video_gl.Tpo -c -o sdl/atari800-video_gl.obj `if test -f 'sdl/video_gl.c'; then $(CYGPATH_W) 'sdl/video_gl.c'; else $(CYGPATH_W) '$(srcdir)/sdl/video_gl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) sdl/$(DEPDIR)/atari800-video_gl.Tpo sdl/$(DEPDIR)/atari800-video_gl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdl/video_gl.c' object='sdl/atari800-video_gl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sdl/atari800-video_gl.obj `if test -f 'sdl/video_gl.c'; then $(CYGPATH_W) 'sdl/video_gl.c'; else $(CYGPATH_W) '$(srcdir)/sdl/video_gl.c'; fi` atari800-xep80.o: xep80.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-xep80.o -MD -MP -MF $(DEPDIR)/atari800-xep80.Tpo -c -o atari800-xep80.o `test -f 'xep80.c' || echo '$(srcdir)/'`xep80.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-xep80.Tpo $(DEPDIR)/atari800-xep80.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xep80.c' object='atari800-xep80.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-xep80.o `test -f 'xep80.c' || echo '$(srcdir)/'`xep80.c atari800-xep80.obj: xep80.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-xep80.obj -MD -MP -MF $(DEPDIR)/atari800-xep80.Tpo -c -o atari800-xep80.obj `if test -f 'xep80.c'; then $(CYGPATH_W) 'xep80.c'; else $(CYGPATH_W) '$(srcdir)/xep80.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-xep80.Tpo $(DEPDIR)/atari800-xep80.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xep80.c' object='atari800-xep80.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-xep80.obj `if test -f 'xep80.c'; then $(CYGPATH_W) 'xep80.c'; else $(CYGPATH_W) '$(srcdir)/xep80.c'; fi` atari800-xep80_fonts.o: xep80_fonts.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-xep80_fonts.o -MD -MP -MF $(DEPDIR)/atari800-xep80_fonts.Tpo -c -o atari800-xep80_fonts.o `test -f 'xep80_fonts.c' || echo '$(srcdir)/'`xep80_fonts.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-xep80_fonts.Tpo $(DEPDIR)/atari800-xep80_fonts.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xep80_fonts.c' object='atari800-xep80_fonts.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-xep80_fonts.o `test -f 'xep80_fonts.c' || echo '$(srcdir)/'`xep80_fonts.c atari800-xep80_fonts.obj: xep80_fonts.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-xep80_fonts.obj -MD -MP -MF $(DEPDIR)/atari800-xep80_fonts.Tpo -c -o atari800-xep80_fonts.obj `if test -f 'xep80_fonts.c'; then $(CYGPATH_W) 'xep80_fonts.c'; else $(CYGPATH_W) '$(srcdir)/xep80_fonts.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-xep80_fonts.Tpo $(DEPDIR)/atari800-xep80_fonts.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xep80_fonts.c' object='atari800-xep80_fonts.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-xep80_fonts.obj `if test -f 'xep80_fonts.c'; then $(CYGPATH_W) 'xep80_fonts.c'; else $(CYGPATH_W) '$(srcdir)/xep80_fonts.c'; fi` atari800-filter_ntsc.o: filter_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-filter_ntsc.o -MD -MP -MF $(DEPDIR)/atari800-filter_ntsc.Tpo -c -o atari800-filter_ntsc.o `test -f 'filter_ntsc.c' || echo '$(srcdir)/'`filter_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-filter_ntsc.Tpo $(DEPDIR)/atari800-filter_ntsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filter_ntsc.c' object='atari800-filter_ntsc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-filter_ntsc.o `test -f 'filter_ntsc.c' || echo '$(srcdir)/'`filter_ntsc.c atari800-filter_ntsc.obj: filter_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-filter_ntsc.obj -MD -MP -MF $(DEPDIR)/atari800-filter_ntsc.Tpo -c -o atari800-filter_ntsc.obj `if test -f 'filter_ntsc.c'; then $(CYGPATH_W) 'filter_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/filter_ntsc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-filter_ntsc.Tpo $(DEPDIR)/atari800-filter_ntsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filter_ntsc.c' object='atari800-filter_ntsc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-filter_ntsc.obj `if test -f 'filter_ntsc.c'; then $(CYGPATH_W) 'filter_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/filter_ntsc.c'; fi` atari_ntsc/atari800-atari_ntsc.o: atari_ntsc/atari_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari_ntsc/atari800-atari_ntsc.o -MD -MP -MF atari_ntsc/$(DEPDIR)/atari800-atari_ntsc.Tpo -c -o atari_ntsc/atari800-atari_ntsc.o `test -f 'atari_ntsc/atari_ntsc.c' || echo '$(srcdir)/'`atari_ntsc/atari_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) atari_ntsc/$(DEPDIR)/atari800-atari_ntsc.Tpo atari_ntsc/$(DEPDIR)/atari800-atari_ntsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_ntsc/atari_ntsc.c' object='atari_ntsc/atari800-atari_ntsc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari_ntsc/atari800-atari_ntsc.o `test -f 'atari_ntsc/atari_ntsc.c' || echo '$(srcdir)/'`atari_ntsc/atari_ntsc.c atari_ntsc/atari800-atari_ntsc.obj: atari_ntsc/atari_ntsc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari_ntsc/atari800-atari_ntsc.obj -MD -MP -MF atari_ntsc/$(DEPDIR)/atari800-atari_ntsc.Tpo -c -o atari_ntsc/atari800-atari_ntsc.obj `if test -f 'atari_ntsc/atari_ntsc.c'; then $(CYGPATH_W) 'atari_ntsc/atari_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/atari_ntsc/atari_ntsc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) atari_ntsc/$(DEPDIR)/atari800-atari_ntsc.Tpo atari_ntsc/$(DEPDIR)/atari800-atari_ntsc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atari_ntsc/atari_ntsc.c' object='atari_ntsc/atari800-atari_ntsc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari_ntsc/atari800-atari_ntsc.obj `if test -f 'atari_ntsc/atari_ntsc.c'; then $(CYGPATH_W) 'atari_ntsc/atari_ntsc.c'; else $(CYGPATH_W) '$(srcdir)/atari_ntsc/atari_ntsc.c'; fi` atari800-pal_blending.o: pal_blending.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pal_blending.o -MD -MP -MF $(DEPDIR)/atari800-pal_blending.Tpo -c -o atari800-pal_blending.o `test -f 'pal_blending.c' || echo '$(srcdir)/'`pal_blending.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pal_blending.Tpo $(DEPDIR)/atari800-pal_blending.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pal_blending.c' object='atari800-pal_blending.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pal_blending.o `test -f 'pal_blending.c' || echo '$(srcdir)/'`pal_blending.c atari800-pal_blending.obj: pal_blending.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-pal_blending.obj -MD -MP -MF $(DEPDIR)/atari800-pal_blending.Tpo -c -o atari800-pal_blending.obj `if test -f 'pal_blending.c'; then $(CYGPATH_W) 'pal_blending.c'; else $(CYGPATH_W) '$(srcdir)/pal_blending.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-pal_blending.Tpo $(DEPDIR)/atari800-pal_blending.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pal_blending.c' object='atari800-pal_blending.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-pal_blending.obj `if test -f 'pal_blending.c'; then $(CYGPATH_W) 'pal_blending.c'; else $(CYGPATH_W) '$(srcdir)/pal_blending.c'; fi` atari800-rdevice.o: rdevice.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-rdevice.o -MD -MP -MF $(DEPDIR)/atari800-rdevice.Tpo -c -o atari800-rdevice.o `test -f 'rdevice.c' || echo '$(srcdir)/'`rdevice.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-rdevice.Tpo $(DEPDIR)/atari800-rdevice.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rdevice.c' object='atari800-rdevice.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-rdevice.o `test -f 'rdevice.c' || echo '$(srcdir)/'`rdevice.c atari800-rdevice.obj: rdevice.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atari800-rdevice.obj -MD -MP -MF $(DEPDIR)/atari800-rdevice.Tpo -c -o atari800-rdevice.obj `if test -f 'rdevice.c'; then $(CYGPATH_W) 'rdevice.c'; else $(CYGPATH_W) '$(srcdir)/rdevice.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/atari800-rdevice.Tpo $(DEPDIR)/atari800-rdevice.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rdevice.c' object='atari800-rdevice.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(atari800_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atari800-rdevice.obj `if test -f 'rdevice.c'; then $(CYGPATH_W) 'rdevice.c'; else $(CYGPATH_W) '$(srcdir)/rdevice.c'; fi` libatari800/guess_settings-guess_settings.o: libatari800/guess_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(guess_settings_CFLAGS) $(CFLAGS) -MT libatari800/guess_settings-guess_settings.o -MD -MP -MF libatari800/$(DEPDIR)/guess_settings-guess_settings.Tpo -c -o libatari800/guess_settings-guess_settings.o `test -f 'libatari800/guess_settings.c' || echo '$(srcdir)/'`libatari800/guess_settings.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libatari800/$(DEPDIR)/guess_settings-guess_settings.Tpo libatari800/$(DEPDIR)/guess_settings-guess_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libatari800/guess_settings.c' object='libatari800/guess_settings-guess_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(guess_settings_CFLAGS) $(CFLAGS) -c -o libatari800/guess_settings-guess_settings.o `test -f 'libatari800/guess_settings.c' || echo '$(srcdir)/'`libatari800/guess_settings.c libatari800/guess_settings-guess_settings.obj: libatari800/guess_settings.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(guess_settings_CFLAGS) $(CFLAGS) -MT libatari800/guess_settings-guess_settings.obj -MD -MP -MF libatari800/$(DEPDIR)/guess_settings-guess_settings.Tpo -c -o libatari800/guess_settings-guess_settings.obj `if test -f 'libatari800/guess_settings.c'; then $(CYGPATH_W) 'libatari800/guess_settings.c'; else $(CYGPATH_W) '$(srcdir)/libatari800/guess_settings.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libatari800/$(DEPDIR)/guess_settings-guess_settings.Tpo libatari800/$(DEPDIR)/guess_settings-guess_settings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libatari800/guess_settings.c' object='libatari800/guess_settings-guess_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(guess_settings_CFLAGS) $(CFLAGS) -c -o libatari800/guess_settings-guess_settings.obj `if test -f 'libatari800/guess_settings.c'; then $(CYGPATH_W) 'libatari800/guess_settings.c'; else $(CYGPATH_W) '$(srcdir)/libatari800/guess_settings.c'; fi` libatari800/libatari800_test-libatari800_test.o: libatari800/libatari800_test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatari800_test_CFLAGS) $(CFLAGS) -MT libatari800/libatari800_test-libatari800_test.o -MD -MP -MF libatari800/$(DEPDIR)/libatari800_test-libatari800_test.Tpo -c -o libatari800/libatari800_test-libatari800_test.o `test -f 'libatari800/libatari800_test.c' || echo '$(srcdir)/'`libatari800/libatari800_test.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libatari800/$(DEPDIR)/libatari800_test-libatari800_test.Tpo libatari800/$(DEPDIR)/libatari800_test-libatari800_test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libatari800/libatari800_test.c' object='libatari800/libatari800_test-libatari800_test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatari800_test_CFLAGS) $(CFLAGS) -c -o libatari800/libatari800_test-libatari800_test.o `test -f 'libatari800/libatari800_test.c' || echo '$(srcdir)/'`libatari800/libatari800_test.c libatari800/libatari800_test-libatari800_test.obj: libatari800/libatari800_test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatari800_test_CFLAGS) $(CFLAGS) -MT libatari800/libatari800_test-libatari800_test.obj -MD -MP -MF libatari800/$(DEPDIR)/libatari800_test-libatari800_test.Tpo -c -o libatari800/libatari800_test-libatari800_test.obj `if test -f 'libatari800/libatari800_test.c'; then $(CYGPATH_W) 'libatari800/libatari800_test.c'; else $(CYGPATH_W) '$(srcdir)/libatari800/libatari800_test.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libatari800/$(DEPDIR)/libatari800_test-libatari800_test.Tpo libatari800/$(DEPDIR)/libatari800_test-libatari800_test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libatari800/libatari800_test.c' object='libatari800/libatari800_test-libatari800_test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libatari800_test_CFLAGS) $(CFLAGS) -c -o libatari800/libatari800_test-libatari800_test.obj `if test -f 'libatari800/libatari800_test.c'; then $(CYGPATH_W) 'libatari800/libatari800_test.c'; else $(CYGPATH_W) '$(srcdir)/libatari800/libatari800_test.c'; fi` .s.o: $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $< .s.obj: $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am @CONFIGURE_HOST_JAVANVM_FALSE@@CONFIGURE_TARGET_ANDROID_FALSE@all-local: @CONFIGURE_TARGET_LIBATARI800_TRUE@all-local: all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) config.h \ all-local installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f atari_ntsc/$(DEPDIR)/$(am__dirstamp) -rm -f atari_ntsc/$(am__dirstamp) -rm -f codecs/$(DEPDIR)/$(am__dirstamp) -rm -f codecs/$(am__dirstamp) -rm -f dos/$(DEPDIR)/$(am__dirstamp) -rm -f dos/$(am__dirstamp) -rm -f falcon/$(DEPDIR)/$(am__dirstamp) -rm -f falcon/$(am__dirstamp) -rm -f gles2/$(DEPDIR)/$(am__dirstamp) -rm -f gles2/$(am__dirstamp) -rm -f javanvm/$(DEPDIR)/$(am__dirstamp) -rm -f javanvm/$(am__dirstamp) -rm -f libatari800/$(DEPDIR)/$(am__dirstamp) -rm -f libatari800/$(am__dirstamp) -rm -f roms/$(DEPDIR)/$(am__dirstamp) -rm -f roms/$(am__dirstamp) -rm -f sdl/$(DEPDIR)/$(am__dirstamp) -rm -f sdl/$(am__dirstamp) -rm -f win32/$(DEPDIR)/$(am__dirstamp) -rm -f win32/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libLIBRARIES \ clean-noinstLIBRARIES clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) atari_ntsc/$(DEPDIR) codecs/$(DEPDIR) dos/$(DEPDIR) falcon/$(DEPDIR) gles2/$(DEPDIR) javanvm/$(DEPDIR) libatari800/$(DEPDIR) roms/$(DEPDIR) sdl/$(DEPDIR) win32/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-docDATA \ install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-libLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) atari_ntsc/$(DEPDIR) codecs/$(DEPDIR) dos/$(DEPDIR) falcon/$(DEPDIR) gles2/$(DEPDIR) javanvm/$(DEPDIR) libatari800/$(DEPDIR) roms/$(DEPDIR) sdl/$(DEPDIR) win32/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-docDATA \ uninstall-includeHEADERS uninstall-libLIBRARIES \ uninstall-local .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ clean-binPROGRAMS clean-generic clean-libLIBRARIES \ clean-noinstLIBRARIES clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-hdr distclean-tags distdir dvi dvi-am html html-am \ info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-data-local \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-docDATA \ uninstall-includeHEADERS uninstall-libLIBRARIES \ uninstall-local .PRECIOUS: Makefile @CONFIGURE_HOST_JAVANVM_TRUE@@CONFIGURE_TARGET_LIBATARI800_FALSE@all-local:: $(TARGET_BASE_NAME).jar @CONFIGURE_HOST_JAVANVM_FALSE@@CONFIGURE_TARGET_ANDROID_TRUE@@CONFIGURE_TARGET_LIBATARI800_FALSE@all-local:: android # A special rule for SDL_win32_main.c to suppress warnings since this file is # from SDL and should not have to be modified sdl/SDL_win32_main.o: sdl/SDL_win32_main.c $(CC) -c -o $@ $(AM_CPPFLAGS) $(CFLAGS) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< ide.o: ide.c ide.h ide_internal.h $(CC) -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< win32/atari.ro: win32/atari.rc $(WINDRES) -o $@ --output-format coff --target pe-i386 --define WIN32 --define __MINGW32__ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $< # some special rules for some win32 source files which are actually C++ win32/main.o: win32/main.c $(CC) -x c++ -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< win32/render_gdiplus.o: win32/render_gdiplus.c $(CC) -x c++ -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< win32/render_direct3d.o: win32/render_direct3d.c $(CC) -x c++ -c -o $@ $(AM_CPPFLAGS) $(CFLAGS_NOANSI) $(DEFAULT_INCLUDES) $(CPPFLAGS) $(DEFS) -Wno-missing-declarations -Wno-missing-prototypes $< .asm.o: $(CCAS) $(CCASFLAGS) -o $@ $< @CONFIGURE_HOST_JAVANVM_TRUE@$(TARGET_BASE_NAME).class: javanvm/$(TARGET_BASE_NAME).java | $(TARGET_BASE_NAME)_runtime.class @CONFIGURE_HOST_JAVANVM_TRUE@ $(JAVAC) -d . $(JAVACFLAGS) $< $(TARGET_BASE_NAME)$(RUNTIME).class: $(TARGET) #To compile using java bytecode directly: # $(JAVA) $(JAVAFLAGS) org.ibex.nestedvm.Compiler -o UnixRuntime -outfile $@ $(TARGET_BASE_NAME)$(RUNTIME) $(TARGET) $(JAVA) $(JAVAFLAGS) org.ibex.nestedvm.Compiler -o UnixRuntime -outformat javasource -outfile $(TARGET_BASE_NAME)$(RUNTIME).java $(TARGET_BASE_NAME)$(RUNTIME) $(TARGET) $(JAVAC) -d . $(JAVACFLAGS) -J-Xmx256m $(TARGET_BASE_NAME)$(RUNTIME).java $(TARGET_BASE_NAME).jar: $(TARGET_BASE_NAME).class $(TARGET_BASE_NAME)$(RUNTIME).class printf "Manifest-Version: 1.0\nMain-Class: $(TARGET_BASE_NAME)\nClass-Path: unix_runtime.jar\n" > .manifest jar cfm $(TARGET_BASE_NAME).jar .manifest *.class # Allow parallel execution in sub-make with '+' android: + $(NDK_BUILD) -C android ant -f android/build.xml debug .PHONY: android install-data-local: $(mkinstalldirs) $(DESTDIR)$(man1dir) $(INSTALL_DATA) $(srcdir)/atari800.man ${DESTDIR}${man1dir}/atari800.1 uninstall-local: $(RM) ${DESTDIR}${man1dir}/atari800.1* readme.html: $(TARGET) ./$(TARGET) -help $@ doc: readme.html # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: atari800-5.0.0/src/af80.c000066400000000000000000000247671425067567700146000ustar00rootroot00000000000000/* * af80.c - Emulation of the Austin Franklin 80 column card. * * Copyright (C) 2009 Perry McFarlane * Copyright (C) 2009 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "af80.h" #include "atari.h" #include "util.h" #include "log.h" #include "memory.h" #include "cpu.h" #include static UBYTE *af80_rom = NULL; static char af80_rom_filename[FILENAME_MAX]; static UBYTE *af80_charset = NULL; static char af80_charset_filename[FILENAME_MAX]; static UBYTE *af80_screen = NULL; static UBYTE *af80_attrib = NULL; int AF80_enabled = FALSE; /* Austin Franklin information from forum posts by warerat at Atariage */ static int rom_bank_select; /* bits 0-3 of d5f7, $0-$f 16 banks */ static int not_rom_output_enable; /* bit 4 of d5f7 0 = Enable ROM 1 = Disable ROM */ static int not_right_cartridge_rd4_control; /* 0=$8000-$9fff cart ROM, 1= $8000-$9fff system RAM */ static int not_enable_2k_character_ram; static int not_enable_2k_attribute_ram; static int not_enable_crtc_registers; static int not_enable_80_column_output; static int video_bank_select; /* bits 0-3 of d5f6, $0-$f 16 banks */ static int crtreg[0x40]; static int const rgbi_palette[16] = { 0x000000, /* black */ 0x0000AA, /* blue */ 0x00AA00, /* green */ 0x00AAAA, /* cyan */ 0xAA0000, /* red */ 0xAA00AA, /* magenta */ 0xAA5500, /* brown */ 0xAAAAAA, /* white */ 0x555555, /* grey */ 0x5555FF, /* light blue */ 0x55FF55, /* light green */ 0x55FFFF, /* light cyan */ 0xFF5555, /* light red */ 0xFF55FF, /* light magenta */ 0xFFFF55, /* yellow */ 0xFFFFFF /* white (high intensity) */ }; int AF80_palette[16]; #ifdef AF80_DEBUG #define D(a) a #else #define D(a) do{}while(0) #endif static void update_d6(void) { if (!not_enable_2k_character_ram) { memcpy(MEMORY_mem + 0xd600, af80_screen + (video_bank_select<<7), 0x80); memcpy(MEMORY_mem + 0xd680, af80_screen + (video_bank_select<<7), 0x80); } else if (!not_enable_2k_attribute_ram) { memcpy(MEMORY_mem + 0xd600, af80_attrib + (video_bank_select<<7), 0x80); memcpy(MEMORY_mem + 0xd680, af80_attrib + (video_bank_select<<7), 0x80); } else if (not_enable_crtc_registers) { memset(MEMORY_mem + 0xd600, 0xff, 0x100); } } static void update_d5(void) { if (not_rom_output_enable) { memset(MEMORY_mem + 0xd500, 0xff, 0x100); } else { memcpy(MEMORY_mem + 0xd500, af80_rom + (rom_bank_select<<8), 0x100); } } static void update_8000_9fff(void) { if (not_right_cartridge_rd4_control) return; if (not_rom_output_enable) { memset(MEMORY_mem + 0x8000, 0xff, 0x2000); } else { int i; for (i=0; i<32; i++) { memcpy(MEMORY_mem + 0x8000 + (i<<8), af80_rom + (rom_bank_select<<8), 0x100); } } } int AF80_Initialise(int *argc, char *argv[]) { int i, j; int help_only = FALSE; for (i = j = 1; i < *argc; i++) { if (strcmp(argv[i], "-af80") == 0) { AF80_enabled = TRUE; } else { if (strcmp(argv[i], "-help") == 0) { help_only = TRUE; Log_print("\t-af80 Emulate the Austin Franklin 80 column board"); } argv[j++] = argv[i]; } } *argc = j; if (help_only) return TRUE; if (AF80_enabled) { Log_print("Austin Franklin 80 enabled"); af80_rom = (UBYTE *)Util_malloc(0x1000); if (!Atari800_LoadImage(af80_rom_filename, af80_rom, 0x1000)) { free(af80_rom); af80_rom = NULL; AF80_enabled = FALSE; Log_print("Couldn't load Austin Franklin ROM image"); return FALSE; } else { Log_print("loaded Austin Franklin rom image"); } af80_charset = (UBYTE *)Util_malloc(0x1000); if (!Atari800_LoadImage(af80_charset_filename, af80_charset, 0x1000)) { free(af80_charset); free(af80_rom); af80_charset = af80_rom = NULL; AF80_enabled = FALSE; Log_print("Couldn't load Austin Franklin charset image"); return FALSE; } else { Log_print("loaded Austin Franklin charset image"); } af80_screen = (UBYTE *)Util_malloc(0x800); af80_attrib = (UBYTE *)Util_malloc(0x800); AF80_Reset(); /* swap palette */ for (i=0; i<16; i++ ) { j=i; j = (j&0x0a) + ((j&0x01) << 2) + ((j&0x04) >> 2); AF80_palette[i] = rgbi_palette[j]; } } return TRUE; } void AF80_Exit(void) { free(af80_screen); free(af80_attrib); free(af80_charset); free(af80_rom); af80_screen = af80_attrib = af80_charset = af80_rom = NULL; } void AF80_InsertRightCartridge(void) { MEMORY_Cart809fEnable(); update_d5(); update_8000_9fff(); } int AF80_ReadConfig(char *string, char *ptr) { if (strcmp(string, "AF80_ROM") == 0) Util_strlcpy(af80_rom_filename, ptr, sizeof(af80_rom_filename)); else if (strcmp(string, "AF80_CHARSET") == 0) Util_strlcpy(af80_charset_filename, ptr, sizeof(af80_charset_filename)); else return FALSE; /* no match */ return TRUE; /* matched something */ } void AF80_WriteConfig(FILE *fp) { fprintf(fp, "AF80_ROM=%s\n", af80_rom_filename); fprintf(fp, "AF80_CHARSET=%s\n", af80_charset_filename); } int AF80_D6GetByte(UWORD addr, int no_side_effects) { int result = 0xff; if (!not_enable_2k_character_ram) { result = MEMORY_dGetByte(addr); } else if (!not_enable_2k_attribute_ram) { result = MEMORY_dGetByte(addr); } else if (!not_enable_crtc_registers) { if (video_bank_select == 0 ) { if ((addr&0xff)<0x40) { result = crtreg[addr&0xff]; if ((addr&0xff) == 0x3a) { result = 0x01; } } D(printf("AF80 Read addr:%4x cpu:%4x\n", addr, CPU_remember_PC[(CPU_remember_PC_curpos-1)%CPU_REMEMBER_PC_STEPS])); } } return result; } void AF80_D6PutByte(UWORD addr, UBYTE byte) { if (!not_enable_2k_character_ram) { MEMORY_dPutByte((addr&0xff7f),byte); MEMORY_dPutByte((addr&0xff7f)+0x80,byte); af80_screen[(addr&0x7f) + (video_bank_select<<7)] = byte; } else if (!not_enable_2k_attribute_ram) { MEMORY_dPutByte((addr&0xff7f),byte); MEMORY_dPutByte((addr&0xff7f)+0x80,byte); af80_attrib[(addr&0x7f) + (video_bank_select<<7)] = byte; D(printf("AF80 Write, attribute, addr:%4x byte:%2x, cpu:%4x\n", addr, byte,CPU_remember_PC[(CPU_remember_PC_curpos-1)%CPU_REMEMBER_PC_STEPS])); } else if (!not_enable_crtc_registers) { if (video_bank_select == 0 ) { if ((addr&0xff)<0x40) { crtreg[addr&0xff] = byte; } D(if (1 || (addr!=0xd618 && addr!=0xd619)) printf("AF80 Write addr:%4x byte:%2x, cpu:%4x\n", addr, byte,CPU_remember_PC[(CPU_remember_PC_curpos-1)%CPU_REMEMBER_PC_STEPS])); } else { D(printf("AF80 Write, video_bank_select!=0, addr:%4x byte:%2x, cpu:%4x\n", addr, byte,CPU_remember_PC[(CPU_remember_PC_curpos-1)%CPU_REMEMBER_PC_STEPS])); } } } int AF80_D5GetByte(UWORD addr, int no_side_effects) { int result = MEMORY_dGetByte(addr); return result; } void AF80_D5PutByte(UWORD addr, UBYTE byte) { if (addr == 0xd5f6) { int need_update_d6 = FALSE; if ((byte&0x10) != not_enable_2k_character_ram) { not_enable_2k_character_ram = (byte & 0x10); need_update_d6 = TRUE; } if ((byte&0x20) != not_enable_2k_attribute_ram) { not_enable_2k_attribute_ram = (byte & 0x20); need_update_d6 = TRUE; } if ((byte&0x40) != not_enable_crtc_registers) { not_enable_crtc_registers = (byte & 0x40); need_update_d6 = TRUE; } if ((byte&0x80) != not_enable_80_column_output) { not_enable_80_column_output = (byte & 0x80); } if ((byte&0x0f) != video_bank_select) { video_bank_select = (byte & 0x0f); need_update_d6 = TRUE; } if (need_update_d6) { update_d6(); } } else if (addr == 0xd5f7) { int need_update_d5 = FALSE; int need_update_8000_9fff = FALSE; if ((byte&0x10) != not_rom_output_enable) { not_rom_output_enable = (byte & 0x10); need_update_d5 = TRUE; if (byte&0x20) { need_update_8000_9fff = TRUE; } } if ((byte&0x20) != not_right_cartridge_rd4_control) { not_right_cartridge_rd4_control = (byte & 0x20); if (not_right_cartridge_rd4_control) { MEMORY_Cart809fDisable(); } else { MEMORY_Cart809fEnable(); need_update_8000_9fff = TRUE; } } if ((byte&0x0f) != rom_bank_select) { rom_bank_select = (byte & 0x0f); if (!not_rom_output_enable) { need_update_d5 = TRUE; if (!not_right_cartridge_rd4_control) { need_update_8000_9fff = TRUE; } } } if (need_update_d5) { update_d5(); } if (need_update_8000_9fff) { update_8000_9fff(); } } D(if (addr!=0xd5f7 && addr!=0xd5f6) printf("AF80 Write addr:%4x byte:%2x, cpu:%4x\n", addr, byte,CPU_remember_PC[(CPU_remember_PC_curpos-1)%CPU_REMEMBER_PC_STEPS])); } UBYTE AF80_GetPixels(int scanline, int column, int *colour, int blink) { #define AF80_ROWS 25 #define AF80_CELL_HEIGHT 10 UBYTE character; int attrib; UBYTE font_data; int table_start = crtreg[0x0c] + ((crtreg[0x0d]&0x3f)<<8); int row = scanline / AF80_CELL_HEIGHT; int line = scanline % AF80_CELL_HEIGHT; int screen_pos; if (row >= AF80_ROWS) { return 0; } if (row >= crtreg[0x10]) { screen_pos = (row-crtreg[0x10])*80 + column + crtreg[0x0e] + ((crtreg[0x0f]&0x3f)<<8); } else { screen_pos = row*80+column + table_start; } screen_pos &= 0x7ff; character = af80_screen[screen_pos]; attrib = af80_attrib[screen_pos]; font_data = af80_charset[character*16 + line]; if (attrib & 0x01) { font_data ^= 0xff; /* invert */ } if ((attrib & 0x02) && blink) { font_data = 0x00; /* blink */ } if (line+1 == AF80_CELL_HEIGHT && (attrib & 0x04)) { font_data = 0xff; /* underline */ } if (row == crtreg[0x18] && column == crtreg[0x19] && !blink) { font_data = 0xff; /* cursor */ } *colour = attrib>>4; /* set number of palette entry */ return font_data; } void AF80_Reset(void) { memset(af80_screen, 0, 0x800); memset(af80_attrib, 0, 0x800); rom_bank_select = 0; not_rom_output_enable = 0; not_right_cartridge_rd4_control = 0; not_enable_2k_character_ram = 0; not_enable_2k_attribute_ram = 0; not_enable_crtc_registers = 0; not_enable_80_column_output = 0; video_bank_select = 0; memset(crtreg, 0, sizeof(crtreg)); } /* vim:ts=4:sw=4: */ atari800-5.0.0/src/af80.h000066400000000000000000000011601425067567700145630ustar00rootroot00000000000000#ifndef AF80_H_ #define AF80_H_ #include "atari.h" #include extern int AF80_palette[16]; int AF80_Initialise(int *argc, char *argv[]); void AF80_Exit(void); void AF80_InsertRightCartridge(void); int AF80_ReadConfig(char *string, char *ptr); void AF80_WriteConfig(FILE *fp); int AF80_D5GetByte(UWORD addr, int no_side_effects); void AF80_D5PutByte(UWORD addr, UBYTE byte); int AF80_D6GetByte(UWORD addr, int no_side_effects); void AF80_D6PutByte(UWORD addr, UBYTE byte); UBYTE AF80_GetPixels(int scanline, int column, int *colour, int blink); extern int AF80_enabled; void AF80_Reset(void); #endif /* AF80_H_ */ atari800-5.0.0/src/afile.c000066400000000000000000000131231425067567700151020ustar00rootroot00000000000000/* * afile.c - Detection and opening of different Atari file types. * * Copyright (c) 1998-2008 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #include "atari.h" #include "afile.h" #include "binload.h" #include "cartridge.h" #include "cassette.h" #include "gtia.h" #include "img_tape.h" #include "log.h" #include "sio.h" #include "statesav.h" #include "util.h" #ifndef BASIC #include "ui.h" #endif /* BASIC */ #ifdef HAVE_LIBZ #include #endif #include int AFILE_DetectFileType(const char *filename) { UBYTE header[4]; int file_length; FILE *fp = fopen(filename, "rb"); if (fp == NULL) return AFILE_ERROR; if (fread(header, 1, 4, fp) != 4) { fclose(fp); return AFILE_ERROR; } switch (header[0]) { case 0: if (header[1] == 0 && (header[2] != 0 || header[3] != 0) /* && file_length < 37 * 1024 */) { fclose(fp); return AFILE_BAS; } break; case 0x1f: if (header[1] == 0x8b) { #ifndef HAVE_LIBZ fclose(fp); Log_print("\"%s\" is a compressed file.", filename); Log_print("This executable does not support compressed files. You can uncompress this file"); Log_print("with an external program that supports gzip (*.gz) files (e.g. gunzip)"); Log_print("and then load into this emulator."); return AFILE_ERROR; #else /* HAVE_LIBZ */ gzFile gzf; fclose(fp); gzf = gzopen(filename, "rb"); if (gzf == NULL) return AFILE_ERROR; if (gzread(gzf, header, 4) != 4) { gzclose(gzf); return AFILE_ERROR; } gzclose(gzf); if (header[0] == 0x96 && header[1] == 0x02) return AFILE_ATR_GZ; if (header[0] == 'A' && header[1] == 'T' && header[2] == 'A' && header[3] == 'R') return AFILE_STATE_GZ; return AFILE_XFD_GZ; #endif /* HAVE_LIBZ */ } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if ((header[1] >= '0' && header[1] <= '9') || header[1] == ' ') { fclose(fp); return AFILE_LST; } break; case 'A': if (header[1] == 'T' && header[2] == 'A' && header[3] == 'R') { fclose(fp); return AFILE_STATE; } if (header[1] == 'T' && header[2] == '8' && header[3] == 'X') { fclose(fp); return AFILE_ATX; } break; case 'C': if (header[1] == 'A' && header[2] == 'R' && header[3] == 'T') { fclose(fp); return AFILE_CART; } break; case 0x96: if (header[1] == 0x02) { fclose(fp); return AFILE_ATR; } break; case 0xf9: case 0xfa: fclose(fp); return AFILE_DCM; case 0xff: if (header[1] == 0xff && (header[2] != 0xff || header[3] != 0xff)) { fclose(fp); return AFILE_XEX; } break; default: break; } file_length = Util_flen(fp); fclose(fp); /* Detect .pro images */ /* # of sectors is in header */ if ((file_length-16)%(128+12) == 0 && header[0]*256 + header[1] == (file_length-16)/(128+12) && header[2] == 'P') { #ifdef DEBUG_PRO Log_print(".pro file detected"); #endif return AFILE_PRO; } /* 40K or a-power-of-two between 4K and CARTRIDGE_MAX_SIZE */ if (file_length >= 4 * 1024 && file_length <= CARTRIDGE_MAX_SIZE && ((file_length & (file_length - 1)) == 0 || file_length == 40 * 1024)) return AFILE_ROM; /* BOOT_TAPE is a raw file containing a program booted from a tape */ if ((header[1] << 7) == file_length) return AFILE_BOOT_TAPE; if ((file_length & 0x7f) == 0) return AFILE_XFD; if (IMG_TAPE_FileSupported(header)) return AFILE_CAS; return AFILE_ERROR; } int AFILE_OpenFile(const char *filename, int reboot, int diskno, int readonly) { int type = AFILE_DetectFileType(filename); switch (type) { case AFILE_ATR: case AFILE_ATX: case AFILE_XFD: case AFILE_ATR_GZ: case AFILE_XFD_GZ: case AFILE_DCM: case AFILE_PRO: if (!SIO_Mount(diskno, filename, readonly)) return AFILE_ERROR; if (reboot) Atari800_Coldstart(); break; case AFILE_XEX: case AFILE_BAS: case AFILE_LST: if (!BINLOAD_Loader(filename)) return AFILE_ERROR; break; case AFILE_CART: case AFILE_ROM: { int r; if (reboot) r = CARTRIDGE_InsertAutoReboot(filename); else r = CARTRIDGE_Insert(filename); switch (r) { case CARTRIDGE_CANT_OPEN: case CARTRIDGE_BAD_FORMAT: return AFILE_ERROR; case CARTRIDGE_BAD_CHECKSUM: case 0: /* ok */ break; default: /* r > 0 */ return (r << 8) | AFILE_ROM; } } break; case AFILE_CAS: case AFILE_BOOT_TAPE: if (!CASSETTE_Insert(filename)) return AFILE_ERROR; if (reboot) { CASSETTE_hold_start = TRUE; Atari800_Coldstart(); } break; case AFILE_STATE: case AFILE_STATE_GZ: #ifdef BASIC Log_print("State files are not supported in BASIC version"); return AFILE_ERROR; #else if (!StateSav_ReadAtariState(filename, "rb")) return AFILE_ERROR; /* Don't press Start nor Option */ GTIA_consol_override = 0; break; #endif default: break; } return type; } atari800-5.0.0/src/afile.h000066400000000000000000000032371425067567700151140ustar00rootroot00000000000000#ifndef AFILE_H_ #define AFILE_H_ /* File types returned by AFILE_DetectFileType() and AFILE_OpenFile(). */ #define AFILE_ERROR 0 #define AFILE_ATR 1 #define AFILE_XFD 2 #define AFILE_ATR_GZ 3 #define AFILE_XFD_GZ 4 #define AFILE_DCM 5 #define AFILE_XEX 6 #define AFILE_BAS 7 #define AFILE_LST 8 #define AFILE_CART 9 #define AFILE_ROM 10 #define AFILE_CAS 11 #define AFILE_BOOT_TAPE 12 #define AFILE_STATE 13 #define AFILE_STATE_GZ 14 #define AFILE_PRO 15 #define AFILE_ATX 16 /* ATR format header */ struct AFILE_ATR_Header { unsigned char magic1; unsigned char magic2; unsigned char seccountlo; unsigned char seccounthi; unsigned char secsizelo; unsigned char secsizehi; unsigned char hiseccountlo; unsigned char hiseccounthi; unsigned char gash[7]; unsigned char writeprotect; }; /* First two bytes of an ATR file. */ #define AFILE_ATR_MAGIC1 0x96 #define AFILE_ATR_MAGIC2 0x02 /* Auto-detects file type and returns one of AFILE_* values. */ int AFILE_DetectFileType(const char *filename); /* Auto-detects file type and mounts the file in the emulator. reboot: Atari800_Coldstart() for disks, cartridges and tapes diskno: drive number for disks (1-8) readonly: mount disks as read-only Returns: * AFILE_ERROR if file failed to load or was invalid; * AFILE_* - type of opened file if loading succeeded; * AFILE_ROM | (rom_size << 8) if the file opened is a ROM image, but its type could not be determined; rom_size is then cartridge's size in KB. */ int AFILE_OpenFile(const char *filename, int reboot, int diskno, int readonly); #endif /* AFILE_H_ */ atari800-5.0.0/src/akey.h000066400000000000000000000170411425067567700147630ustar00rootroot00000000000000#ifndef AKEY_H_ #define AKEY_H_ /* akey.h: Atari key codes */ /* INPUT_key_code values */ #define AKEY_NONE -1 /* Special key codes. */ #define AKEY_WARMSTART -2 #define AKEY_COLDSTART -3 #define AKEY_EXIT -4 #define AKEY_BREAK -5 #define AKEY_UI -7 #define AKEY_SCREENSHOT -8 #define AKEY_SCREENSHOT_INTERLACE -9 #define AKEY_START -10 #define AKEY_SELECT -11 #define AKEY_OPTION -12 #define AKEY_PBI_BB_MENU -13 #define AKEY_CX85_1 -14 #define AKEY_CX85_2 -15 #define AKEY_CX85_3 -16 #define AKEY_CX85_4 -17 #define AKEY_CX85_5 -18 #define AKEY_CX85_6 -19 #define AKEY_CX85_7 -20 #define AKEY_CX85_8 -21 #define AKEY_CX85_9 -22 #define AKEY_CX85_0 -23 #define AKEY_CX85_PERIOD -24 #define AKEY_CX85_MINUS -25 #define AKEY_CX85_PLUS_ENTER -26 #define AKEY_CX85_ESCAPE -27 #define AKEY_CX85_NO -28 #define AKEY_CX85_DELETE -29 #define AKEY_CX85_YES -30 #define AKEY_TURBO -31 #ifdef USE_UI_BASIC_ONSCREEN_KEYBOARD #define AKEY_KEYB -32 #endif #ifdef DIRECTX /* special menu directives */ #define AKEY32_MENU_SAVE_CONFIG -107 #define AKEY32_UI_MOUSE_CLICK -108 #endif #define AKEY_SHFT 0x40 #define AKEY_CTRL 0x80 #define AKEY_SHFTCTRL 0xc0 #define AKEY_0 0x32 #define AKEY_1 0x1f #define AKEY_2 0x1e #define AKEY_3 0x1a #define AKEY_4 0x18 #define AKEY_5 0x1d #define AKEY_6 0x1b #define AKEY_7 0x33 #define AKEY_8 0x35 #define AKEY_9 0x30 #define AKEY_CTRL_0 (AKEY_CTRL | AKEY_0) #define AKEY_CTRL_1 (AKEY_CTRL | AKEY_1) #define AKEY_CTRL_2 (AKEY_CTRL | AKEY_2) #define AKEY_CTRL_3 (AKEY_CTRL | AKEY_3) #define AKEY_CTRL_4 (AKEY_CTRL | AKEY_4) #define AKEY_CTRL_5 (AKEY_CTRL | AKEY_5) #define AKEY_CTRL_6 (AKEY_CTRL | AKEY_6) #define AKEY_CTRL_7 (AKEY_CTRL | AKEY_7) #define AKEY_CTRL_8 (AKEY_CTRL | AKEY_8) #define AKEY_CTRL_9 (AKEY_CTRL | AKEY_9) #define AKEY_a 0x3f #define AKEY_b 0x15 #define AKEY_c 0x12 #define AKEY_d 0x3a #define AKEY_e 0x2a #define AKEY_f 0x38 #define AKEY_g 0x3d #define AKEY_h 0x39 #define AKEY_i 0x0d #define AKEY_j 0x01 #define AKEY_k 0x05 #define AKEY_l 0x00 #define AKEY_m 0x25 #define AKEY_n 0x23 #define AKEY_o 0x08 #define AKEY_p 0x0a #define AKEY_q 0x2f #define AKEY_r 0x28 #define AKEY_s 0x3e #define AKEY_t 0x2d #define AKEY_u 0x0b #define AKEY_v 0x10 #define AKEY_w 0x2e #define AKEY_x 0x16 #define AKEY_y 0x2b #define AKEY_z 0x17 #define AKEY_A (AKEY_SHFT | AKEY_a) #define AKEY_B (AKEY_SHFT | AKEY_b) #define AKEY_C (AKEY_SHFT | AKEY_c) #define AKEY_D (AKEY_SHFT | AKEY_d) #define AKEY_E (AKEY_SHFT | AKEY_e) #define AKEY_F (AKEY_SHFT | AKEY_f) #define AKEY_G (AKEY_SHFT | AKEY_g) #define AKEY_H (AKEY_SHFT | AKEY_h) #define AKEY_I (AKEY_SHFT | AKEY_i) #define AKEY_J (AKEY_SHFT | AKEY_j) #define AKEY_K (AKEY_SHFT | AKEY_k) #define AKEY_L (AKEY_SHFT | AKEY_l) #define AKEY_M (AKEY_SHFT | AKEY_m) #define AKEY_N (AKEY_SHFT | AKEY_n) #define AKEY_O (AKEY_SHFT | AKEY_o) #define AKEY_P (AKEY_SHFT | AKEY_p) #define AKEY_Q (AKEY_SHFT | AKEY_q) #define AKEY_R (AKEY_SHFT | AKEY_r) #define AKEY_S (AKEY_SHFT | AKEY_s) #define AKEY_T (AKEY_SHFT | AKEY_t) #define AKEY_U (AKEY_SHFT | AKEY_u) #define AKEY_V (AKEY_SHFT | AKEY_v) #define AKEY_W (AKEY_SHFT | AKEY_w) #define AKEY_X (AKEY_SHFT | AKEY_x) #define AKEY_Y (AKEY_SHFT | AKEY_y) #define AKEY_Z (AKEY_SHFT | AKEY_z) #define AKEY_CTRL_a (AKEY_CTRL | AKEY_a) #define AKEY_CTRL_b (AKEY_CTRL | AKEY_b) #define AKEY_CTRL_c (AKEY_CTRL | AKEY_c) #define AKEY_CTRL_d (AKEY_CTRL | AKEY_d) #define AKEY_CTRL_e (AKEY_CTRL | AKEY_e) #define AKEY_CTRL_f (AKEY_CTRL | AKEY_f) #define AKEY_CTRL_g (AKEY_CTRL | AKEY_g) #define AKEY_CTRL_h (AKEY_CTRL | AKEY_h) #define AKEY_CTRL_i (AKEY_CTRL | AKEY_i) #define AKEY_CTRL_j (AKEY_CTRL | AKEY_j) #define AKEY_CTRL_k (AKEY_CTRL | AKEY_k) #define AKEY_CTRL_l (AKEY_CTRL | AKEY_l) #define AKEY_CTRL_m (AKEY_CTRL | AKEY_m) #define AKEY_CTRL_n (AKEY_CTRL | AKEY_n) #define AKEY_CTRL_o (AKEY_CTRL | AKEY_o) #define AKEY_CTRL_p (AKEY_CTRL | AKEY_p) #define AKEY_CTRL_q (AKEY_CTRL | AKEY_q) #define AKEY_CTRL_r (AKEY_CTRL | AKEY_r) #define AKEY_CTRL_s (AKEY_CTRL | AKEY_s) #define AKEY_CTRL_t (AKEY_CTRL | AKEY_t) #define AKEY_CTRL_u (AKEY_CTRL | AKEY_u) #define AKEY_CTRL_v (AKEY_CTRL | AKEY_v) #define AKEY_CTRL_w (AKEY_CTRL | AKEY_w) #define AKEY_CTRL_x (AKEY_CTRL | AKEY_x) #define AKEY_CTRL_y (AKEY_CTRL | AKEY_y) #define AKEY_CTRL_z (AKEY_CTRL | AKEY_z) #define AKEY_CTRL_A (AKEY_CTRL | AKEY_A) #define AKEY_CTRL_B (AKEY_CTRL | AKEY_B) #define AKEY_CTRL_C (AKEY_CTRL | AKEY_C) #define AKEY_CTRL_D (AKEY_CTRL | AKEY_D) #define AKEY_CTRL_E (AKEY_CTRL | AKEY_E) #define AKEY_CTRL_F (AKEY_CTRL | AKEY_F) #define AKEY_CTRL_G (AKEY_CTRL | AKEY_G) #define AKEY_CTRL_H (AKEY_CTRL | AKEY_H) #define AKEY_CTRL_I (AKEY_CTRL | AKEY_I) #define AKEY_CTRL_J (AKEY_CTRL | AKEY_J) #define AKEY_CTRL_K (AKEY_CTRL | AKEY_K) #define AKEY_CTRL_L (AKEY_CTRL | AKEY_L) #define AKEY_CTRL_M (AKEY_CTRL | AKEY_M) #define AKEY_CTRL_N (AKEY_CTRL | AKEY_N) #define AKEY_CTRL_O (AKEY_CTRL | AKEY_O) #define AKEY_CTRL_P (AKEY_CTRL | AKEY_P) #define AKEY_CTRL_Q (AKEY_CTRL | AKEY_Q) #define AKEY_CTRL_R (AKEY_CTRL | AKEY_R) #define AKEY_CTRL_S (AKEY_CTRL | AKEY_S) #define AKEY_CTRL_T (AKEY_CTRL | AKEY_T) #define AKEY_CTRL_U (AKEY_CTRL | AKEY_U) #define AKEY_CTRL_V (AKEY_CTRL | AKEY_V) #define AKEY_CTRL_W (AKEY_CTRL | AKEY_W) #define AKEY_CTRL_X (AKEY_CTRL | AKEY_X) #define AKEY_CTRL_Y (AKEY_CTRL | AKEY_Y) #define AKEY_CTRL_Z (AKEY_CTRL | AKEY_Z) #define AKEY_HELP 0x11 #define AKEY_DOWN 0x8f #define AKEY_LEFT 0x86 #define AKEY_RIGHT 0x87 #define AKEY_UP 0x8e #define AKEY_BACKSPACE 0x34 #define AKEY_DELETE_CHAR 0xb4 #define AKEY_DELETE_LINE 0x74 #define AKEY_INSERT_CHAR 0xb7 #define AKEY_INSERT_LINE 0x77 #define AKEY_ESCAPE 0x1c #define AKEY_ATARI 0x27 #define AKEY_CAPSLOCK 0x7c #define AKEY_CAPSTOGGLE 0x3c #define AKEY_TAB 0x2c #define AKEY_SETTAB 0x6c #define AKEY_CLRTAB 0xac #define AKEY_RETURN 0x0c #define AKEY_SPACE 0x21 #define AKEY_EXCLAMATION 0x5f #define AKEY_DBLQUOTE 0x5e #define AKEY_HASH 0x5a #define AKEY_DOLLAR 0x58 #define AKEY_PERCENT 0x5d #define AKEY_AMPERSAND 0x5b #define AKEY_QUOTE 0x73 #define AKEY_AT 0x75 #define AKEY_PARENLEFT 0x70 #define AKEY_PARENRIGHT 0x72 #define AKEY_LESS 0x36 #define AKEY_GREATER 0x37 #define AKEY_EQUAL 0x0f #define AKEY_QUESTION 0x66 #define AKEY_MINUS 0x0e #define AKEY_PLUS 0x06 #define AKEY_ASTERISK 0x07 #define AKEY_SLASH 0x26 #define AKEY_COLON 0x42 #define AKEY_SEMICOLON 0x02 #define AKEY_COMMA 0x20 #define AKEY_FULLSTOP 0x22 #define AKEY_UNDERSCORE 0x4e #define AKEY_BRACKETLEFT 0x60 #define AKEY_BRACKETRIGHT 0x62 #define AKEY_CIRCUMFLEX 0x47 #define AKEY_BACKSLASH 0x46 #define AKEY_BAR 0x4f #define AKEY_CLEAR (AKEY_SHFT | AKEY_LESS) #define AKEY_CARET (AKEY_SHFT | AKEY_ASTERISK) #define AKEY_F1 0x03 #define AKEY_F2 0x04 #define AKEY_F3 0x13 #define AKEY_F4 0x14 /* Following keys cannot be read with both shift and control pressed: J K L ; + * Z X C V B F1 F2 F3 F4 HELP */ /* 5200 key codes */ #define AKEY_5200_START 0x39 #define AKEY_5200_PAUSE 0x31 #define AKEY_5200_RESET 0x29 #define AKEY_5200_0 0x25 #define AKEY_5200_1 0x3f #define AKEY_5200_2 0x3d #define AKEY_5200_3 0x3b #define AKEY_5200_4 0x37 #define AKEY_5200_5 0x35 #define AKEY_5200_6 0x33 #define AKEY_5200_7 0x2f #define AKEY_5200_8 0x2d #define AKEY_5200_9 0x2b #define AKEY_5200_HASH 0x23 #define AKEY_5200_ASTERISK 0x27 #endif /* AKEY_H_ */ atari800-5.0.0/src/amiga/000077500000000000000000000000001425067567700147345ustar00rootroot00000000000000atari800-5.0.0/src/amiga/Atari800.guide000066400000000000000000000060621425067567700172470ustar00rootroot00000000000000@DATABASE "Atari800.guide" @$VER: Atari800.guide 1.0 (23.03.00) @AUTHOR Sebastian Bauer @(C) 2000 @NODE MAIN "Atari800 - Guide" @SMARTWRAP @{b}Atari800 1.0 @{AMIGAGUIDE}@{ub} Note that the @{" guide author's " link CONTACTING} native language is German. So please forgive any spelling and gramer mistakes. Or better correct them and send them to @{" me " link CONTACTING}. @{b}Attention!@{ub} This guide is designed for use with version 40 of the amigaguide.datatype which is supplied with AmigaOS 3.1. Under other versions this guide may look @{b}"less than optimal"@{ub}. Note further that if you are presently running Kickstart 3.0, you may @{b}still@{ub} use Workbench 3.1 with it, including the newer amigaguide.datatype. @{CODE} @{" Copyright " link COPYRIGHT} Copyright and disclaimer @{" Introduction " link INTRO} What does it do ? @{" Requirements " link REQUIRE} What does it need ? @{" Installation " link INSTALL} How to install (and remove) ? @{" Usage " link USAGE} How to use it? @{" Contacting " link CONTACTING } Where to send bug reports ? @ENDNODE @NODE COPYRIGHT "Atari800 - Copyright and disclamer" @SMARTWRAP @{b}Copyright@{ub} Copyright (C) 1995 David Firth. E-Mail: david@signus.demon.co.uk 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, or (at your option) any later version. @{" GNU General Public License " link COPYING/main} @ENDNODE @NODE INTRO "Atari800 - Introduction" @SMARTWRAP @{b}Introduction@{ub} @ENDNODE @NODE REQUIRE "Atari800 - Requirements" @SMARTWRAP @{b}Requirements@{ub} The Amiga port of the Emulator requires a 68020 processor, OS3.0 and MUI3.8. For sound support AHI is needed. It also requires the Atari ROMs. @ENDNODE @NODE INSTALL "Atari800 - Installation" @SMARTWRAP @{b}How to install Atari800@{ub} To install Atari800 simply copy the whole Atari800 drawer to the destination of your choice. The ROM files must be in the copied in the same directory (but this can be also changed). @ENDNODE @NODE USAGE "Atari800 - Usage" @SMARTWRAP @{b}Usage@{ub} Sorry, but not written yet. @ENDNODE @NODE CONTACTING "Atari800 - Contacting" @SMARTWRAP @{b}Contacting@{ub} The Amiga port of the Atari800 emulator was created by Sebastian Bauer. Any comments which are related to the Amiga version should be sent to@{LINE} @{" sebauer@t-online.de " system "YAM:YAM MAILTO sebauer@t-online.de NOCHECK"} or @{" Sebastian.Bauer@in.stud.tu-ilmenau.de " system "YAM:YAM MAILTO Sebastian.Bauer@in.stud.tu-ilmenau.de NOCHECK"}@{LINE} The latest version of the emulator can be obtained from my homepage:@{LINE} @{" http://home.t-online.de/home/sebauer/english.html " system "C:OpenURL http://home.t-online.de/home/sebauer/english.html"} Also look on the official Atari800 Emulator support page at: @{" http://cas3.zlin.vutbr.cz/~stehlik/a800.htm " system "C:OpenURL http://cas3.zlin.vutbr.cz/~stehlik/a800.htm"} @ENDNODE atari800-5.0.0/src/amiga/Atari800_rev.h000066400000000000000000000003121425067567700172450ustar00rootroot00000000000000#define VERSION 2 #define REVISION 1 #define DATE "30.03.2009" #define VERS "Atari800 2.1.0" #define VSTRING "Atari800 2.1.0 (30.03.2009)\r\n" #define VERSTAG "\0$VER: Atari800 2.1.0 (30.03.2009)" atari800-5.0.0/src/amiga/Atari800_rev.i000066400000000000000000000003621425067567700172530ustar00rootroot00000000000000VERSION EQU 2 REVISION EQU 4 DATE MACRO dc.b '31.03.2009' ENDM VERS MACRO dc.b 'Atari800 2.1' ENDM VSTRING MACRO dc.b 'Atari800 2.1 (31.03.2009)',13,10,0 ENDM VERSTAG MACRO dc.b 0,'$VER: Atari800 2.1 (31.03.2009)',0 ENDM atari800-5.0.0/src/amiga/Atari800_rev.rev000066400000000000000000000000021425067567700176060ustar00rootroot000000000000001 atari800-5.0.0/src/amiga/Atari800_rev.s000066400000000000000000000003771425067567700172730ustar00rootroot00000000000000VERSION = 2 REVISION = 1 .macro DATE .ascii "31.03.2009" .endm .macro VERS .ascii "Atari800 2.1" .endm .macro VSTRING .ascii "Atari800 2.1 (31.03.2009)" .byte 13,10,0 .endm .macro VERSTAG .byte 0 .ascii "$VER: Atari800 2.1 (31.03.2009)" .byte 0 .endm atari800-5.0.0/src/amiga/ReadMe000066400000000000000000000042631425067567700160210ustar00rootroot00000000000000Short: V2.4 of the Atari 8-bit emulator Uploader: mail@sebastianbauer.info (Sebastian Bauer) Author: mail@sebastianbauer.info (Sebastian Bauer), Atari800 Emulator Development Team Type: misc/emu Kurz: V2.4 des Atari 8-bit Emulator Requires: OS4 Version: 2.4 This is the Amiga port of the Atari800 Emulator. It requires at least OS4 (e.g. the prerelease CD). Install ~~~~~~~ Extract the archive and copy the resulting Atari800 drawer anywhere you like. Later, copy the ROM Files into the ROMs directory. Those ROMs can be extracted from an old XFormer Archive. See http://atari800.github.io/ for details. From there you find also the information how to obtain the source code which is released under the GPL. History ~~~~~~~ Version 2.4 (16.3.2005) - matches version 1.3.6 of original sources Version 2.3 (29.12.2004) - matches version 1.3.4 of original sources Version 2.2 (8.10.2004) - the workbench window is now an appwindow. Drop in a file to boot/run its contents - tries to start a given workbench argument - added an iconify option (menu entry and title gadget) Version 2.1 (24.09.2004) - major changes within the Amiga front end, including o) ported to OS4, requires PPC processor o) dropped MUI GUI, GUI is now menu driven o) dropped overlay support for now o) Atari joystick can be mapped to the keyboard o) sound fixes - matches 1.3.3 of original sources Version 1.2 (15.10.2000) - compiled the latest source - a special 68060 version has been added Version 1.1 (12.06.2000) - console keys and sound should work better now Version 1.0 (31.05.2000) - initial public release How can you reach me? ~~~~~~~~~~~~~~~~~~~~~ My e-mail address is: mail@sebastianbauer.info Address: Sebastian Bauer Neustdter Str. 50 07768 Kahla Germany Visit my homepage at http://www.sebastianbauer.info/ Here you can find the latest version of the Atari800 emulator for Amiga but also other things for Amiga, for example SimpleFind3, SimpleHTML, SimplePac and the Freeciv Port. Also look at the offical Atari800 Emulator homepage at http://atari800.sourceforce.net/ __ / / __ / / Only Amiga makes it possible... \ \/ / \__/ atari800-5.0.0/src/amiga/amiga.c000066400000000000000000001715671425067567700161770ustar00rootroot00000000000000/* * amiga.c - Amiga specific port code * * Copyright (c) 2000 Sebastian Bauer * Copyright (c) 2000-2014 Atari800 development team (see DOC/CREDITS) * Newest changes by Ventzislav Tzvetkov - http://drhirudo.hit.bg * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "atari.h" #include "ui.h" #include "screen.h" #include "input.h" #undef FILENAME_SIZE #undef UBYTE #undef UWORD #undef ULONG #define __USE_INLINE__ #define DoMethod IDoMethod #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #include "binload.h" #include "colours.h" #include "input.h" #include "monitor.h" #include "pokeysnd.h" #include "screen.h" #include "sio.h" #include "statesav.h" #include "amiga.h" #include "support.h" #include "afile.h" #include "cfg.h" #include "akey.h" /******************************/ #include "Atari800_rev.h" /* joystick emulation keys are loaded from config file Here the defaults if there is no keymap in the config file... */ /* a runtime switch for the kbd_joy_X_enabled vars is in the UI */ int PLATFORM_kbd_joy_0_enabled = TRUE; /* enabled by default, doesn't hurt */ int PLATFORM_kbd_joy_1_enabled = FALSE; /* disabled, would steal normal keys */ /* real joysticks */ static int fd_joystick0 = -1; static int fd_joystick1 = -1; #define minjoy 10000 /* real joystick tolerancy */ static char __attribute__((used)) verstag[] = VERSTAG; /******************************/ #define PORT_SOURCE_UNASSIGNED 0 #define PORT_SOURCE_GAMEPORT 1 #define PORT_SOURCE_NUMERIC 2 #define PORT_SOURCE_CURSOR 3 static char *port_source_text[] = { "UNASSIGNED","GAMEPORT","NUMERICPAD","CURSOR",NULL }; /******************************/ #define DISPLAY_WINDOW 0 #define DISPLAY_SCALABLEWINDOW 1 #define DISPLAY_CUSTOMSCREEN 2 static char *display_text[] = { "WINDOW","SCALBALEWINDOW","CUSTOMSCREEN",NULL }; /*******************************/ struct timezone; double fps; /******************************/ #define ICONIFY_GID 1 /*******************************/ struct Library *IntuitionBase; struct Library *GfxBase; struct Library *LayersBase; struct Library *AslBase; struct Device *TimerBase; struct Library *AHIBase; struct Library *GadToolsBase; struct Library *CyberGfxBase; struct Library *KeymapBase; struct Library *UtilityBase; struct Library *WorkbenchBase; struct Library *IconBase; struct Library *LowLevelBase; struct IntuitionIFace *IIntuition; struct GraphicsIFace *IGraphics; struct LayersIFace *ILayers; struct TimerIFace *ITimer; struct AslIFace *IAsl; struct GadToolsIFace *IGadTools; struct CyberGfxIFace *ICyberGfx; struct KeymapIFace *IKeymap; struct UtilityIFace *IUtility; struct WorkbenchIFace *IWorkbench; struct IconIFace *IIcon; struct LowLevelIFace *ILowLevel; /* Timer */ static struct MsgPort *timer_msg_port; static struct TimeRequest *timer_request; static BOOL timer_error; /* Sound */ static struct MsgPort *ahi_msg_port; static struct AHIRequest *ahi_request; static struct AHIRequest *ahi_soundreq[2]; static BOOL ahi_current; static UWORD ahi_fps; /* frames per second */ static UWORD ahi_rupf; /* real updates per frame */ static UBYTE *ahi_streambuf[2]; static ULONG ahi_streamfreq = 48000; /* playing frequence */ static ULONG ahi_streamlen; /* App Window */ static struct MsgPort *app_port; /* initialized within Atari_Initialise() */ static struct AppWindow *app_window; /* initialized during SetupDisplay() */ /* Emulation */ static int menu_consol; static int keyboard_consol; static int trig[2]; static int stick[2]; /* Settings */ static LONG DisplayType; static LONG UseBestID = TRUE; static LONG SoundEnabled = TRUE; static LONG ShowFPS; static ULONG DisplayID = INVALID_ID; static ULONG PortSource[2]; /* Emulator GUI */ static LONG ScreenIsCustom; static struct Screen *ScreenMain; static ULONG ScreenDepth; static APTR VisualInfoMain; static struct Window *WindowMain = NULL; static struct Menu *MenuMain; static Object *IconifyImage; static Object *IconifyGadget; static BOOL SizeVerify; /* SizeVerify State (don't draw anything) */ static UBYTE pentable[256]; static BOOL pensallocated; static UBYTE *tempscreendata; static struct RastPort lineRastPort; static struct BitMap *lineBitMap; struct FileRequester *DiskFileReq; struct FileRequester *CartFileReq; struct FileRequester *StateFileReq; struct FileRequester *BinFileReq; static int PaddlePos; char atari_disk_dirs[UI_MAX_DIRECTORIES][FILENAME_MAX]; char atari_rom_dir[FILENAME_MAX]; char atari_h1_dir[FILENAME_MAX]; char atari_h2_dir[FILENAME_MAX]; char atari_h3_dir[FILENAME_MAX]; char atari_h4_dir[FILENAME_MAX]; char atari_exe_dir[FILENAME_MAX]; char atari_state_dir[FILENAME_MAX]; int disk_directories; /************************************************************************** Returns the Programm's Diskobject **************************************************************************/ struct DiskObject *GetProgramObject(void) { struct DiskObject *obj; extern char program_name[]; /* from startup.c */ BPTR odir; odir = CurrentDir(GetProgramDir()); obj = GetIconTags(program_name, ICONGETA_FailIfUnavailable, FALSE, ICONGETA_GenerateImageMasks, FALSE, TAG_DONE); if(!obj) obj = GetIconTags(NULL, ICONGETA_GetDefaultType, WBTOOL, TAG_DONE); CurrentDir(odir); return obj; } /************************************************************************** Load any file. Returns TRUE on success. **************************************************************************/ int Atari_LoadAnyFile(STRPTR name) { return AFILE_OpenFile(name, TRUE, 1, FALSE) != AFILE_ERROR; } /************************************************************************** This is the menu when the emulator is running **************************************************************************/ static struct NewMenu MenuEntries[] = { {NM_TITLE, "Project", NULL, 0, 0L, (APTR)MEN_PROJECT}, {NM_ITEM, "About...", "?", 0, 0L, (APTR)MEN_PROJECT_ABOUT}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Boot Disk...", "B", 0, 0L, (APTR)MEN_SYSTEM_BOOT}, {NM_ITEM, "Insert Disk", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID}, {NM_SUB, "Drive 1...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID1}, {NM_SUB, "Drive 2...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID2}, {NM_SUB, "Drive 3...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID3}, {NM_SUB, "Drive 4...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID4}, {NM_SUB, "Drive 5...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID5}, {NM_SUB, "Drive 6...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID6}, {NM_SUB, "Drive 7...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID7}, {NM_SUB, "Drive 8...", NULL, 0, 0L, (APTR)MEN_SYSTEM_ID8}, {NM_ITEM, "Eject Disk", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED}, {NM_SUB, "Drive 1", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED1}, {NM_SUB, "Drive 2", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED2}, {NM_SUB, "Drive 3", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED3}, {NM_SUB, "Drive 4", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED4}, {NM_SUB, "Drive 5", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED5}, {NM_SUB, "Drive 6", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED6}, {NM_SUB, "Drive 7", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED7}, {NM_SUB, "Drive 8", NULL, 0, 0L, (APTR)MEN_SYSTEM_ED8}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Load State...", "L", 0, 0L, (APTR)MEN_PROJECT_LOADSTATE}, {NM_ITEM, "Save State...", "S", 0, 0L, (APTR)MEN_PROJECT_SAVESTATE}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Load BIN...", NULL, 0, 0L, (APTR)MEN_PROJECT_LOADBIN}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Internal User Interface", "I", 0, 0L, (APTR)MEN_SYSTEM_UI}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Iconify", NULL, 0, 0L, (APTR)MEN_PROJECT_ICONIFY}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Quit...", "Q", 0, 0L, (APTR)MEN_PROJECT_QUIT}, {NM_TITLE, "Console", NULL, 0, 0L, (APTR)MEN_CONSOLE}, {NM_ITEM, "Option", "F2", NM_COMMANDSTRING, 0L, (APTR)MEN_CONSOLE_OPTION}, {NM_ITEM, "Select", "F3", NM_COMMANDSTRING, 0L, (APTR)MEN_CONSOLE_SELECT}, {NM_ITEM, "Start", "F4", NM_COMMANDSTRING, 0L, (APTR)MEN_CONSOLE_START}, {NM_ITEM, "Help", "Help", NM_COMMANDSTRING, 0L, (APTR)MEN_CONSOLE_HELP}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Break", "F7", NM_COMMANDSTRING, 0L, (APTR)MEN_CONSOLE_BREAK}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Reset", "F5", NM_COMMANDSTRING, 0L, (APTR)MEN_CONSOLE_RESET}, {NM_ITEM, "Coldstart", "Shift F5", NM_COMMANDSTRING, 0L, (APTR)MEN_CONSOLE_COLDSTART}, {NM_TITLE, "Settings", NULL, 0, 0L, (APTR)MEN_SETTINGS}, {NM_ITEM, "Show Framerate?", NULL, MENUTOGGLE|CHECKIT, 0L, (APTR)MEN_SETTINGS_FRAMERATE}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Display in", NULL, 0, 0L, NULL}, {NM_SUB, "Window?", NULL, CHECKIT, 2+4, (APTR)MEN_SETTINGS_WINDOW}, {NM_SUB, "Scalable Window?", NULL, CHECKIT, 1+4, (APTR)MEN_SETTINGS_SCALABLEWINDOW}, {NM_SUB, "Custom Screen?", NULL, CHECKIT, 1+2, (APTR)MEN_SETTINGS_CUSTOMSCREEN}, {NM_ITEM, "Atari Gameport 0", NULL, 0, 0L, NULL}, {NM_SUB, "Gameport 0", NULL, CHECKIT, 2+4+8, (APTR)MEN_SETTINGS_PORT0_GAMEPORT}, {NM_SUB, "Numeric Pad", NULL, CHECKIT, 1+4+8, (APTR)MEN_SETTINGS_PORT0_NUMERICPAD}, {NM_SUB, "Cursor Keys", NULL, CHECKIT, 1+2+8, (APTR)MEN_SETTINGS_PORT0_CURSORKEYS}, {NM_SUB, "Unassigned", NULL, CHECKIT, 1+2+4, (APTR)MEN_SETTINGS_PORT0_UNASSIGNED}, {NM_ITEM, "Atari Gameport 1", NULL, 0, 0L, NULL}, {NM_SUB, "Gameport 1", NULL, CHECKIT, 2+4+8, (APTR)MEN_SETTINGS_PORT1_GAMEPORT}, {NM_SUB, "Numeric Pad", NULL, CHECKIT, 1+4+8, (APTR)MEN_SETTINGS_PORT1_NUMERICPAD}, {NM_SUB, "Cursor Keys", NULL, CHECKIT, 1+2+8, (APTR)MEN_SETTINGS_PORT1_CURSORKEYS}, {NM_SUB, "Unassigned", NULL, CHECKIT, 1+2+4, (APTR)MEN_SETTINGS_PORT1_UNASSIGNED}, {NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL}, {NM_ITEM, "Save Settings", NULL, 0, 0L, (APTR)MEN_SETTINGS_SAVE}, {NM_END, NULL, NULL, 0, 0L, NULL} }; /************************************************************************** Close all previously opened libraries **************************************************************************/ VOID CloseLibraries(void) { if (LowLevelBase) CloseLibraryInterface(LowLevelBase, ILowLevel); if (IconBase) CloseLibraryInterface(IconBase, IIcon); if (WorkbenchBase) CloseLibraryInterface(WorkbenchBase, IWorkbench); if (CyberGfxBase) CloseLibraryInterface(CyberGfxBase, ICyberGfx); if (KeymapBase) CloseLibraryInterface(KeymapBase,IKeymap); if (GadToolsBase) CloseLibraryInterface(GadToolsBase,IGadTools); if (AslBase) CloseLibraryInterface(AslBase,IAsl); if (LayersBase) CloseLibraryInterface(LayersBase,ILayers); if (GfxBase) CloseLibraryInterface(GfxBase,IGraphics); if (UtilityBase) CloseLibraryInterface(UtilityBase, IUtility); if (IntuitionBase) CloseLibraryInterface(IntuitionBase,IIntuition); } /************************************************************************** Open all necessary and optional libraries. Returns TRUE if succeeded **************************************************************************/ BOOL OpenLibraries(void) { if ((IntuitionBase = OpenLibraryInterface ("intuition.library", 39, &IIntuition))) { if ((UtilityBase = OpenLibraryInterface ("utility.library", 50, &IUtility))) { if ((GfxBase = OpenLibraryInterface ("graphics.library", 39, &IGraphics))) { if ((LayersBase = OpenLibraryInterface ("layers.library", 39, &ILayers))) { if ((AslBase = OpenLibraryInterface ("asl.library", 39, &IAsl))) { if ((GadToolsBase = OpenLibraryInterface("gadtools.library",39, &IGadTools))) { if ((KeymapBase = OpenLibraryInterface("keymap.library",36, &IKeymap))) { if ((CyberGfxBase = OpenLibraryInterface("cybergraphics.library",41, &ICyberGfx))) { if ((WorkbenchBase = OpenLibraryInterface("workbench.library",36, &IWorkbench))) { if ((IconBase = OpenLibraryInterface("icon.library",50,&IIcon))) { if ((LowLevelBase = OpenLibraryInterface("lowlevel.library",44,&ILowLevel))) return TRUE; } } } } } } } } } } return FALSE; } /************************************************************************** Free sound stuff **************************************************************************/ VOID FreeSound(void) { if(ahi_soundreq[0]) { if(!CheckIO((struct IORequest*)ahi_soundreq[0])) { AbortIO((struct IORequest*)ahi_soundreq[0]); WaitIO((struct IORequest*)ahi_soundreq[0]); } } if(ahi_soundreq[1]) { if(!CheckIO((struct IORequest*)ahi_soundreq[1])) { AbortIO((struct IORequest*)ahi_soundreq[1]); WaitIO((struct IORequest*)ahi_soundreq[1]); } } if(ahi_request ) { if(AHIBase) { if(!CheckIO((struct IORequest*)ahi_request)) { AbortIO((struct IORequest*)ahi_request); WaitIO((struct IORequest*)ahi_request); } CloseDevice((struct IORequest*)ahi_request); } DeleteIORequest((struct IORequest*)ahi_request); } if(ahi_msg_port) DeleteMsgPort(ahi_msg_port); if(ahi_streambuf[0]) FreeVec(ahi_streambuf[0]); if(ahi_streambuf[1]) FreeVec(ahi_streambuf[1]); } /************************************************************************** Allocate Soundstuff **************************************************************************/ BOOL SetupSound(void) { if(Atari800_tv_mode== Atari800_TV_PAL) { ahi_fps = 50; ahi_rupf = 312; } else { ahi_fps = 60; ahi_rupf = 262; } if(!SoundEnabled) return TRUE; if((ahi_msg_port = CreateMsgPort())) { if((ahi_request = (struct AHIRequest *) CreateIORequest( ahi_msg_port, sizeof(struct AHIRequest)))) { ahi_request->ahir_Version = 4; /* Open at least version 4. */ if (!OpenDevice(AHINAME, AHI_DEFAULT_UNIT, (struct IORequest *) ahi_request, 0)) { AHIBase = (struct Library *) ahi_request->ahir_Std.io_Device; #ifdef STEREO_SOUND ahi_streamlen = (ahi_streamfreq/ahi_fps) * 2; POKEYSND_Init(POKEYSND_FREQ_17_EXACT, ahi_streamfreq, 2, 0); #else ahi_streamlen = ahi_streamfreq/ahi_fps; POKEYSND_Init(POKEYSND_FREQ_17_EXACT, ahi_streamfreq, 1, 0); #endif if((ahi_streambuf[0] = AllocVec(ahi_streamlen*3, MEMF_PUBLIC|MEMF_CLEAR))) { if((ahi_streambuf[1] = AllocVec(ahi_streamlen*3, MEMF_PUBLIC|MEMF_CLEAR))) { ahi_request->ahir_Std.io_Message.mn_Node.ln_Pri = -50; ahi_request->ahir_Std.io_Command = CMD_WRITE; ahi_request->ahir_Std.io_Data = NULL; ahi_request->ahir_Std.io_Length = ahi_streamlen; ahi_request->ahir_Std.io_Offset = 0; ahi_request->ahir_Frequency = ahi_streamfreq; #ifdef STEREO_SOUND ahi_request->ahir_Type = AHIST_S8S; #else ahi_request->ahir_Type = AHIST_M8S; #endif ahi_request->ahir_Volume = 0x10000; /* Full volume */ ahi_request->ahir_Position = 0x8000; /* Centered */ ahi_request->ahir_Link = NULL; if((ahi_soundreq[0] = (struct AHIRequest*)AllocVec(sizeof(struct AHIRequest),MEMF_PUBLIC))) { if((ahi_soundreq[1] = (struct AHIRequest*)AllocVec(sizeof(struct AHIRequest),MEMF_PUBLIC))) { return TRUE; } FreeVec(ahi_soundreq[0]); ahi_soundreq[0] = NULL; } FreeVec(ahi_streambuf[1]); ahi_streambuf[1] = NULL; } FreeVec(ahi_streambuf[0]); ahi_streambuf[0] = NULL; } CloseDevice((struct IORequest*)ahi_request); } DeleteIORequest((struct IORequest*)ahi_request); ahi_request = NULL; } DeleteMsgPort(ahi_msg_port); ahi_msg_port = NULL; } SoundEnabled = FALSE; return FALSE; } /************************************************************************** Free everything which is assoicated with the Atari Screen while Emulating **************************************************************************/ VOID FreeDisplay(void) { int i; if (MenuMain) { if (WindowMain) ClearMenuStrip(WindowMain); FreeMenus(MenuMain); MenuMain = NULL; } if (WindowMain) { if (app_window) { RemoveAppWindow(app_window); } CloseWindow( WindowMain ); WindowMain = NULL; } if (IconifyImage) { DisposeObject(IconifyImage); IconifyImage = NULL; } if (IconifyGadget) { DisposeObject(IconifyGadget); IconifyGadget = NULL; } if (VisualInfoMain) { FreeVisualInfo( VisualInfoMain ); VisualInfoMain = NULL; } if (lineBitMap) { FreeBitMap(lineBitMap); lineBitMap = NULL; } if (tempscreendata) { FreeVec(tempscreendata); tempscreendata=NULL; } if (ScreenMain) { if (ScreenIsCustom) CloseScreen(ScreenMain); else { if (pensallocated) { for(i=0;i<256;i++) ReleasePen(ScreenMain->ViewPort.ColorMap,pentable[i]); pensallocated = 0; } UnlockPubScreen(NULL,ScreenMain); } ScreenMain = NULL; } } /************************************************************************** Ensures that the scaledscreendata is big enough **************************************************************************/ LONG EnsureScaledDisplay(LONG Width) { ULONG depth; if (lineBitMap) { if (GetBitMapAttr(lineBitMap, BMA_WIDTH) >= Width) return 1; FreeBitMap(lineBitMap); } depth = GetBitMapAttr(ScreenMain->RastPort.BitMap, BMA_DEPTH); lineBitMap = AllocBitMap(Width,1,depth,BMF_MINPLANES|BMF_DISPLAYABLE,ScreenMain->RastPort.BitMap); InitRastPort(&lineRastPort); lineRastPort.BitMap = lineBitMap; return !!lineBitMap; } /************************************************************************** Allocate everything which is assoicated with the Atari Screen while Emulating **************************************************************************/ LONG SetupDisplay(void) { UWORD ScreenWidth = 0, ScreenHeight = 0; struct MenuItem *mi; int i; STATIC WORD ScreenPens[NUMDRIPENS+1]; ScreenPens[DETAILPEN] = 0; ScreenPens[BLOCKPEN] = 15; ScreenPens[TEXTPEN] = 0; ScreenPens[SHINEPEN] = 15; ScreenPens[SHADOWPEN] = 0; ScreenPens[FILLPEN] = 120; ScreenPens[FILLTEXTPEN] = 0; ScreenPens[BACKGROUNDPEN] = 9; ScreenPens[HIGHLIGHTTEXTPEN] = 15; ScreenPens[BARDETAILPEN] = 0; ScreenPens[BARBLOCKPEN] = 15; ScreenPens[BARTRIMPEN] = 0; ScreenPens[NUMDRIPENS] = -1; #if DRI_VERSION > 2 ScreenPens[MENUBACKGROUNDPEN] = 13; ScreenPens[SELECTPEN] = 120; #endif if (DisplayType == DISPLAY_CUSTOMSCREEN) { ULONG ScreenDisplayID; static ULONG colors32[3*256+2]; ScreenIsCustom = TRUE; ScreenWidth = Screen_WIDTH - 64; ScreenHeight = Screen_HEIGHT; ScreenDepth = 8; ScreenDisplayID = DisplayID; if (UseBestID) ScreenDisplayID = GetBestID(ScreenWidth,ScreenHeight,ScreenDepth); colors32[0] = 256 << 16; for (i=0;i<256;i++) { int rgb = Colours_table[i]; int red,green,blue; red = rgb & 0x00ff0000; green = rgb & 0x0000ff00; blue = rgb & 0x000000ff; colors32[1+i*3] = red | (red << 8) | (red << 16) | (red << 24); colors32[2+i*3] = green | (green << 8) | (green << 16) | (green << 24); colors32[3+i*3] = blue | (blue << 8) | (blue << 16) | (blue << 24); } ScreenMain = OpenScreenTags( NULL, SA_Left, 0, SA_Top, 0, SA_Width, ScreenWidth, SA_Height, ScreenHeight, SA_Depth, ScreenDepth, SA_Pens, ScreenPens, SA_Quiet, TRUE, SA_Type, CUSTOMSCREEN, SA_AutoScroll, TRUE, SA_DisplayID, ScreenDisplayID, SA_Colors32, colors32, SA_Exclusive, TRUE, SA_OffScreenDragging, TRUE, TAG_DONE); } else { if ((ScreenMain = LockPubScreen(NULL))) { ScreenIsCustom = FALSE; ScreenWidth = Screen_WIDTH - 56; ScreenHeight = Screen_HEIGHT; ScreenDepth = GetBitMapAttr(ScreenMain->RastPort.BitMap,BMA_DEPTH); if (ScreenDepth <= 8 || !CyberGfxBase) { int i; for(i=0;i<256;i++) { ULONG rgb = Colours_table[i]; ULONG red = (rgb & 0x00ff0000) >> 16; ULONG green = (rgb & 0x0000ff00) >> 8; ULONG blue = (rgb & 0x000000ff); red |= (red<<24)|(red<<16)|(red<<8); green |= (green<<24)|(green<<16)|(green<<8); blue |= (blue<<24)|(blue<<16)|(blue<<8); pentable[i] = ObtainBestPenA(ScreenMain->ViewPort.ColorMap,red,green,blue,NULL); } pensallocated = 1; } /* Iconfiy Gadget is optional */ if (IntuitionBase->lib_Version >= 50) { struct DrawInfo *dri; if ((dri = GetScreenDrawInfo(ScreenMain))) { if ((IconifyImage = NewObject( NULL, "sysiclass", SYSIA_DrawInfo, dri, SYSIA_Which, ICONIFYIMAGE, TAG_DONE ))) { IconifyGadget = NewObject( NULL, "buttongclass", GA_Image, IconifyImage, GA_Titlebar, TRUE, /* Implies GA_TopBorder, TRUE */ GA_RelRight, 0, /* Just to set GFLG_RELRIGHT */ GA_ID, ICONIFY_GID, GA_RelVerify, TRUE, TAG_DONE ); } FreeScreenDrawInfo(ScreenMain,dri); } } if (!(tempscreendata = (UBYTE*)AllocVec(Screen_WIDTH*(Screen_HEIGHT+16),MEMF_CLEAR))) { UnlockPubScreen(NULL,ScreenMain); ScreenMain = NULL; } } } if (ScreenMain) { if ((VisualInfoMain = GetVisualInfoA( ScreenMain, NULL ))) { if ((MenuMain = CreateMenus(MenuEntries, GTMN_NewLookMenus, TRUE, TAG_DONE))) { LayoutMenus( MenuMain, VisualInfoMain, GTMN_NewLookMenus, TRUE, TAG_DONE); if ((WindowMain = OpenWindowTags( NULL, WA_Activate, TRUE, WA_NewLookMenus, TRUE, WA_MenuHelp, TRUE, WA_InnerWidth, ScreenWidth, WA_InnerHeight, ScreenHeight, WA_IDCMP, IDCMP_MOUSEBUTTONS | IDCMP_MOUSEMOVE | IDCMP_MENUPICK | IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_NEWSIZE | IDCMP_SIZEVERIFY | IDCMP_GADGETUP, WA_ReportMouse, TRUE, WA_CustomScreen, ScreenMain, WA_Borderless, ScreenIsCustom, WA_CloseGadget, !ScreenIsCustom, WA_DragBar, !ScreenIsCustom, WA_DepthGadget, !ScreenIsCustom, ScreenIsCustom?TAG_IGNORE:WA_Title, "Atari 800", ScreenIsCustom?TAG_IGNORE:WA_ScreenTitle, VERS, WA_SizeGadget, DisplayType == DISPLAY_SCALABLEWINDOW, WA_SmartRefresh, TRUE, DisplayType == DISPLAY_SCALABLEWINDOW?WA_SizeBBottom:TAG_IGNORE, TRUE, DisplayType == DISPLAY_SCALABLEWINDOW?WA_MaxWidth:TAG_IGNORE,-1, DisplayType == DISPLAY_SCALABLEWINDOW?WA_MaxHeight:TAG_IGNORE,-1, TAG_DONE))) { if (IconifyGadget) { AddGList( WindowMain, (struct Gadget*)IconifyGadget, (UWORD)0, 1, NULL ); RefreshGList( (struct Gadget*)IconifyGadget, WindowMain, NULL, 1 ); } if ((mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_FRAMERATE))) mi->Flags |= ShowFPS?CHECKED:0; switch (DisplayType) { case DISPLAY_SCALABLEWINDOW: mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_SCALABLEWINDOW); break; case DISPLAY_CUSTOMSCREEN: mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_CUSTOMSCREEN); break; default: mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_WINDOW); break; } if (mi) mi->Flags |= CHECKED; switch (PortSource[0]) { case PORT_SOURCE_GAMEPORT:mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT0_GAMEPORT);break; case PORT_SOURCE_NUMERIC:mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT0_NUMERICPAD);break; case PORT_SOURCE_CURSOR:mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT0_CURSORKEYS);break; default: mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT0_UNASSIGNED);break; } if (mi) mi->Flags |= CHECKED; switch (PortSource[1]) { case PORT_SOURCE_GAMEPORT:mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT1_GAMEPORT);break; case PORT_SOURCE_NUMERIC:mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT1_NUMERICPAD);break; case PORT_SOURCE_CURSOR:mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT1_CURSORKEYS);break; default: mi = FindUserData(MenuMain,(APTR)MEN_SETTINGS_PORT1_UNASSIGNED);break; } if (mi) mi->Flags |= CHECKED; mi = FindUserData(MenuMain, (APTR)MEN_SETTINGS_PORT0_GAMEPORT); if (mi) { if (SetJoyPortAttrs(0,SJA_Type, SJA_TYPE_GAMECTLR, NULL )) mi->Flags |= ITEMENABLED; else mi->Flags &= ~ITEMENABLED; } mi = FindUserData(MenuMain, (APTR)MEN_SETTINGS_PORT1_GAMEPORT); if (mi) { if (SetJoyPortAttrs(1,SJA_Type, SJA_TYPE_GAMECTLR, NULL )) mi->Flags |= ITEMENABLED; else mi->Flags &= ~ITEMENABLED; } SetMenuStrip(WindowMain, MenuMain); /* An AppWindow is not required */ app_window = AddAppWindowA(1 /* id */, 0, WindowMain, app_port, NULL);; return 1; } } } } FreeDisplay(); return 0; } /************************************************************************** Free timer stuff **************************************************************************/ VOID FreeTimer(void) { if (timer_request) { if (ITimer) DropInterface((struct Interface*)ITimer); if (!timer_error) CloseDevice((struct IORequest *)timer_request); DeleteIORequest((struct IORequest*)timer_request); timer_request = NULL; } if (timer_msg_port) { DeleteMsgPort(timer_msg_port); timer_msg_port = NULL; } } /************************************************************************** Setup Timer **************************************************************************/ BOOL SetupTimer(void) { if((timer_msg_port = CreateMsgPort())) { timer_request = (struct TimeRequest*)CreateIORequest( timer_msg_port, sizeof( struct TimeRequest )); if( timer_request ) { timer_error = OpenDevice( TIMERNAME, UNIT_MICROHZ, (struct IORequest*)timer_request, 0); if( !timer_error ) { TimerBase = timer_request->Request.io_Device; if ((ITimer = (struct TimerIFace*)GetInterface((struct Library*)TimerBase,"main",1,NULL))) return TRUE; } } } return FALSE; } /************************************************************************** Iconify the atari emu by closing the display and placing an icon on the wb. **************************************************************************/ VOID Iconify(void) { struct DiskObject *dobj = GetProgramObject(); struct AppIcon *app_icon; extern char program_name[]; if (!dobj) return; if ((app_icon = AddAppIcon(2,0L,program_name,app_port,ZERO,dobj, TAG_DONE))) { int ready = 0; FreeDisplay(); while (!ready) { struct AppMessage *amsg; WaitPort(app_port); while ((amsg = (struct AppMessage *)GetMsg(app_port))) { if (amsg->am_Type == AMTYPE_APPICON && amsg->am_ID == 2) ready = 1; ReplyMsg((struct Message*)amsg); } } RemoveAppIcon(app_icon); if (!SetupDisplay()) Atari800_ErrExit(); } FreeDiskObject(dobj); } /************************************************************************** Handle the menu **************************************************************************/ int HandleMenu(UWORD code) { int keycode = -1; while( code != MENUNULL ) { struct MenuItem *mi = ItemAddress( MenuMain, code ); if( mi ) { LONG udata = (LONG)GTMENUITEM_USERDATA( mi ); switch(udata) { case MEN_PROJECT_ABOUT: { struct EasyStruct easy; easy.es_StructSize = sizeof(struct EasyStruct); easy.es_Flags = 0; easy.es_Title = "Atari800"; easy.es_TextFormat = "Atari800 version %ld.%ld\n\nBased upon " Atari800_TITLE "\nCopyright (C) 2000-2009\nAtari800 development team\nAmiga port done by Sebastian Bauer\nand Ventzislav Tzvetkov"; easy.es_GadgetFormat = "Ok"; EasyRequest( WindowMain, &easy, NULL, VERSION, REVISION); } break; case MEN_PROJECT_LOADSTATE: if(AslRequestTags(StateFileReq, ASLFR_DoSaveMode, FALSE, ASLFR_Screen, ScreenMain, TAG_DONE)) { BPTR cd = Lock(StateFileReq->fr_Drawer, ACCESS_READ); if(cd) { BPTR odir = CurrentDir(cd); StateSav_ReadAtariState(StateFileReq->fr_File,"rb"); CurrentDir(odir); UnLock(cd); } } break; case MEN_PROJECT_SAVESTATE: if(AslRequestTags(StateFileReq, ASLFR_DoSaveMode, TRUE, ASLFR_Screen, ScreenMain, TAG_DONE)) { BPTR cd = Lock(StateFileReq->fr_Drawer, ACCESS_READ); if (cd) { BPTR odir = CurrentDir(cd); STRPTR fileName = AddSuffix(StateFileReq->fr_File,".sav"); if(fileName) { StateSav_SaveAtariState(fileName,"wb",TRUE); FreeVec(fileName); } CurrentDir(odir); UnLock(cd); } } break; case MEN_PROJECT_LOADBIN: if(AslRequestTags(BinFileReq, ASLFR_DoSaveMode, FALSE, ASLFR_Screen, ScreenMain, TAG_DONE)) { BPTR cd = Lock(BinFileReq->fr_Drawer, ACCESS_READ); if(cd) { BPTR odir = CurrentDir(cd); BINLOAD_Loader(BinFileReq->fr_File); CurrentDir(odir); UnLock(cd); } } break; case MEN_PROJECT_ICONIFY: keycode = -2; break; case MEN_PROJECT_QUIT: keycode = AKEY_EXIT; break; case MEN_SYSTEM_BOOT: if(InsertDisk (1)) { menu_consol = 7; keycode = AKEY_COLDSTART; } break; case MEN_SYSTEM_ID1: InsertDisk(1); break; case MEN_SYSTEM_ID2: InsertDisk(2); break; case MEN_SYSTEM_ID3: InsertDisk(3); break; case MEN_SYSTEM_ID4: InsertDisk(4); break; case MEN_SYSTEM_ID5: InsertDisk(5); break; case MEN_SYSTEM_ID6: InsertDisk(6); break; case MEN_SYSTEM_ID7: InsertDisk(7); break; case MEN_SYSTEM_ID8: InsertDisk(8); break; case MEN_SYSTEM_ED1: SIO_Dismount(1); break; case MEN_SYSTEM_ED2: SIO_Dismount(2); break; case MEN_SYSTEM_ED3: SIO_Dismount(3); break; case MEN_SYSTEM_ED4: SIO_Dismount(4); break; case MEN_SYSTEM_ED5: SIO_Dismount(5); break; case MEN_SYSTEM_ED6: SIO_Dismount(6); break; case MEN_SYSTEM_ED7: SIO_Dismount(7); break; case MEN_SYSTEM_ED8: SIO_Dismount(8); break; case MEN_SYSTEM_UI: keycode = AKEY_UI; break; case MEN_CONSOLE_RESET: Atari800_Warmstart(); menu_consol = 7; break; case MEN_CONSOLE_OPTION: menu_consol &= 0x03; keycode = AKEY_NONE; break; case MEN_CONSOLE_SELECT: menu_consol &= 0x05; keycode = AKEY_NONE; break; case MEN_CONSOLE_START: menu_consol &= 0x06; keycode = AKEY_NONE; break; case MEN_CONSOLE_HELP: keycode = AKEY_HELP; break; case MEN_CONSOLE_BREAK: keycode = AKEY_BREAK; break; case MEN_CONSOLE_COLDSTART: Atari800_Coldstart(); menu_consol = 7; break; case MEN_SETTINGS_FRAMERATE: ShowFPS = !!(mi->Flags & CHECKED); break; case MEN_SETTINGS_PORT0_GAMEPORT: PortSource[0] = PORT_SOURCE_GAMEPORT; break; case MEN_SETTINGS_PORT0_NUMERICPAD: PortSource[0] = PORT_SOURCE_NUMERIC; break; case MEN_SETTINGS_PORT0_CURSORKEYS: PortSource[0] = PORT_SOURCE_CURSOR; break; case MEN_SETTINGS_PORT0_UNASSIGNED: PortSource[0] = PORT_SOURCE_UNASSIGNED; break; case MEN_SETTINGS_PORT1_GAMEPORT: PortSource[1] = PORT_SOURCE_GAMEPORT; break; case MEN_SETTINGS_PORT1_NUMERICPAD: PortSource[1] = PORT_SOURCE_NUMERIC; break; case MEN_SETTINGS_PORT1_CURSORKEYS: PortSource[1] = PORT_SOURCE_CURSOR; break; case MEN_SETTINGS_PORT1_UNASSIGNED: PortSource[1] = PORT_SOURCE_UNASSIGNED; break; case MEN_SETTINGS_WINDOW: DisplayType = DISPLAY_WINDOW; break; case MEN_SETTINGS_SCALABLEWINDOW: DisplayType = DISPLAY_SCALABLEWINDOW; break; case MEN_SETTINGS_CUSTOMSCREEN: DisplayType = DISPLAY_CUSTOMSCREEN; break; case MEN_SETTINGS_SAVE: CFG_WriteConfig(); break; } /* if (key_buf[0x3c]) // F2 consol &= 0x03; // OPTION key ON else consol |= 0x04; // OPTION key OFF if (key_buf[0x3d]) // F3 consol &= 0x05; // SELECT key ON else consol |= 0x02; // SELECT key OFF if (key_buf[0x3e]) // F4 consol &= 0x06; // START key ON else consol |= 0x01; // START key OFF */ code = mi->NextSelect; } else code = MENUNULL; } return keycode; } /************************************************************************** Handle the Vanillakeys **************************************************************************/ int HandleVanillakey(int code) { int keycode; switch (code) { case 0x01: keycode = AKEY_CTRL_a; break; case 0x02: keycode = AKEY_CTRL_b; break; case 0x03: keycode = AKEY_CTRL_c; break; case 0x04: keycode = AKEY_CTRL_d; break; case 0x05: keycode = AKEY_CTRL_E; break; case 0x06: keycode = AKEY_CTRL_F; break; case 0x07: keycode = AKEY_CTRL_G; break; /* case 0x08 : keycode = AKEY_CTRL_H; break; */ /* TAB - see case '\t' : case 0x09 : keycode = AKEY_CTRL_I; break; */ case 0x0a: keycode = AKEY_CTRL_J; break; case 0x0b: keycode = AKEY_CTRL_K; break; case 0x0c: keycode = AKEY_CTRL_L; break; /* case 0x0d : keycode = AKEY_CTRL_M; break; */ case 0x0e: keycode = AKEY_CTRL_N; break; case 0x0f: keycode = AKEY_CTRL_O; break; case 0x10: keycode = AKEY_CTRL_P; break; case 0x11: keycode = AKEY_CTRL_Q; break; case 0x12: keycode = AKEY_CTRL_R; break; case 0x13: keycode = AKEY_CTRL_S; break; case 0x14: keycode = AKEY_CTRL_T; break; case 0x15: keycode = AKEY_CTRL_U; break; case 0x16: keycode = AKEY_CTRL_V; break; case 0x17: keycode = AKEY_CTRL_W; break; case 0x18: keycode = AKEY_CTRL_X; break; case 0x19: keycode = AKEY_CTRL_Y; break; case 0x1a: keycode = AKEY_CTRL_Z; break; case 8: keycode = AKEY_BACKSPACE; break; case 13: keycode = AKEY_RETURN; break; case 0x1b: keycode = AKEY_ESCAPE; break; case '0': keycode = AKEY_0; break; case '1': keycode = AKEY_1; break; case '2': keycode = AKEY_2; break; case '3': keycode = AKEY_3; break; case '4': keycode = AKEY_4; break; case '5': keycode = AKEY_5; break; case '6': keycode = AKEY_6; break; case '7': keycode = AKEY_7; break; case '8': keycode = AKEY_8; break; case '9': keycode = AKEY_9; break; case 'A': case 'a': keycode = AKEY_a; break; case 'B' : case 'b' : keycode = AKEY_b; break; case 'C' : case 'c' : keycode = AKEY_c; break; case 'D' : case 'd' : keycode = AKEY_d; break; case 'E' : case 'e' : keycode = AKEY_e; break; case 'F' : case 'f' : keycode = AKEY_f; break; case 'G' : case 'g' : keycode = AKEY_g; break; case 'H' : case 'h' : keycode = AKEY_h; break; case 'I' : case 'i' : keycode = AKEY_i; break; case 'J' : case 'j' : keycode = AKEY_j; break; case 'K' : case 'k' : keycode = AKEY_k; break; case 'L' : case 'l' : keycode = AKEY_l; break; case 'M' : case 'm' : keycode = AKEY_m; break; case 'N' : case 'n' : keycode = AKEY_n; break; case 'O' : case 'o' : keycode = AKEY_o; break; case 'P' : case 'p' : keycode = AKEY_p; break; case 'Q' : case 'q' : keycode = AKEY_q; break; case 'R' : case 'r' : keycode = AKEY_r; break; case 'S' : case 's' : keycode = AKEY_s; break; case 'T' : case 't' : keycode = AKEY_t; break; case 'U' : case 'u' : keycode = AKEY_u; break; case 'V' : case 'v' : keycode = AKEY_v; break; case 'W' : case 'w' : keycode = AKEY_w; break; case 'X' : case 'x' : keycode = AKEY_x; break; case 'Y' : case 'y' : keycode = AKEY_y; break; case 'Z' : case 'z' : keycode = AKEY_z; break; case ' ' : keycode = AKEY_SPACE; break; case '\t' : keycode = AKEY_TAB; break; case '!' : keycode = AKEY_EXCLAMATION; break; case '"' : keycode = AKEY_DBLQUOTE; break; case '#' : keycode = AKEY_HASH; break; case '$' : keycode = AKEY_DOLLAR; break; case '%' : keycode = AKEY_PERCENT; break; case '&' : keycode = AKEY_AMPERSAND; break; case '\'' : keycode = AKEY_QUOTE; break; case '@' : keycode = AKEY_AT; break; case '(' : keycode = AKEY_PARENLEFT; break; case ')' : keycode = AKEY_PARENRIGHT; break; case '<' : keycode = AKEY_LESS; break; case '>' : keycode = AKEY_GREATER; break; case '=' : keycode = AKEY_EQUAL; break; case '?' : keycode = AKEY_QUESTION; break; case '-' : keycode = AKEY_MINUS; break; case '+' : keycode = AKEY_PLUS; break; case '*' : keycode = AKEY_ASTERISK; break; case '/' : keycode = AKEY_SLASH; break; case ':' : keycode = AKEY_COLON; break; case ';' : keycode = AKEY_SEMICOLON; break; case ',' : keycode = AKEY_COMMA; break; case '.' : keycode = AKEY_FULLSTOP; break; case '_' : keycode = AKEY_UNDERSCORE; break; case '[' : keycode = AKEY_BRACKETLEFT; break; case ']' : keycode = AKEY_BRACKETRIGHT; break; case '^' : keycode = AKEY_CIRCUMFLEX; break; case '\\' : keycode = AKEY_BACKSLASH; break; case '|' : keycode = AKEY_BAR; break; default : keycode = AKEY_NONE; break; } return keycode; } /************************************************************************** Handle the Rawkey events **************************************************************************/ int HandleRawkey( UWORD code, UWORD qual, APTR iaddress ) { int keycode = -1; if ((qual & IEQUALIFIER_NUMERICPAD) && (PortSource[0] == PORT_SOURCE_NUMERIC || PortSource[1] == PORT_SOURCE_NUMERIC)) { /* TODO: This needs to be improved when pressing multiple keys */ static int matrix[8]; int i, before_pressed = 0, pressed = 0; int local_stick = -1; before_pressed = 0; for (i=0;i<8;i++) if (matrix[i]) before_pressed = 1; /* key pressed */ if (!(code & 0x80)) { switch (code) { case 29: matrix[0] = 1; local_stick = 9; break; case 30: matrix[1] = 1; local_stick = 13; break; case 31: matrix[2] = 1; local_stick = 5; break; case 45: matrix[3] = 1; local_stick = 11; break; case 47: matrix[4] = 1; local_stick = 7; break; case 61: matrix[5] = 1; local_stick = 10; break; case 62: matrix[6] = 1; local_stick = 14; break; case 63: matrix[7] = 1; local_stick = 6; break; case 46: /* 5 in the middle */ if (PortSource[0] == PORT_SOURCE_NUMERIC) trig[0] = 0; if (PortSource[1] == PORT_SOURCE_NUMERIC) trig[1] = 0; return -1; } } else { switch (code&0x7f) { case 29: matrix[0] = 0; break; case 30: matrix[1] = 0; break; case 31: matrix[2] = 0; break; case 45: matrix[3] = 0; break; case 47: matrix[4] = 0; break; case 61: matrix[5] = 0; break; case 62: matrix[6] = 0; break; case 63: matrix[7] = 0; break; case 46: /* 5 in the middle */ if (PortSource[0] == PORT_SOURCE_NUMERIC) trig[0] = 1; if (PortSource[1] == PORT_SOURCE_NUMERIC) trig[1] = 1; return -1; } } pressed = 0; for (i=0;i<8;i++) if (matrix[i]) pressed = 1; if (local_stick != -1 || (before_pressed && !pressed)) { if (!pressed) local_stick = 15; if (PortSource[0] == PORT_SOURCE_NUMERIC) stick[0] = local_stick; if (PortSource[1] == PORT_SOURCE_NUMERIC) stick[1] = local_stick; return -1; } } switch (code) { case 0x51: keyboard_consol &= 0x03; keycode = AKEY_NONE; break; /* F2 pressed */ case 0xd1: keyboard_consol |= 0x04; keycode = AKEY_NONE; break; /* F2 released */ case 0x52: keyboard_consol &= 0x05; keycode = AKEY_NONE; break; /* F3 pressed */ case 0xd2: keyboard_consol |= 0x02; keycode = AKEY_NONE; break; /* F3 released */ case 0x53: keyboard_consol &= 0x06; keycode = AKEY_NONE; break; /* F4 pressed */ case 0xd3: keyboard_consol |= 0x01; keycode = AKEY_NONE; break; /* F4 released */ case 0x56: /* F7 */ if (BINLOAD_wait_active) { BINLOAD_pause_loading = TRUE; keycode = AKEY_NONE; } else keycode = AKEY_BREAK; break; case 0x59: keycode = AKEY_NONE; break; case 0x5f: keycode = AKEY_HELP; break; case 0x54: /* F5 */ if (qual & (IEQUALIFIER_RSHIFT | IEQUALIFIER_RSHIFT)) keycode = AKEY_COLDSTART; else keycode = AKEY_WARMSTART; keyboard_consol = 7; break; case CURSORLEFT: /* Cursor Left */ if (qual & IEQUALIFIER_CONTROL || (PortSource[0] != PORT_SOURCE_CURSOR && PortSource[1] != PORT_SOURCE_CURSOR)) { keycode = AKEY_LEFT; } else { if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] &= ~4; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] &= ~4; } break; case CURSORLEFT|0x80: if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] |= 4; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] |= 4; break; case CURSORRIGHT: /* Cursor Right */ if (qual & IEQUALIFIER_CONTROL || (PortSource[0] != PORT_SOURCE_CURSOR && PortSource[1] != PORT_SOURCE_CURSOR)) { keycode = AKEY_RIGHT; } else { if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] &= ~8; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] &= ~8; } break; case CURSORRIGHT|0x80: if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] |= 8; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] |= 8; break; case CURSORUP: /* Cursor Up */ if (qual & IEQUALIFIER_CONTROL || (PortSource[0] != PORT_SOURCE_CURSOR && PortSource[1] != PORT_SOURCE_CURSOR)) { keycode = AKEY_UP; } else { if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] &= ~1; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] &= ~1; } break; case CURSORUP|0x80: if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] |= 1; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] |= 1; break; case CURSORDOWN: /* Cursor Down */ if (qual & IEQUALIFIER_CONTROL || (PortSource[0] != PORT_SOURCE_CURSOR && PortSource[1] != PORT_SOURCE_CURSOR)) { keycode = AKEY_DOWN; } else { if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] &= ~2; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] &= ~2; } break; case CURSORDOWN|0x80: if (PortSource[0] == PORT_SOURCE_CURSOR) stick[0] |= 2; if (PortSource[1] == PORT_SOURCE_CURSOR) stick[1] |= 2; break; case 101: /* R ALT */ if (PortSource[0] == PORT_SOURCE_CURSOR) trig[0] = 0; if (PortSource[1] == PORT_SOURCE_CURSOR) trig[1] = 0; break; case 101|0x80: /* R ALT - released */ if (PortSource[0] == PORT_SOURCE_CURSOR) trig[0] = 1; if (PortSource[1] == PORT_SOURCE_CURSOR) trig[1] = 1; break; default: { struct InputEvent ev; char key; ev.ie_Class = IECLASS_RAWKEY; ev.ie_SubClass = 0; ev.ie_Code = code; ev.ie_Qualifier = qual; ev.ie_EventAddress = (APTR) *((ULONG *) iaddress); ev.ie_NextEvent = NULL; if (MapRawKey( &ev, &key, 1, NULL )) { keycode = HandleVanillakey(key); } } break; } return keycode; } /************************************************************************** Play the sound. Called by the emulator. **************************************************************************/ void Sound_Update(void) { static int sent[2] = {0,0}; if (SoundEnabled) { if (sent[ahi_current]) WaitIO(((struct IORequest*)ahi_soundreq[ahi_current])); POKEYSND_Process(ahi_streambuf[ahi_current], ahi_streamlen); *ahi_soundreq[ahi_current] = *ahi_request; ahi_soundreq[ahi_current]->ahir_Std.io_Data = ahi_streambuf[ahi_current]; ahi_soundreq[ahi_current]->ahir_Std.io_Length = ahi_streamlen; ahi_soundreq[ahi_current]->ahir_Std.io_Offset = 0; if (ahi_current && sent[0]) ahi_soundreq[1]->ahir_Link = ahi_soundreq[0]; else if (!ahi_current && sent[1]) ahi_soundreq[0]->ahir_Link = ahi_soundreq[1]; SendIO((struct IORequest*)ahi_soundreq[ahi_current]); sent[ahi_current] = 1; ahi_current = !ahi_current; } } /************************************************************************** Initialize the Atari Prefs to sensible values **************************************************************************/ void Atari_ConfigInit(void) { int i; strcpy(CFG_osa_filename, "PROGDIR:ROMs/atariosa.rom"); strcpy(CFG_osb_filename, "PROGDIR:ROMs/atariosb.rom"); strcpy(CFG_xlxe_filename, "PROGDIR:ROMs/atarixl.rom"); strcpy(CFG_basic_filename, "PROGDIR:ROMs/ataribas.rom"); CFG_5200_filename[0] = '\0'; for (i=0;i destwidth) || srcheight > destheight || destwidth > (sizeof(lineBuffer)/sizeof(lineBuffer[0]))) return; w = (srcwidth) << 16; h = (srcheight) << 16; dx = w / destwidth; dy = h / destheight; ss = src; y = (0) << 16; i = destheight; while (i > 0) { int lines, j; ss = src + srcmod * (y >> 16); dest32 = (ULONG*)lineBuffer; count = (destwidth + 3) / 4; x = 0 << 16; while (count > 0) { quad = (ss[x >> 16] << 24); x = x + dx; quad += (ss[x >> 16] << 16); x = x + dx; quad += (ss[x >> 16] << 8); x = x + dx; quad += (ss[x >> 16] << 0); x = x + dx; *dest32++ = quad; count--; } lines = (0x1ffff - (y & 0xffff))/dy; #if 1 WriteLUTPixelArray(lineBuffer, 0, 0, destwidth, WindowMain->RPort, Colours_table, destx, desty + destheight-i, destwidth, 1, CTABFMT_XRGB8); for (j=1;jRPort, destx, desty + destheight - i, WindowMain->RPort, destx, desty + destheight - i + j, destwidth, 1, 0xc0); } #else if (lines == 1) { WriteLUTPixelArray(lineBuffer, 0, 0, destwidth, WindowMain->RPort, Colours_table, destx, desty + destheight-i, destwidth, 1, CTABFMT_XRGB8); } else { int j; WriteLUTPixelArray(lineBuffer, 0, 0, destwidth, &lineRastPort, Colours_table, 0, 0, destwidth, 1, CTABFMT_XRGB8); for (j=0;jRPort, destx, desty + destheight - i + j, destwidth, 1, 0xc0); } } #endif y = y + dy * lines; i -= lines; } } /************************************************************************** Do the graphical output. **************************************************************************/ void PLATFORM_DisplayScreen(void) { UBYTE *screen = (UBYTE *) Screen_atari; static char fpsbuf[32]; int fgpen = 15,bgpen = 0; if (DisplayType == DISPLAY_CUSTOMSCREEN) { WriteChunkyPixels(WindowMain->RPort, 0, 0, Screen_WIDTH - 1 - 64, Screen_HEIGHT - 1, screen + 32, Screen_WIDTH); } else { LONG atariWidth = Screen_WIDTH - 56; LONG atariHeight = Screen_HEIGHT; LONG atariX = 28; LONG atariY = 0; LONG offx = WindowMain->BorderLeft; LONG offy = WindowMain->BorderTop; if (InnerWidth(WindowMain) != atariWidth || InnerHeight(WindowMain) != atariHeight) { if (pensallocated) { ScreenData28bit(screen, tempscreendata, pentable, Screen_WIDTH, Screen_HEIGHT); ScalePixelArray( tempscreendata + atariX, atariWidth, atariHeight, Screen_WIDTH, WindowMain->RPort, offx, offy, InnerWidth(WindowMain), InnerHeight(WindowMain), RECTFMT_LUT8); fgpen = pentable[fgpen]; bgpen = pentable[bgpen]; } else { if (EnsureScaledDisplay(InnerWidth(WindowMain))) { Scale8Bit(screen + atariX, atariWidth, atariHeight, Screen_WIDTH, WindowMain->RPort, offx, offy, InnerWidth(WindowMain), InnerHeight(WindowMain)); } } } else { if (pensallocated) { ScreenData28bit(screen, tempscreendata, pentable, Screen_WIDTH, Screen_HEIGHT); WriteChunkyPixels(WindowMain->RPort, offx, offy, offx + atariWidth - 1, offy + atariHeight - 1, tempscreendata + atariX, Screen_WIDTH); fgpen = pentable[fgpen]; bgpen = pentable[bgpen]; } else { WriteLUTPixelArray(screen, atariX, atariY, Screen_WIDTH, WindowMain->RPort, Colours_table, offx, offy, atariWidth, atariHeight, CTABFMT_XRGB8); } } } if (ShowFPS) { LONG len; extern double fps; double fpsv; double fpsn = modf(fps, &fpsv); snprintf(fpsbuf,sizeof(fpsbuf),"%d.%d/%d (%d%%)",(int)fpsv,(int)(fpsn*10),ahi_fps,(int)(100*fps/ahi_fps)); SetABPenDrMd(WindowMain->RPort,fgpen,bgpen,JAM2); len = TextLength(WindowMain->RPort,fpsbuf,strlen(fpsbuf)); Move(WindowMain->RPort, WindowMain->Width - 4 - len - WindowMain->BorderRight, 4 + WindowMain->RPort->TxBaseline + WindowMain->BorderTop); Text(WindowMain->RPort, fpsbuf,strlen(fpsbuf)); } } /************************************************************************** Handle Keyboard **************************************************************************/ int PLATFORM_Keyboard (void) { static int old_keycode = -1; int keycode = -1; int iconify = 0; struct IntuiMessage *imsg; BINLOAD_pause_loading = FALSE; while ((imsg = (struct IntuiMessage*) GetMsg (WindowMain->UserPort))) { ULONG cl = imsg->Class; UWORD code = imsg->Code; UWORD qual = imsg->Qualifier; APTR iaddress = imsg->IAddress; // WORD mx = imsg->MouseX; /*WORD my = imsg->MouseY;*/ if (cl == IDCMP_MENUVERIFY) { ReplyMsg((struct Message*)imsg); continue; } if (cl == IDCMP_SIZEVERIFY) { SizeVerify = TRUE; ReplyMsg((struct Message*)imsg); continue; } ReplyMsg((struct Message*)imsg); switch (cl) { case IDCMP_NEWSIZE: SizeVerify = FALSE; break; case IDCMP_RAWKEY: keycode = HandleRawkey(code,qual,iaddress); break; case IDCMP_CLOSEWINDOW: keycode = AKEY_EXIT; break; case IDCMP_MENUPICK: keycode = HandleMenu(code); if (keycode == -2) { iconify = 1; keycode = -1; } break; case IDCMP_GADGETUP: iconify = 1; break; case IDCMP_MOUSEBUTTONS : #if 0 if (Controller == controller_Paddle) { switch (code) { case SELECTDOWN : stick0 = 251; break; case SELECTUP : stick0 = 255; break; default: break; } } #endif break; case IDCMP_MOUSEMOVE : #if 0 if (Controller == controller_Paddle) { if (mx > 57) { if (mx < 287) PaddlePos = 228 - (mx - 58); else PaddlePos = 0; } else { PaddlePos = 228; } } #endif break; default: break; } old_keycode = keycode; } if (keycode == -1) keycode = old_keycode; if (menu_consol != 7) { INPUT_key_consol = menu_consol; menu_consol = 7; } else INPUT_key_consol = keyboard_consol; if (app_window) { /* handle application messages (e.g. icons drops on window */ struct AppMessage *amsg; while ((amsg = (struct AppMessage *)GetMsg(app_port))) { if (amsg->am_Type == AMTYPE_APPWINDOW && amsg->am_ID == 1 && amsg->am_NumArgs > 0) { BPTR olddir; olddir = CurrentDir(amsg->am_ArgList[0].wa_Lock); if (Atari_LoadAnyFile(amsg->am_ArgList[0].wa_Name)) { ActivateWindow(WindowMain); } CurrentDir(olddir); } ReplyMsg((struct Message*)amsg); } } if (iconify) { Iconify(); keycode = -1; } return keycode; } /************************************************************************** Handle Joystick Port (direction) **************************************************************************/ int PLATFORM_PORT (ULONG num) { ULONG JoyStickState; if (PortSource[num] == PORT_SOURCE_GAMEPORT) { JoyStickState = ReadJoyPort(num);//==0? 1 : 0); // Swap Joystick Ports if (JoyStickState & JPF_JOY_LEFT) { if (JoyStickState & JPF_JOY_UP) return INPUT_STICK_UL; else if (JoyStickState & JPF_JOY_DOWN) return INPUT_STICK_LL; else return INPUT_STICK_LEFT;} if (JoyStickState & JPF_JOY_RIGHT) { if (JoyStickState & JPF_JOY_UP) return INPUT_STICK_UR; else if (JoyStickState & JPF_JOY_DOWN) return INPUT_STICK_LR; else return INPUT_STICK_RIGHT;} if (JoyStickState & JPF_JOY_UP) return INPUT_STICK_FORWARD; if (JoyStickState & JPF_JOY_DOWN) return INPUT_STICK_BACK; } return stick[num]; } /************************************************************************** Handle Joystick Triggers **************************************************************************/ static void get_platform_TRIG(UBYTE *t0, UBYTE *t1) { ULONG JoyStickState; int trig0, trig1; trig0 = trig1 = 1; if (fd_joystick0 != -1) { #ifdef LPTJOY int status; ioctl(fd_joystick0, LPGETSTATUS, &status); if (status & 8) *t0 = 1; else *t0 = 0; #endif /* LPTJOY */ } else {JoyStickState = ReadJoyPort(0); if (JoyStickState != 0) { trig0 = 1; if (JoyStickState & JPF_BUTTON_RED) trig0 = 0; } *t0 = trig0; } if (fd_joystick1 != -1) { #ifdef LPTJOY int status; ioctl(fd_joystick1, LPGETSTATUS, &status); if (status & 8) *t1 = 1; else *t1 = 0; #endif /* LPTJOY */ } else { JoyStickState = ReadJoyPort(1); if (JoyStickState != 0) { trig1 = 1; if (JoyStickState & JPF_BUTTON_RED) trig1 = 0; } *t1 = trig1; } } int PLATFORM_TRIG(int num) { #ifndef DONT_DISPLAY UBYTE a, b; get_platform_TRIG(&a, &b); switch (num) { // Swapped ports on the Amiga case 0: return a; case 1: return b; default: break; } #endif return 1; } /************************************************************************** ... **************************************************************************/ void Sound_Pause(void) { if (SoundEnabled) { SoundEnabled=0; } } /************************************************************************** ... **************************************************************************/ void Sound_Continue(void) { if (!SoundEnabled) { SoundEnabled=1; } } /************************************************************************** Insert a disk into the drive **************************************************************************/ LONG InsertDisk( LONG Drive ) { char Filename[256]; int Success = FALSE; if (AslRequestTags( DiskFileReq, ASLFR_Screen, ScreenMain, TAG_DONE)) { SIO_Dismount( Drive ); strcpy( Filename, DiskFileReq->fr_Drawer ); if (AddPart( Filename, DiskFileReq->fr_File,255) != DOSFALSE ) { if (SIO_Mount (Drive, Filename, 0)) /* last parameter is read only */ { Success = TRUE; } } } return Success; } /************************************************************************** Insert a ROM (not improved yet) **************************************************************************/ LONG InsertROM(LONG CartType) { struct FileRequester *FileRequester = NULL; char Filename[256]; int Success = FALSE; if ((FileRequester = (struct FileRequester*) AllocAslRequestTags (ASL_FileRequest, TAG_DONE))) { if (AslRequestTags (FileRequester, ASLFR_Screen, ScreenMain, TAG_DONE)) { if (FileRequester->fr_Drawer) Strlcpy(Filename, FileRequester->fr_Drawer, sizeof(Filename)); else Filename[0] = 0; AddPart(Filename, FileRequester->fr_File, sizeof(Filename)); if (CartType == 0) { /* Remove_ROM (); if (Insert_8K_ROM(Filename)) { Atari800_Coldstart (); }*/ } else if (CartType == 1) { /* Remove_ROM (); if (Insert_16K_ROM(Filename)) { Atari800_Coldstart (); }*/ } else if (CartType == 2) { /* Remove_ROM (); if (Insert_OSS_ROM(Filename)) { Atari800_Coldstart (); }*/ } } else { /* * Cancelled */ } } else { printf ("Unable to create requester\n"); } return Success; } char program_name[256]; /************************************************************************** main **************************************************************************/ int main(int argc, char **argv) { struct WBStartup *wbs = NULL; if (!argc) { /* started from workbench */ if ((wbs = (struct WBStartup*)argv)) { strncpy(program_name, wbs->sm_ArgList->wa_Name, sizeof(program_name)-1); program_name[sizeof(program_name)-1]= 0; } } else { /* started from shell */ strncpy(program_name,argv[0],sizeof(program_name)-1); program_name[sizeof(program_name)-1]=0; } /* initialise Atari800 core */ if (!Atari800_Initialise(&argc, argv)) return 20; if (wbs && wbs->sm_NumArgs > 1) { BPTR odir = CurrentDir(wbs->sm_ArgList[1].wa_Lock); Atari_LoadAnyFile(wbs->sm_ArgList[1].wa_Name); CurrentDir(odir); } for (;;) { LONG LastDisplayType = DisplayType; INPUT_key_code = PLATFORM_Keyboard(); if (LastDisplayType != DisplayType) { FreeDisplay(); if (!(SetupDisplay())) { Atari800_ErrExit(); break; } } Atari800_Frame(); if (Atari800_display_screen && !SizeVerify) PLATFORM_DisplayScreen(); } return 0; } atari800-5.0.0/src/amiga/amiga.h000066400000000000000000000023741425067567700161710ustar00rootroot00000000000000#ifndef _ATARI_AMIGA_H_ #define _ATARI_AMIGA_H_ LONG InsertROM(LONG CartType); LONG InsertDisk( LONG Drive ); VOID FreeDisplay(void); LONG SetupDisplay(void); VOID Iconify(void); enum{ MEN_PROJECT=1, MEN_PROJECT_ABOUT, MEN_PROJECT_LOADSTATE, MEN_PROJECT_SAVESTATE, MEN_PROJECT_LOADBIN, MEN_PROJECT_ICONIFY, MEN_PROJECT_QUIT, MEN_SYSTEM, MEN_SYSTEM_BOOT, MEN_SYSTEM_ID, MEN_SYSTEM_ID1, MEN_SYSTEM_ID2, MEN_SYSTEM_ID3, MEN_SYSTEM_ID4, MEN_SYSTEM_ID5, MEN_SYSTEM_ID6, MEN_SYSTEM_ID7, MEN_SYSTEM_ID8, MEN_SYSTEM_ED, MEN_SYSTEM_ED1, MEN_SYSTEM_ED2, MEN_SYSTEM_ED3, MEN_SYSTEM_ED4, MEN_SYSTEM_ED5, MEN_SYSTEM_ED6, MEN_SYSTEM_ED7, MEN_SYSTEM_ED8, MEN_SYSTEM_UI, MEN_CONSOLE, MEN_CONSOLE_OPTION, MEN_CONSOLE_SELECT, MEN_CONSOLE_START, MEN_CONSOLE_HELP, MEN_CONSOLE_BREAK, MEN_CONSOLE_RESET, MEN_CONSOLE_COLDSTART, MEN_SETTINGS, MEN_SETTINGS_FRAMERATE, MEN_SETTINGS_CUSTOMSCREEN, MEN_SETTINGS_WINDOW, MEN_SETTINGS_SCALABLEWINDOW, MEN_SETTINGS_SAVE, MEN_SETTINGS_PORT0_GAMEPORT, MEN_SETTINGS_PORT0_NUMERICPAD, MEN_SETTINGS_PORT0_CURSORKEYS, MEN_SETTINGS_PORT0_UNASSIGNED, MEN_SETTINGS_PORT1_GAMEPORT, MEN_SETTINGS_PORT1_NUMERICPAD, MEN_SETTINGS_PORT1_CURSORKEYS, MEN_SETTINGS_PORT1_UNASSIGNED, }; #endif /* _ATARI_AMIGA_H_ */ atari800-5.0.0/src/amiga/amiga_asm.asm000066400000000000000000000050371425067567700173610ustar00rootroot00000000000000; atari_asm.asm - Amiga specific port code ; ; Copyright (c) 2000 Sebastian Bauer ; Copyright (C) 2000-2003 Atari800 development team (see DOC/CREDITS) ; ; This file is part of the Atari800 emulator project which emulates ; the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. ; ; Atari800 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. ; ; Atari800 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 Atari800; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA MC68020 XDEF _ScreenData28bit ; a0 - UBYTE *screen ; a1 - UBYTE *destscreendata ; a2 - UBYTE *colortable8 ; d0 - UWORD width ; d1 - UWORD height _ScreenData28bit: movem.l d2/d7,-(a7) lsr.w #2,d0 subq.l #1,d1 subq.l #1,d0 moveq #0,d2 ; moveq #0,d3 ; moveq #0,d4 ; moveq #0,d5 .heightloop: move.l d0,d7 .widthloop: ; move.b (a0)+,d2 ; move.b (a0)+,d3 ; move.b (a0)+,d4 ; move.b (a0)+,d5 ; move.b (a2,d2),(a1)+ ; move.b (a2,d3),(a1)+ ; move.b (a2,d4),(a1)+ ; move.b (a2,d5),(a1)+ move.b (a0)+,d2 move.b (a2,d2),(a1)+ move.b (a0)+,d2 move.b (a2,d2),(a1)+ move.b (a0)+,d2 move.b (a2,d2),(a1)+ move.b (a0)+,d2 move.b (a2,d2),(a1)+ ; moveq #0,d3 ; moveq #0,d5 ; move.b (a0)+,d2 ; move.b (a2,d2),d3 ; move.b (a0)+,d2 ; lsl.w #8,d3 ; move.b (a2,d2),d4 ; move.b (a0)+,d2 ; or.w d4,d3 ; move.b (a2,d2),d5 ; swap d3 ; move.b (a0)+,d2 ; lsl.w #8,d5 ; move.b (a2,d2),d3 ; or.w d5,d3 ; move.l d3,(a1)+ dbra d7,.widthloop dbra d1,.heightloop movem.l (a7)+,d2/d7 rts XDEF _ScreenData215bit ; a0 - UBYTE *screen ; a1 - UWORD *destscreendata ; a2 - UWORD *colortable15 ; d0 - UWORD width ; d1 - UWORD height _ScreenData215bit: movem.l d2/d3/d7,-(a7) lsr.l #1,d0 subq.l #1,d1 subq.l #1,d0 moveq #0,d2 .heightloop: move.l d0,d7 .widthloop: move.b (a0)+,d2 move.w (a2,d2*2),d3 move.b (a0)+,d2 swap d3 move.w (a2,d2*2),d3 move.l d3,(a1)+ dbra d7,.widthloop dbra d1,.heightloop movem.l (a7)+,d2/d3/d7 rts end atari800-5.0.0/src/amiga/amiga_asm.h000066400000000000000000000011771425067567700170310ustar00rootroot00000000000000#ifndef _AMIGA_ASM_H_ #define _AMIGA_ASM_H_ ASM void ScreenData28bit( register __a0 UBYTE *screen, register __a1 UBYTE *tempscreendata, register __a2 UBYTE *colortable8, register __d0 ULONG width, register __d1 ULONG height); ASM void ScreenData215bit( register __a0 UBYTE *screen, register __a1 UWORD *, register __a2 UWORD *colortable15, register __d0 ULONG width, register __d1 ULONG height); #endif /* _AMIGA_ASM_H_ */ atari800-5.0.0/src/amiga/async.c000066400000000000000000000361321425067567700162220ustar00rootroot00000000000000/* * async.c - async I/O code * * Copyright (c) 2000 Sebastian Bauer * Copyright (c) 2000-2003 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "async.h" //------------------------------------- // AS_OpenAsnycFH #ifdef ASIO_NOEXTERNALS AsyncFile* AS_OpenAsyncFH( BPTR handle, OpenModes mode, LONG bufferSize, BOOL closeIt, struct ExecBase *SysBase, struct DosLibrary *DOSBase ) #else AsyncFile * AS_OpenAsyncFH( BPTR handle, OpenModes mode, LONG bufferSize, BOOL closeIt ) #endif { struct FileHandle *fh; AsyncFile *file = NULL; BPTR lock = NULL; LONG blockSize, blockSize2; D_S( struct InfoData, infoData ); if( mode == MODE_READ ) { if( handle ) { lock = DupLockFromFH( handle ); } } else { if( mode == MODE_APPEND ) { /* in append mode, we open for writing, and then seek to the * end of the file. That way, the initial write will happen at * the end of the file, thus extending it */ if( handle ) { if( Seek( handle, 0, OFFSET_END ) < 0 ) { if( closeIt ) { Close( handle ); } handle = NULL; } } } /* we want a lock on the same device as where the file is. We can't * use DupLockFromFH() for a write-mode file though. So we get sneaky * and get a lock on the parent of the file */ if( handle ) { lock = ParentOfFH( handle ); } } if( handle ) { /* if it was possible to obtain a lock on the same device as the * file we're working on, get the block size of that device and * round up our buffer size to be a multiple of the block size. * This maximizes DMA efficiency. */ blockSize = 512; blockSize2 = 1024; if( lock ) { if( Info( lock, infoData ) ) { blockSize = infoData->id_BytesPerBlock; blockSize2 = blockSize * 2; bufferSize = ( ( bufferSize + blockSize2 - 1 ) / blockSize2 ) * blockSize2; } UnLock(lock); } /* now allocate the ASyncFile structure, as well as the read buffers. * Add 15 bytes to the total size in order to allow for later * quad-longword alignement of the buffers */ for( ;; ) { if(( file = AllocVec( sizeof( AsyncFile ) + bufferSize + 15, MEMF_PUBLIC | MEMF_ANY ) )) { break; } else { if( bufferSize > blockSize2 ) { bufferSize -= blockSize2; } else { break; } } } if( file ) { file->af_File = handle; file->af_ReadMode = ( mode == MODE_READ ); file->af_BlockSize = blockSize; file->af_CloseFH = closeIt; /* initialize the ASyncFile structure. We do as much as we can here, * in order to avoid doing it in more critical sections * * Note how the two buffers used are quad-longword aligned. This * helps performance on 68040 systems with copyback cache. Aligning * the data avoids a nasty side-effect of the 040 caches on DMA. * Not aligning the data causes the device driver to have to do * some magic to avoid the cache problem. This magic will generally * involve flushing the CPU caches. This is very costly on an 040. * Aligning things avoids the need for magic, at the cost of at * most 15 bytes of ram. */ fh = BADDR( file->af_File ); file->af_Handler = fh->fh_Type; file->af_BufferSize = ( ULONG ) bufferSize / 2; file->af_Buffers[ 0 ] = ( APTR ) ( ( ( ULONG ) file + sizeof( AsyncFile ) + 15 ) & 0xfffffff0 ); file->af_Buffers[ 1 ] = file->af_Buffers[ 0 ] + file->af_BufferSize; file->af_CurrentBuf = 0; file->af_SeekOffset = 0; file->af_PacketPending = FALSE; file->af_SeekPastEOF = FALSE; #ifdef ASIO_NOEXTERNALS file->af_SysBase = SysBase; file->af_DOSBase = DOSBase; #endif /* this is the port used to get the packets we send out back. * It is initialized to PA_IGNORE, which means that no signal is * generated when a message comes in to the port. The signal bit * number is initialized to SIGB_SINGLE, which is the special bit * that can be used for one-shot signalling. The signal will never * be set, since the port is of type PA_IGNORE. We'll change the * type of the port later on to PA_SIGNAL whenever we need to wait * for a message to come in. * * The trick used here avoids the need to allocate an extra signal * bit for the port. It is quite efficient. */ file->af_PacketPort.mp_MsgList.lh_Head = ( struct Node * ) &file->af_PacketPort.mp_MsgList.lh_Tail; file->af_PacketPort.mp_MsgList.lh_Tail = NULL; file->af_PacketPort.mp_MsgList.lh_TailPred = ( struct Node * ) &file->af_PacketPort.mp_MsgList.lh_Head; file->af_PacketPort.mp_Node.ln_Type = NT_MSGPORT; /* MH: Avoid problems with SnoopDos */ file->af_PacketPort.mp_Node.ln_Name = NULL; file->af_PacketPort.mp_Flags = PA_IGNORE; file->af_PacketPort.mp_SigBit = SIGB_SINGLE; file->af_PacketPort.mp_SigTask = FindTask( NULL ); file->af_Packet.sp_Pkt.dp_Link = &file->af_Packet.sp_Msg; file->af_Packet.sp_Pkt.dp_Arg1 = fh->fh_Arg1; file->af_Packet.sp_Pkt.dp_Arg3 = file->af_BufferSize; file->af_Packet.sp_Pkt.dp_Res1 = 0; file->af_Packet.sp_Pkt.dp_Res2 = 0; file->af_Packet.sp_Msg.mn_Node.ln_Name = ( STRPTR ) &file->af_Packet.sp_Pkt; file->af_Packet.sp_Msg.mn_Node.ln_Type = NT_MESSAGE; file->af_Packet.sp_Msg.mn_Length = sizeof( struct StandardPacket ); if( mode == MODE_READ ) { /* if we are in read mode, send out the first read packet to * the file system. While the application is getting ready to * read data, the file system will happily fill in this buffer * with DMA transfers, so that by the time the application * needs the data, it will be in the buffer waiting */ file->af_Packet.sp_Pkt.dp_Type = ACTION_READ; file->af_BytesLeft = 0; /* MH: We set the offset to the buffer not being filled, in * order to avoid special case code in SeekAsync. ReadAsync * isn't affected by this, since af_BytesLeft == 0. */ file->af_Offset = file->af_Buffers[ 1 ]; if( file->af_Handler ) { AS_SendPacket( file, file->af_Buffers[ 0 ] ); } } else { file->af_Packet.sp_Pkt.dp_Type = ACTION_WRITE; file->af_BytesLeft = file->af_BufferSize; file->af_Offset = file->af_Buffers[ 0 ]; } } else { if( closeIt ) { Close( handle ); } } } return( file ); } //------------------------------------- // AS_SendPacket /* send out an async packet to the file system. */ VOID AS_SendPacket( struct AsyncFile *file, APTR arg2 ) { #ifdef ASIO_NOEXTERNALS struct ExecBase *SysBase; SysBase = file->af_SysBase; #endif file->af_Packet.sp_Pkt.dp_Port = &file->af_PacketPort; file->af_Packet.sp_Pkt.dp_Arg2 = ( LONG ) arg2; PutMsg( file->af_Handler, &file->af_Packet.sp_Msg ); file->af_PacketPending = TRUE; } //------------------------------------- // AS_WaitPacket /* this function waits for a packet to come back from the file system. If no * packet is pending, state from the previous packet is returned. This ensures * that once an error occurs, it state is maintained for the rest of the life * of the file handle. * * This function also deals with IO errors, bringing up the needed DOS * requesters to let the user retry an operation or cancel it. */ LONG AS_WaitPacket( AsyncFile *file ) { #ifdef ASIO_NOEXTERNALS struct ExecBase *SysBase = file->af_SysBase; struct DosLibrary *DOSBase = file->af_DOSBase; #endif LONG bytes; if( file->af_PacketPending ) { while( TRUE ) { /* This enables signalling when a packet comes back to the port */ file->af_PacketPort.mp_Flags = PA_SIGNAL; /* Wait for the packet to come back, and remove it from the message * list. Since we know no other packets can come in to the port, we can * safely use Remove() instead of GetMsg(). If other packets could come in, * we would have to use GetMsg(), which correctly arbitrates access in such * a case */ Remove( ( struct Node * ) WaitPort( &file->af_PacketPort ) ); /* set the port type back to PA_IGNORE so we won't be bothered with * spurious signals */ file->af_PacketPort.mp_Flags = PA_IGNORE; /* mark packet as no longer pending since we removed it */ file->af_PacketPending = FALSE; bytes = file->af_Packet.sp_Pkt.dp_Res1; if( bytes >= 0 ) { /* packet didn't report an error, so bye... */ return( bytes ); } /* see if the user wants to try again... */ if( ErrorReport( file->af_Packet.sp_Pkt.dp_Res2, REPORT_STREAM, file->af_File, NULL ) ) { return( -1 ); } /* user wants to try again, resend the packet */ AS_SendPacket( file, file->af_Buffers[ file->af_ReadMode ? file->af_CurrentBuf : 1 - file->af_CurrentBuf ] ); } } /* last packet's error code, or 0 if packet was never sent */ SetIoErr( file->af_Packet.sp_Pkt.dp_Res2 ); return( file->af_Packet.sp_Pkt.dp_Res1 ); } //------------------------------------- // AS_RequeuePacket( AsyncFile *file ) /* this function puts the packet back on the message list of our * message port. */ VOID AS_RequeuePacket( AsyncFile *file ) { #ifdef ASIO_NOEXTERNALS struct ExecBase *SysBase = file->af_SysBase; #endif AddHead( &file->af_PacketPort.mp_MsgList, &file->af_Packet.sp_Msg.mn_Node ); file->af_PacketPending = TRUE; } //------------------------------------- //------------------------------------- // AsyncFile *OpenAsync() #ifdef ASIO_NOEXTERNALS _LIBCALL AsyncFile * OpenAsync( _REG( a0 ) const STRPTR fileName, _REG( d0 ) OpenModes mode, _REG( d1 ) LONG bufferSize, _REG( a1 ) struct ExecBase *SysBase, _REG( a2 ) struct DosLibrary *DOSBase ) #else _LIBCALL AsyncFile * OpenAsync( _REG( a0 ) const STRPTR fileName, _REG( d0 ) OpenModes mode, _REG( d1 ) LONG bufferSize ) #endif { static const WORD PrivateOpenModes[] = { MODE_OLDFILE, MODE_NEWFILE, MODE_READWRITE }; BPTR handle; AsyncFile *file = NULL; if(( handle = Open( fileName, PrivateOpenModes[ mode ] ) )) { #ifdef ASIO_NOEXTERNALS file = AS_OpenAsyncFH( handle, mode, bufferSize, TRUE, SysBase, DOSBase ); #else file = AS_OpenAsyncFH( handle, mode, bufferSize, TRUE ); #endif if( !file ) { Close( handle ); } } return( file ); } //------------------------------------- // LONG CloseAsync(AsyncFile *file ) _LIBCALL LONG CloseAsync( _REG( a0 ) AsyncFile *file ) { LONG result; if( file ) { #ifdef ASIO_NOEXTERNALS struct ExecBase *SysBase = file->af_SysBase; struct DosLibrary *DOSBase = file->af_DOSBase; #endif result = AS_WaitPacket( file ); if( result >= 0 ) { if( !file->af_ReadMode ) { /* this will flush out any pending data in the write buffer */ if( file->af_BufferSize > file->af_BytesLeft ) { result = Write( file->af_File, file->af_Buffers[ file->af_CurrentBuf ], file->af_BufferSize - file->af_BytesLeft ); } } } if( file->af_CloseFH ) { Close( file->af_File ); } FreeVec(file); } else { #ifndef ASIO_NOEXTERNALS SetIoErr( ERROR_INVALID_LOCK ); #endif result = -1; } return( result ); } //------------------------------------- // LONG WriteAsync( AsyncFile *file, APTR buffer, LONG numBytes ) _LIBCALL LONG WriteAsync( _REG( a0 ) AsyncFile *file, _REG( a1 ) APTR buffer, _REG( d0 ) LONG numBytes ) { #ifdef ASIO_NOEXTERNALS struct ExecBase *SysBase = file->af_SysBase; #endif LONG totalBytes = 0; /* this takes care of NIL: */ if( !file->af_Handler ) { file->af_Offset = file->af_Buffers[ 0 ]; file->af_BytesLeft = file->af_BufferSize; return( numBytes ); } while( numBytes > file->af_BytesLeft ) { if( file->af_BytesLeft ) { CopyMem( buffer, file->af_Offset, file->af_BytesLeft ); numBytes -= file->af_BytesLeft; buffer = ( APTR ) ( ( ULONG ) buffer + file->af_BytesLeft ); totalBytes += file->af_BytesLeft; } if( AS_WaitPacket( file ) < 0 ) { return( -1 ); } /* send the current buffer out to disk */ AS_SendPacket( file, file->af_Buffers[ file->af_CurrentBuf ] ); file->af_CurrentBuf = 1 - file->af_CurrentBuf; file->af_Offset = file->af_Buffers[ file->af_CurrentBuf ]; file->af_BytesLeft = file->af_BufferSize; } CopyMem( buffer, file->af_Offset, numBytes ); file->af_BytesLeft -= numBytes; file->af_Offset += numBytes; return ( totalBytes + numBytes ); } //------------------------------------- // LONG WriteCharAsync( AsyncFile *file, UBYTE ch ) _CALL LONG WriteCharAsync( _REG( a0 ) AsyncFile *file, _REG( d0 ) UBYTE ch ) { if( file->af_BytesLeft ) { /* if there's any room left in the current buffer, directly write * the byte into it, updating counters and stuff. */ *file->af_Offset = ch; --file->af_BytesLeft; ++file->af_Offset; /* one byte written */ return( 1 ); } /* there was no room in the current buffer, so call the main write * routine. This will effectively send the current buffer out to disk, * wait for the other buffer to come back, and then put the byte into * it. */ { TEXT c; c = ch; /* SAS/C workaround... */ return( WriteAsync( file, &c, 1 ) ); } } //------------------------------------- // LONG ReadAsync( AsyncFile *file, APTR buffer, LONG numBytes ) _LIBCALL LONG ReadAsync( _REG( a0 ) AsyncFile *file, _REG( a1 ) APTR buffer, _REG( d0 ) LONG numBytes ) { #ifdef ASIO_NOEXTERNALS struct ExecBase *SysBase = file->af_SysBase; #endif LONG totalBytes = 0; LONG bytesArrived; /* if we need more bytes than there are in the current buffer, enter the * read loop */ while( numBytes > file->af_BytesLeft ) { /* drain buffer */ CopyMem( file->af_Offset, buffer, file->af_BytesLeft ); numBytes -= file->af_BytesLeft; buffer = ( APTR ) ( ( ULONG ) buffer + file->af_BytesLeft ); totalBytes += file->af_BytesLeft; file->af_BytesLeft = 0; bytesArrived = AS_WaitPacket( file ); if( bytesArrived <= 0 ) { if( bytesArrived == 0 ) { return( totalBytes ); } return( -1 ); } /* ask that the buffer be filled */ AS_SendPacket( file, file->af_Buffers[ 1 - file->af_CurrentBuf ] ); /* in case we tried to seek past EOF */ if( file->af_SeekOffset > bytesArrived ) { file->af_SeekOffset = bytesArrived; } file->af_Offset = file->af_Buffers[ file->af_CurrentBuf ] + file->af_SeekOffset; file->af_CurrentBuf = 1 - file->af_CurrentBuf; file->af_BytesLeft = bytesArrived - file->af_SeekOffset; file->af_SeekOffset = 0; } CopyMem( file->af_Offset, buffer, numBytes ); file->af_BytesLeft -= numBytes; file->af_Offset += numBytes; return( totalBytes + numBytes ); } //------------------------------------- atari800-5.0.0/src/amiga/async.h000066400000000000000000000036551425067567700162330ustar00rootroot00000000000000#ifndef _ASYNC_H_ #define _ASYNC_H_ #include #include #include #include #include #include #include #include /*****************************************************************************/ #ifdef _DCC #ifdef ASIO_SHARED_LIB #define _LIBCALL __geta4 _ASM _ARGS #else #define _LIBCALL _ASM _ARGS #endif #else #ifdef __GNUC__ #define _LIBCALL #else #ifdef __MAXON__ #define _LIBCALL #else /* __SASC__ */ #ifdef ASIO_SHARED_LIB #define _LIBCALL __saveds _ASM _ARGS #else #define _LIBCALL _ASM _ARGS #endif #endif #endif /* _ GNUC_ */ #endif /* _DCC */ #define _CALL _ASM _ARGS /*****************************************************************************/ #ifndef ASIO_NOEXTERNALS extern struct DosLibrary *DOSBase; extern struct ExecBase *SysBase; #endif #ifdef ASIO_SHARED_LIB extern struct ExecBase *SysBase; extern struct Library *UtilityBase; extern struct DosLibrary *DOSBase; #endif /*****************************************************************************/ /* this macro lets us long-align structures on the stack */ #define D_S(type,name) char a_##name[ sizeof( type ) + 3 ]; \ type *name = ( type * ) ( ( LONG ) ( a_##name + 3 ) & ~3 ); #ifndef MIN #define MIN(a,b) ( ( a ) < ( b ) ? ( a ) : ( b ) ) #endif /*****************************************************************************/ #ifdef ASIO_NOEXTERNALS AsyncFile * AS_OpenAsyncFH( BPTR handle, OpenModes mode, LONG bufferSize, BOOL closeIt, struct ExecBase *SysBase, struct DosLibrary *DOSBase ); #else AsyncFile * AS_OpenAsyncFH( BPTR handle, OpenModes mode, LONG bufferSize, BOOL closeIt ); #endif VOID AS_SendPacket( AsyncFile *file, APTR arg2 ); LONG AS_WaitPacket( AsyncFile *file ); VOID AS_RequeuePacket( AsyncFile *file ); VOID AS_RecordSyncFailure( AsyncFile *file ); #endif /* _ASYNC_H_ */ atari800-5.0.0/src/amiga/config.h000066400000000000000000000253061425067567700163600ustar00rootroot00000000000000#ifndef CONFIG_H #define CONFIG_H /* Define to use back slash as directory separator. */ #undef BACK_SLASH /* Target: standard I/O. */ #undef BASIC /* Define to use buffered debug output. */ #undef BUFFERED_LOG /* Define to allow sound clipping. */ #undef CLIP_SOUND /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Define to allow console sound (keyboard clicks). */ #define CONSOLE_SOUND 1 /* Define to activate crash menu after CIM instruction. */ #define CRASH_MENU 1 /* Define to disable bitmap graphics emulation in CURSES target. */ #undef CURSES_BASIC /* Alternate config filename due to 8+3 fs limit. */ #define DEFAULT_CFG_NAME "PROGDIR:Atari800.cfg" /* Target: Windows with DirectX. */ #undef DIRECTX /* Target: DOS VGA. */ #undef DOSVGA /* Define to enable DOS style drives support. */ #undef DOS_DRIVES /* Target: Atari Falcon system. */ #undef FALCON /* Define to use m68k assembler CPU core for Falcon target. */ #undef FALCON_CPUASM /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the `atexit' function. */ #define HAVE_ATEXIT 1 /* Define to 1 if you have the `chmod' function. */ #define HAVE_CHMOD 1 /* Define to 1 if you have the `clock' function. */ #define HAVE_CLOCK 1 /* Define to 1 if you have the header file. */ #undef HAVE_DIRECT_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the header file. */ #define HAVE_ERRNO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the `fdopen' function. */ #define HAVE_FDOPEN 1 /* Define to 1 if you have the `fflush' function. */ #define HAVE_FFLUSH 1 /* Define to 1 if you have the header file. */ #undef HAVE_FILE_H /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fstat' function. */ #define HAVE_FSTAT 1 /* Define to 1 if you have the `getcwd' function. */ #define HAVE_GETCWD 1 /* Define to 1 if you have the `gethostbyaddr' function. */ #undef HAVE_GETHOSTBYADDR /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `png' library (-lpng). */ /*#define HAVE_LIBPNG 1*/ /* Define to 1 if you have the `z' library (-lz). */ /*#define HAVE_LIBZ 1*/ /* Define to 1 if you have the `localtime' function. */ #define HAVE_LOCALTIME 1 /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #define HAVE_MEMSET 1 /* Define to 1 if you have the `mkdir' function. */ #define HAVE_MKDIR 1 /* Define to 1 if you have the `mkstemp' function. */ #define HAVE_MKSTEMP 1 /* Define to 1 if you have the `mktemp' function. */ #define HAVE_MKTEMP 1 /* Define to 1 if you have the `modf' function. */ #define HAVE_MODF 1 /* Define to 1 if you have the `nanosleep' function. */ #undef HAVE_NANOSLEEP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the `opendir' function. */ #define HAVE_OPENDIR 1 /* Define to 1 if you have the `rename' function. */ #define HAVE_RENAME 1 /* Define to 1 if you have the `rewind' function. */ #define HAVE_REWIND 1 /* Define to 1 if you have the `rmdir' function. */ #define HAVE_RMDIR 1 /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `signal' function. */ #define HAVE_SIGNAL 1 /* Define to 1 if you have the header file. */ #define HAVE_SIGNAL_H 1 /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `stat' function. */ #define HAVE_STAT 1 /* Define to 1 if `stat' has the bug that it succeeds when given the zero-length file name argument. */ #undef HAVE_STAT_EMPTY_STRING_BUG /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strrchr' function. */ #define HAVE_STRRCHR 1 /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the `system' function. */ //#define HAVE_SYSTEM 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOUNDCARD_H /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 /* Define to 1 if you have the `time' function. */ #define HAVE_TIME 1 /* Define to 1 if you have the header file. */ #define HAVE_TIME_H 1 /* Define to 1 if you have the `tmpfile' function. */ #define HAVE_TMPFILE 1 /* Define to 1 if you have the `tmpnam' function. */ #define HAVE_TMPNAM 1 /* Define to 1 if you have the `uclock' function. */ #define HAVE_UCLOCK 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_UNIXIO_H /* Define to 1 if you have the `unlink' function. */ #define HAVE_UNLINK 1 /* Define to 1 if you have the `usleep' function. */ #define HAVE_USLEEP 1 /* Define to 1 if you have the `vprintf' function. */ #define HAVE_VPRINTF 1 /* Define to 1 if you have the `vsnprintf' function. */ #define HAVE_VSNPRINTF 1 /* define to enable sound interpolation */ #define INTERPOLATE_SOUND 1 /* Define to use LINUX joystick. */ #undef LINUX_JOYSTICK /* Define to 1 if `lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Define to activate assembler in monitor. */ #define MONITOR_ASSEMBLER 1 /* Define to activate BREAK command in monitor. */ #undef MONITOR_BREAK /* Define to activate user-defined breakpoints. */ #undef MONITOR_BREAKPOINTS /* Define to activate hints in disassembler. */ #define MONITOR_HINTS 1 /* Target: X11 with Motif. */ #undef MOTIF /* Define to allow color changes inside a scanline. */ #define NEW_CYCLE_EXACT 1 /* Define to use page-based attribute array. */ #undef PAGED_ATTRIB /* Target: Sony PlayStation 2. */ #undef PS2 /* Define as the return type of signal handlers (`int' or `void'). */ #define RETSIGTYPE void /* Define to use R: device. */ #undef R_IO_DEVICE /* Target: SDL library. */ #undef SDL /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* Define to allow serial in/out sound. */ #define SERIO_SOUND 1 /* Target: X11 with shared memory extensions. */ #undef SHM /* Define to activate sound support. */ #define SOUND 1 #define SOUND_GAIN 2 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to allow stereo sound. */ #define STEREO 1 #define STEREO_SOUND 1 /* Save additional config file options. */ #define SUPPORTS_ATARI_CONFIGSAVE 1 /* Additional config file options. */ #define SUPPORTS_ATARI_CONFIGURE 1 /* Target: Linux with SVGALib. */ #undef SVGALIB /* Define to use Toshiba Joystick Mouse support. */ #undef SVGA_JOYMOUSE /* Define for drawing every 1/50 sec only 1/refresh of screen. */ #undef SVGA_SPEEDUP /* Alternate system-wide config file for non-Unix OS. */ #undef SYSTEM_WIDE_CFG_FILE /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Define to use clock() instead of gettimeofday(). */ #undef USE_CLOCK /* Target: Curses-compatible library. */ #undef USE_CURSES /* Define for using cursor/ctrl keys for keyboard joystick. */ #undef USE_CURSORBLOCK /* Target: Ncurses library. */ #undef USE_NCURSES /* Define to use very slow computer support (faster -refresh). */ #undef VERY_SLOW /* Define to allow volume only sound. */ #undef VOL_ONLY_SOUND /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ #define WORDS_BIGENDIAN 1 /* Define if unaligned word access is ok. */ #undef WORDS_UNALIGNED_OK /* Target: Standard X11. */ #undef X11 /* Target: X11 with XView. */ #undef XVIEW /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define as `__inline' if that's what the C compiler calls it, or to nothing if it is not supported. */ #undef inline /* Define to `unsigned' if does not define. */ #undef size_t /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ #undef volatile #endif /* Use Signed Samples in POKEY emulation */ #define SIGNED_SAMPLES 1 /* Define two screen arrays used for switching */ #define BITPL_SCR 1 atari800-5.0.0/src/amiga/gui.c000066400000000000000000000206151425067567700156700ustar00rootroot00000000000000/* * amiga.c - Amiga specific port code * * Copyright (c) 2000 Sebastian Bauer * Copyright (c) 2000-2003 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #define ALL_REACTION_CLASSES #include #include #include #include #include #include "gui.h" #include "support.h" struct Library *WindowBase; struct Library *LayoutBase; struct Library *ButtonBase; struct Library *ListBrowserBase; struct Library *TextEditorBase; struct Library *LabelBase; struct Library *StringBase; struct Library *ScrollerBase; struct Library *GetFileBase; struct Library *ChooserBase; struct Library *ClickTabBase; struct Library *CheckBoxBase; struct Library *GetScreenModeBase; struct WindowIFace *IWindow; struct LayoutIFace *ILayout; struct ButtonIFace *IButton; struct ListBrowserIFace *IListBrowser; struct TextEditorIFace *ITextEditor; struct LabelIFace *ILabel; struct StringIFace *IString; struct ScrollerIFace *IScroller; struct GetFileIFace *IGetFile; struct ChooserIFace *IChooser; struct ClickTabIFace *IClickTab; struct CheckBoxIFace *ICheckBox; struct GetScreenModeIFace *IGetScreenMode; #define LIBENTRY(name,version,base,iface) {name,version,(struct Library**)base,(struct Interface**) iface} static struct { STRPTR Name; ULONG Version; struct Library **Base; struct Interface **IFace; } libraries[] = { LIBENTRY("window.class",44,&WindowBase,&IWindow), LIBENTRY("gadgets/getfile.gadget",44,&GetFileBase, &IGetFile), LIBENTRY("gadgets/layout.gadget",44,&LayoutBase, &ILayout), LIBENTRY("gadgets/chooser.gadget",45,&ChooserBase, &IChooser), LIBENTRY("gadgets/clicktab.gadget",44,&ClickTabBase, &IClickTab), LIBENTRY("gadgets/button.gadget",44,&ButtonBase,&IButton), LIBENTRY("gadgets/listbrowser.gadget",44,&ListBrowserBase,&IListBrowser), LIBENTRY("gadgets/texteditor.gadget",50,&TextEditorBase,&ITextEditor), LIBENTRY("gadgets/string.gadget",44,&StringBase,&IString), LIBENTRY("gadgets/scroller.gadget",44,&ScrollerBase,&IScroller), LIBENTRY("gadgets/checkbox.gadget",44,&CheckBoxBase, &ICheckBox), LIBENTRY("gadgets/getscreenmode.gadget",44,&GetScreenModeBase, &IGetScreenMode), LIBENTRY("images/label.image",44,&LabelBase,&ILabel), }; /**************************************** Close libraries *****************************************/ static void CloseGUILibs(void) { int i; for (i=0;iGetAttr(attribute, obj, (ULONG*)&x); return (x); } /********************************************************************** Set attributes of a given object. Difference to RefreshSetGadgetAttrs() is that the parameters are all Objects. ***********************************************************************/ void RefreshSetObjectAttrsA(Object *o, Object *wo, struct TagItem *tags) { struct Gadget *g = (struct Gadget*)o; struct Window *w = (struct Window*)xget(wo,WINDOW_Window); if (!o) return; IIntuition->RefreshSetGadgetAttrsA(g,w,NULL,tags); } void VARARGS68K RefreshSetObjectAttrs(Object *o, Object *wo, ...) { ULONG *tags; va_list args; va_startlinear(args,wo); tags = va_getlinearva(args,ULONG*); RefreshSetObjectAttrsA(o,wo,(struct TagItem *)tags); va_end(args); } /****** GUI ********/ static Object *main_wnd; static Object *displaytype_chooser; static Object *screenmode_getscreenmode; //static Object *bestscreenmode_checkbox; static int quitting; enum { GID_QUIT = 1, GID_SAVE, GID_USE }; /********************************************************************** Handle ***********************************************************************/ static int Handle(struct AtariConfig *config) { int rc = 0; ULONG result; UWORD code; while ((result = RA_HandleInput(main_wnd, &code) ) != WMHI_LASTMSG ) { switch (result & WMHI_CLASSMASK) { case WMHI_CLOSEWINDOW: rc = 1; break; case WMHI_GADGETUP: switch (result & WMHI_GADGETMASK) { case GID_QUIT: rc = 1; quitting = 1; break; case GID_SAVE: rc = 1; break; case GID_USE: rc = 1; break; } } } return rc; } /******************************* Eventlloop ********************************/ static void Loop(struct AtariConfig *config) { int ready = 0; ULONG mainMask; while (!ready) { ULONG mask; IIntuition->GetAttr(WINDOW_SigMask, main_wnd, &mainMask); mask = IExec->Wait(SIGBREAKF_CTRL_C | mainMask); if (mask & mainMask) ready = Handle(config); if (mask & SIGBREAKF_CTRL_C) ready = 1; } } /********************************************************************** Configure atari ***********************************************************************/ BOOL Configure(struct AtariConfig *config) { static char * const tabLabels[] = {"General","Graphics","Sound","Paths",NULL}; static char * const screenTypeLabels[] = {"Custom","Window", "Sizeable Window", NULL}; if (!OpenGUILibs()) goto out; main_wnd = (Object*)WindowObject, WA_Title, "Atari800", WA_Activate, TRUE, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_CloseGadget, TRUE, WA_SizeGadget, TRUE, WA_IDCMP, IDCMP_INTUITICKS, // WINDOW_IDCMPHook, &idcmpHook, WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE, WINDOW_Position, WPOS_CENTERSCREEN, WINDOW_ParentGroup, VGroupObject, LAYOUT_SpaceOuter, TRUE, LAYOUT_DeferLayout, TRUE, LAYOUT_AddChild, ClickTabObject, GA_Text, &tabLabels, CLICKTAB_PageGroup, PageObject, PAGE_Add, VGroupObject, EndGroup, PAGE_Add, VGroupObject, /* Graphics */ LAYOUT_AddChild, displaytype_chooser = ChooserObject, CHOOSER_LabelArray, screenTypeLabels, CHOOSER_Selected, 0, End, MemberLabel("Displaytype"), LAYOUT_AddChild, screenmode_getscreenmode = GetScreenModeObject, End, MemberLabel("Screenmode"), CHILD_WeightedHeight, 0, LAYOUT_AddChild, CheckBoxObject, CHECKBOX_Checked, config->UseBestID, End, MemberLabel("Use best screen mode"), EndGroup, CHILD_WeightedHeight, 0, PAGE_Add, VGroupObject, LAYOUT_AddChild, CheckBoxObject, End, MemberLabel("Enable Sound"), EndGroup, PAGE_Add, VGroupObject, /* Sound */ EndGroup, End, /* Page */ End, /* Clicktab */ LAYOUT_AddChild, HGroupObject, LAYOUT_AddChild, Button("Start & Save",GID_SAVE), LAYOUT_AddChild, Button("Start & Use",GID_USE), LAYOUT_AddChild, Button("Quit",GID_QUIT), EndGroup, CHILD_WeightedHeight, 0, EndGroup, EndWindow; if (!main_wnd) goto out; RA_OpenWindow(main_wnd); Loop(config); IIntuition->DisposeObject(main_wnd); CloseGUILibs(); return quitting?FALSE:TRUE; out: IIntuition->DisposeObject(main_wnd); CloseGUILibs(); return FALSE; } atari800-5.0.0/src/amiga/gui.h000066400000000000000000000003461425067567700156740ustar00rootroot00000000000000#ifndef _GUI_H #define _GUI_H #ifndef EXEC_TYPES_H #include #endif struct AtariConfig { /* Amiga */ ULONG DisplayType; ULONG DisplayID; BOOL UseBestID; }; BOOL Configure(struct AtariConfig *config); #endif atari800-5.0.0/src/amiga/makefile000066400000000000000000000037141425067567700164410ustar00rootroot00000000000000# If Kickstart isn't defined, we don't run on AmigaOS ifndef Kickstart CROSS_COMPILE = ppc-amigaos- RM = rm -R MKDIR = mkdir -p else RM = delete all MKDIR = makedir endif CC = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)ar RANLIB = $(CROSS_COMPILE)ranlib STRIP = $(CROSS_COMPILE)strip # ------------------------------------------------------------- TARGET = Atari800 VERSION = 2 #CFLAGS = -O3 -I$(AHI_INCLUDE) -I. -I.. -Wall -use-dynld -DSUPPORTS_PLATFORM_CONFIGURE -DSUPPORTS_PLATFORM_CONFIGSAVE CFLAGS = -O3 -I$(AHI_INCLUDE) -I. -I.. -Wall -DSUPPORTS_PLATFORM_CONFIGURE -DSUPPORTS_PLATFORM_CONFIGSAVE #LIBS = -lm -lz -lpng -lAuto LIBS = -lm -lauto AMIGASRCS=\ amiga.c \ gui.c \ support.c EMUSRCS= \ afile.c \ antic.c \ artifact.c \ atari.c \ binload.c \ cartridge.c \ cassette.c \ compfile.c \ cfg.c \ colours.c \ colours_external.c \ colours_pal.c \ colours_ntsc.c \ cpu.c \ devices.c \ esc.c \ gtia.c \ log.c \ memory.c \ monitor.c \ pia.c \ pokey.c \ rtime.c \ sio.c \ util.c \ pbi_proto80.c \ input.c \ statesav.c \ ui_basic.c \ ui.c \ screen.c \ cycle_map.c \ pbi_mio.c \ pbi_bb.c \ pbi_scsi.c \ pokeysnd.c \ mzpokeysnd.c \ remez.c \ sndsave.c \ pbi_xld.c \ votrax.c \ votraxsnd.c \ xep80.c \ xep80_fonts.c \ pbi.c SRCS = $(AMIGASRCS) $(addprefix ../,$(EMUSRCS)) # ------------------------------------------------------------- OBJS = $(SRCS:%.c=ppc-amigaos-objs/amiga/%.o) AOBJS = $(ASRCS:%.S=ppc-amigaos-objs/amiga/%.o) all: dirs $(TARGET) dirs: -$(MKDIR) ppc-amigaos-objs ppc-amigaos-objs/amiga # Rules for building $(TARGET): $(OBJS) $(AOBJS) $(CC) $(LINK) -o $@.debug $(OBJS) $(AOBJS) $(LIBS) $(STRIP) -R.comment -o $@ $@.debug ppc-amigaos-objs/amiga/%.o: %.S $(CC) -Wa,-mregnames $(AFLAGS) -I$/home/sba/amigaos4/include -c $< -o $@ ppc-amigaos-objs/amiga/%.o: %.c $(CC) $(CFLAGS) -c $< -o $@ .PHONY: clean clean: $(RM) $(TARGET) $(OBJS) ppc-amigaos-objs .PHONY: revision revision: bumprev $(VERSION) $(TARGET) atari800-5.0.0/src/amiga/support.c000066400000000000000000000142361425067567700166220ustar00rootroot00000000000000/* * support.c - user interface support code * * Copyright (c) 2000 Sebastian Bauer * Copyright (c) 2000-2003 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define __USE_INLINE__ #define DoSuperMethod IDoSuperMethod #define DoSuperMethodA IDoSuperMethodA #define DoMethod IDoMethod #define DoMethodA IDoMethodA #include #include #include #include #include #include #include #include #include /************************************************************************** Some general supports **************************************************************************/ LONG StrLen( const STRPTR str) { if(str) return (LONG)strlen(str); return 0; } STRPTR StrCopy( const STRPTR str ) { STRPTR dst; if( !str ) return NULL; if( !*str) return NULL; dst = (STRPTR)AllocVec(strlen(str)+1,0); if(dst) strcpy(dst,str); return dst; } STRPTR GetFullPath( STRPTR drw, STRPTR file) { WORD dl = StrLen(drw); WORD fl = StrLen( file ); LONG length = dl + fl + 6; STRPTR fp = (STRPTR)AllocVec( length+1, 0 ); if( fp ) { strcpy( fp, drw ); if( AddPart( fp, file, length )) return fp; else FreeVec( fp ); } return NULL; } STRPTR AddSuffix(const STRPTR name, const STRPTR suf) { STRPTR str; if(!strstr(name,suf)) { LONG len = StrLen(name)+StrLen(suf)+2; str = (STRPTR)AllocVec(len,0); if(str) { strcpy(str,name); strcat(str,suf); } } else str = StrCopy(name); return str; } ULONG GetBestID( ULONG width, ULONG height, ULONG depth ) { struct Screen *defscr; ULONG displayID; if ((defscr = LockPubScreen(NULL))) { struct ViewPort *vp; vp = &defscr->ViewPort; displayID = BestModeID( BIDTAG_Depth,depth, BIDTAG_NominalWidth, width, BIDTAG_NominalHeight, height, BIDTAG_MonitorID, GetVPModeID( vp ) & MONITOR_ID_MASK, TAG_DONE); if (CyberGfxBase) { if (IsCyberModeID(displayID)) { struct DimensionInfo dims; /* Get the normal dimensions of the returned displayID */ if (GetDisplayInfoData(NULL,&dims,sizeof(dims),DTAG_DIMS,displayID) > 0) { ULONG modeWidth = dims.Nominal.MaxX - dims.Nominal.MinX + 1; ULONG modeHeight = dims.Nominal.MaxY - dims.Nominal.MinY + 1; /* If dimensions differ to "much", try to get a better one via cybergfx calls */ if (modeWidth > width * 4 / 3 || modeHeight > height * 4 / 3) { displayID = BestCModeIDTags( CYBRBIDTG_Depth, depth, CYBRBIDTG_NominalWidth, width, CYBRBIDTG_NominalHeight, height, CYBRBIDTG_MonitorID, GetVPModeID( vp ) & MONITOR_ID_MASK, TAG_DONE); } } } } UnlockPubScreen( NULL, defscr ); } else displayID = INVALID_ID; if (displayID == INVALID_ID) { displayID = BestModeID( BIDTAG_Depth,depth, BIDTAG_NominalWidth, width, BIDTAG_NominalHeight, height, TAG_DONE); } return displayID; } STRPTR GetDisplayName(ULONG displayid) { STATIC struct NameInfo DisplayNameInfo; STATIC char DisplayNameBuffer[256]; LONG i, v; i = 0; v = GetDisplayInfoData(NULL, (UBYTE *) &DisplayNameInfo, sizeof(DisplayNameInfo), DTAG_NAME, displayid); if(v > sizeof(struct QueryHeader)) { for(; (i < sizeof(DisplayNameBuffer) - 1) && DisplayNameInfo.Name[i]; i++) DisplayNameBuffer[i] = DisplayNameInfo.Name[i]; } if(displayid == INVALID_ID) strcpy(DisplayNameBuffer, "InvalidID"/*GetMessage(MSG_INVALID)*/); else { if(i < sizeof(DisplayNameBuffer) - sizeof(" (0x00000000)")) { DisplayNameBuffer[i++] = ' '; DisplayNameBuffer[i++] = '('; DisplayNameBuffer[i++] = '0'; DisplayNameBuffer[i++] = 'x'; for(v = 28; (v >= 0) && (!((displayid >> v) & 0xf)); v -= 4); if(v < 0) DisplayNameBuffer[i++] = '0'; for(; (v >= 0); v -= 4) { if(((displayid >> v) & 0xf) > 9) DisplayNameBuffer[i++] = ((displayid >> v) & 0xf) + 'a' - 10; else DisplayNameBuffer[i++] = ((displayid >> v) & 0xf) + '0'; } DisplayNameBuffer[i++] = ')'; } DisplayNameBuffer[i++] = 0; } return DisplayNameBuffer; } APTR FindUserData( struct Menu *menu, APTR userdata) { while(menu) { struct MenuItem *mi; if(GTMENU_USERDATA( menu ) == userdata) return menu; mi = menu->FirstItem; while(mi) { struct MenuItem *smi; if(GTMENUITEM_USERDATA( mi ) == userdata) return mi; smi = mi->SubItem; while(smi) { if(GTMENUITEM_USERDATA( smi ) == userdata) return smi; smi = smi->NextItem; } mi = mi->NextItem; } menu = menu->NextMenu; } return NULL; } /************************************************************************** ... **************************************************************************/ struct Library *OpenLibraryInterface(STRPTR name, int version, void *interface_ptr) { struct Library *lib = OpenLibrary(name,version); struct Interface *iface; if (!lib) return NULL; iface = GetInterface(lib,"main",1,NULL); if (!iface) { CloseLibrary(lib); return NULL; } *((struct Interface**)interface_ptr) = iface; return lib; } /************************************************************************** ... **************************************************************************/ void CloseLibraryInterface(struct Library *lib, void *interface) { DropInterface(interface); CloseLibrary(lib); } atari800-5.0.0/src/amiga/support.h000066400000000000000000000024411425067567700166220ustar00rootroot00000000000000#ifndef _SUPPORT_H_ #define _SUPPORT_H_ #define InnerWidth(w) (w->Width - w->BorderLeft - w->BorderRight) #define InnerHeight(w) (w->Height - w->BorderTop - w->BorderBottom) /* Some MUI Support Functions */ #if 0 LONG xget(Object *obj,ULONG attribute); char *getstr(Object *obj); BOOL getbool(Object *obj); Object *MakeLabel(STRPTR str); Object *MakeLabel1(STRPTR str); Object *MakeLabel2(STRPTR str); Object *MakeLLabel(STRPTR str); Object *MakeLLabel1(STRPTR str); Object *MakeCheck(BOOL check); Object *MakeButton(STRPTR str); Object *MakeCycle(STRPTR *array); Object *MakeString(STRPTR def, LONG maxlen); Object *MakeImageButton(ULONG image); Object *MakeLV(APTR pool); ULONG DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...); #define nnsetstring(obj,s) nnset(obj,MUIA_String_Contents,s) #endif LONG StrLen( const STRPTR str); STRPTR StrCopy( const STRPTR str ); STRPTR GetFullPath( STRPTR drw, STRPTR file); STRPTR AddSuffix(const STRPTR name, const STRPTR suf); ULONG GetBestID( ULONG width, ULONG height, ULONG depth ); STRPTR GetDisplayName(ULONG displayid); APTR FindUserData( struct Menu *menu, APTR userdata); struct Library *OpenLibraryInterface(STRPTR name, int version, void *interface_ptr); void CloseLibraryInterface(struct Library *lib, void *interface); #endif /* _SUPPORT_H_ */ atari800-5.0.0/src/amiga/unixfunc.c000066400000000000000000000046141425067567700167440ustar00rootroot00000000000000/* * unixfunc.c - only required for the Maxon compiler * * Copyright (c) 2000 Sebastian Bauer * Copyright (c) 2000-2003 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef __MAXON__ #include #include #include #include #include int __open(const char *name, int mode,...) { BPTR fh; if( mode & O_RDONLY ) { fh = Open((STRPTR)name,MODE_OLDFILE); } else { if(mode & O_WRONLY) { fh = Open((STRPTR)name,MODE_NEWFILE); } else fh = Open((STRPTR)name, MODE_OLDFILE); } if(!fh) fh = (BPTR)-1; return (int)fh; } int __close(int fh) { if(fh && fh != -1 ) Close((BPTR)fh); return 0; } int __write(int fh, const void *buffer, unsigned int length) { return Write((BPTR)fh,(APTR)buffer,length); } int __read(int fh, void *buffer, unsigned int length) { int count; if (fh == -1) return 0; count = Read((BPTR)fh,buffer,length); /* if(!count) count = - 1;*/ return count; } int unlink(const char *name) { DeleteFile((STRPTR)name); return 0; } long lseek(int fh, long rpos, int mode) { long origin = mode; Seek((BPTR)fh,rpos,origin); return Seek((BPTR)fh,0,OFFSET_CURRENT); } char *strdup(const char *s) { char *p = malloc(strlen(s)+1); if(p) { strcpy(p,s); } return p; } char *getcwd(char *b, int size) { struct Process *p = (struct Process*)FindTask(NULL); NameFromLock(p->pr_CurrentDir, b, size); return b; } int stat() { return -1; } int readdir() { return -1; } int closedir() { return -1; } int opendir() { return -1; } #endif atari800-5.0.0/src/android/000077500000000000000000000000001425067567700152765ustar00rootroot00000000000000atari800-5.0.0/src/android/AndroidManifest.xml000066400000000000000000000015431425067567700210720ustar00rootroot00000000000000 atari800-5.0.0/src/android/build.xml000066400000000000000000000076531425067567700171320ustar00rootroot00000000000000 atari800-5.0.0/src/android/jni/000077500000000000000000000000001425067567700160565ustar00rootroot00000000000000atari800-5.0.0/src/android/jni/Android.mk.in000066400000000000000000000022021425067567700203700ustar00rootroot00000000000000LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := atari800 A800_CORE_OBJS := \ afile.o \ antic.o \ artifact.o \ atari.o \ binload.o \ cartridge.o \ cartridge_info.o \ cassette.o \ cfg.o \ colours.o \ colours_external.o \ colours_pal.o \ colours_ntsc.o \ compfile.o \ cpu.o \ crc32.o \ cycle_map.o \ devices.o \ esc.o \ gtia.o \ img_tape.o \ input.o \ log.o \ memory.o \ monitor.o \ mzpokeysnd.o \ pbi.o \ pbi_bb.o \ pbi_mio.o \ pbi_scsi.o \ pbi_xld.o \ pia.o \ pokey.o \ pokeyrec.o \ pokeysnd.o \ remez.o \ roms/altirra_5200_os.o \ roms/altirra_basic.o \ roms/altirraos_800.o \ roms/altirraos_xl.o \ rtime.o \ screen.o \ sio.o \ sndsave.o \ statesav.o \ sysrom.o \ ui.o \ ui_basic.o \ util.o \ voicebox.o \ votrax.o \ votraxsnd.o A800_CORE_LIBS := @LIBS@ ANDROID_SRCS := \ androidinput.c \ graphics.c \ jni.c \ platform.c \ sound.c ANDROID_LIBS := -llog -lGLESv1_CM LOCAL_C_INCLUDES := $(LOCAL_PATH)/../.. LOCAL_SRC_FILES := $(A800_CORE_OBJS:%.o=../../%.c) $(ANDROID_SRCS) LOCAL_LDLIBS := $(A800_CORE_LIBS) $(ANDROID_LIBS) include $(BUILD_SHARED_LIBRARY) atari800-5.0.0/src/android/jni/Application.mk000066400000000000000000000000321425067567700206450ustar00rootroot00000000000000APP_PLATFORM := android-9 atari800-5.0.0/src/android/jni/androidinput.c000066400000000000000000000431751425067567700207340ustar00rootroot00000000000000/* * androidinput.c - handle touch & keyboard events from android * * Copyright (C) 2010 Kostas Nakos * Copyright (C) 2010 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include "input.h" #include "akey.h" #include "log.h" #include "pokey.h" #include "graphics.h" #include "androidinput.h" #include "keys.inc" #define HIT_OPACITY 0.6f #define POTLIMIT 228 #define KBD_MAXKEYS (1 << 4) #define KBD_MASK (KBD_MAXKEYS - 1) struct touchstate { int x; int y; int s; }; enum { PTRSTL = -1, PTRJOY = 0, PTRTRG, MAXPOINTERS }; /* always: pointer 0 is joystick pointer, 1 is fire pointer */ static struct touchstate prevtc[MAXPOINTERS]; static int prevconptr; int Android_Joyleft = TRUE; float Android_Splitpct = 0.5f; int Android_Split; int Android_Paddle = FALSE; SWORD Android_POTX = 0; SWORD Android_POTY = 0; int Android_PlanetaryDefense = FALSE; UBYTE Android_ReversePddle = 0; struct joy_overlay_state AndroidInput_JoyOvl; struct consolekey_overlay_state AndroidInput_ConOvl; UWORD Android_PortStatus; UBYTE Android_TrigStatus; static int Android_Keyboard[KBD_MAXKEYS]; static int key_head = 0, key_tail = 0; static int Android_key_control; static pthread_mutex_t key_mutex = PTHREAD_MUTEX_INITIALIZER; static int key_last = AKEY_NONE; static const int derot_lut[2][4] = { { KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN }, /* derot left */ { KEY_LEFT, KEY_RIGHT, KEY_DOWN, KEY_UP } /* derot right */ }; SWORD softjoymap[SOFTJOY_MAXKEYS + SOFTJOY_MAXACTIONS][2] = { { KEY_LEFT, INPUT_STICK_LEFT }, { KEY_RIGHT, INPUT_STICK_RIGHT }, { KEY_UP, INPUT_STICK_FORWARD }, { KEY_DOWN, INPUT_STICK_BACK }, { '2', 0 }, { ACTION_NONE, AKEY_NONE }, { ACTION_NONE, AKEY_NONE }, { ACTION_NONE, AKEY_NONE } }; int Android_SoftjoyEnable = TRUE; int Android_DerotateKeys = 0; int Android_TouchEvent(int x1, int y1, int s1, int x2, int y2, int s2) { int joyptr; /* will point to joystick touch of input set */ int dx, dy, dx2, dy2; struct touchstate newtc[MAXPOINTERS]; UBYTE newjoy, newtrig; struct joy_overlay_state *jovl; struct consolekey_overlay_state *covl; int conptr; /* will point to stolen ptr, PTRSTL otherwise */ int ret = 0; jovl = &AndroidInput_JoyOvl; covl = &AndroidInput_ConOvl; prevtc[PTRJOY].x = jovl->joyarea.l + ((jovl->joyarea.r - jovl->joyarea.l) >> 1); prevtc[PTRJOY].y = jovl->joyarea.t + ((jovl->joyarea.b - jovl->joyarea.t) >> 1); /* establish joy ptr & fire ptr for new input */ /* note: looks complicated & uses boolean magick but gets rid of a labyrinth of ifs :-) */ if (s2 < 0 /* only one touch event */ || (x1 >= Android_Split) ^ (x2 >= Android_Split)) { /* pointers on opposite sides */ joyptr = (x1 < Android_Split) ^ Android_Joyleft; } else { /* both pointers either on joystick or on fire side */ int both_fire = (x1 >= Android_Split) ^ (!Android_Joyleft); /* both pointers on fire side */ dx = (x1 - prevtc[both_fire].x); /* figure out which is closer to previous */ dx2 = (x2 - prevtc[both_fire].x); dy = (y1 - prevtc[both_fire].y); dy2 = (y2 - prevtc[both_fire].y); joyptr = ((dx2*dx2 + dy2*dy2) > (dx*dx + dy*dy)) ^ !both_fire; s1 &= joyptr ^ (!both_fire); /* unpress unrelated touch */ s2 &= !(joyptr ^ (!both_fire)); } if (joyptr) { newtc[PTRTRG].x = x1; newtc[PTRTRG].y = y1; newtc[PTRTRG].s = s1; newtc[PTRJOY].x = x2; newtc[PTRJOY].y = y2; newtc[PTRJOY].s = s2; } else { newtc[PTRJOY].x = x1; newtc[PTRJOY].y = y1; newtc[PTRJOY].s = s1; newtc[PTRTRG].x = x2; newtc[PTRTRG].y = y2; newtc[PTRTRG].s = s2; } if (newtc[PTRJOY].s > 0 || newtc[PTRTRG].s > 0) ret = 1; /* console keys */ conptr = PTRSTL; covl->hitkey = CONK_NOKEY; if (covl->ovl_visible >= COVL_READY) { /* first a quick bounding box check */ if (newtc[PTRJOY].s > 0 && newtc[PTRJOY].x >= covl->bbox.l && newtc[PTRJOY].x < covl->bbox.r && newtc[PTRJOY].y >= covl->bbox.t && newtc[PTRJOY].y < covl->bbox.b) conptr = PTRJOY; /* implicit: mask fire by joy pointer */ else if (newtc[PTRTRG].s > 0 && newtc[PTRTRG].x >= covl->bbox.l && newtc[PTRTRG].x < covl->bbox.r && newtc[PTRTRG].y >= covl->bbox.t && newtc[PTRTRG].y < covl->bbox.b) conptr = PTRTRG; if (conptr != PTRSTL) { /* if bb is exact on top & bottom => check only horiz/lly */ int i; dy = covl->keycoo[1] - newtc[conptr].y; for (i = 0; i < CONK_VERT_MAX; i += 8) { float a = ((float) covl->keycoo[i + 6] - covl->keycoo[i ]) / ((float) covl->keycoo[i + 1] - covl->keycoo[i + 7]); dx = covl->keycoo[i] + a * dy; if (newtc[conptr].x < dx) continue; /* off left edge */ a = ((float) covl->keycoo[i + 4] - covl->keycoo[i + 2]) / ((float) covl->keycoo[i + 3] - covl->keycoo[i + 5]); dx = covl->keycoo[i + 2] + a * dy; if (newtc[conptr].x > dx) continue; /* off right edge */ covl->hitkey = i / 8; /* hit inside */ break; } if (covl->hitkey != CONK_NOKEY) { covl->opacity = COVL_MAX_OPACITY; covl->statecnt = COVL_HOLD_TIME << 1; covl->ovl_visible = COVL_READY; switch (covl->hitkey) { case CONK_START: INPUT_key_consol = INPUT_CONSOL_NONE ^ INPUT_CONSOL_START; break; case CONK_SELECT: INPUT_key_consol = INPUT_CONSOL_NONE ^ INPUT_CONSOL_SELECT; break; case CONK_OPTION: INPUT_key_consol = INPUT_CONSOL_NONE ^ INPUT_CONSOL_OPTION; break; case CONK_HELP: Keyboard_Enqueue(AKEY_HELP); break; default: /* CONK_NOKEY, CONK_RESET */ ; /* RESET is handled at the overlay update */ } } else { conptr = PTRSTL; /* didn't hit - let others handle it */ } } if (prevconptr != PTRSTL && conptr == PTRSTL) { /* unpressed overlay key */ if (Keyboard_Peek() == AKEY_HELP) Keyboard_Enqueue(AKEY_NONE); INPUT_key_consol = INPUT_CONSOL_NONE; covl->resetcnt = 0; } } else if (newtc[PTRJOY].s > 0 && newtc[PTRJOY].x > Android_ScreenW - covl->hotlen && newtc[PTRJOY].y < covl->hotlen) { covl->ovl_visible = COVL_FADEIN; /* touched overlay hotspot */ conptr = PTRJOY; } else if (newtc[PTRTRG].s > 0 && newtc[PTRTRG].x > Android_ScreenW - covl->hotlen && newtc[PTRTRG].y < covl->hotlen) { covl->ovl_visible = COVL_FADEIN; conptr = PTRTRG; } if (conptr == PTRSTL) { if (newtc[PTRJOY].s > 0 && ( (prevtc[PTRJOY].s <= 0 && newtc[PTRJOY].y < covl->hotlen) || /* menu area */ prevconptr != PTRSTL) && /* still held */ !(covl->ovl_visible != COVL_HIDDEN && newtc[PTRJOY].x >= covl->bbox.l - COVL_SHADOW_OFF && /* outside bbox */ newtc[PTRJOY].y <= covl->bbox.b + COVL_SHADOW_OFF) ) { conptr = PTRJOY; /* touched menu area */ ret = 2; } else if (newtc[PTRTRG].s > 0 && ( (prevtc[PTRTRG].s <= 0 && newtc[PTRTRG].y < covl->hotlen) || prevconptr != PTRSTL) && !(covl->ovl_visible != COVL_HIDDEN && newtc[PTRTRG].x >= covl->bbox.l - COVL_SHADOW_OFF && newtc[PTRTRG].y <= covl->bbox.b + COVL_SHADOW_OFF) ) { conptr = PTRTRG; ret = 2; } } /* joystick */ newjoy = INPUT_STICK_CENTRE; if (newtc[PTRJOY].s > 0 && conptr != PTRJOY) { if (!Android_Paddle) { dx2 = (jovl->joyarea.r - jovl->joyarea.l) >> 1; dy2 = (jovl->joyarea.b - jovl->joyarea.t) >> 1; dx = dx2 - dx2 * jovl->deadarea; dy = dy2 - dy2 * jovl->deadarea; dx2 = (jovl->joyarea.r - jovl->joyarea.l) * jovl->gracearea; } if (Android_Paddle) { float potx = ((float) (newtc[PTRJOY].x - jovl->joyarea.l)) / ((float) (jovl->joyarea.r - jovl->joyarea.l)); float poty = (float) newtc[PTRJOY].y / (float) Android_ScreenH; Android_POTX = POTLIMIT - (UBYTE) (potx * ((float) POTLIMIT) + 0.5f); Android_POTY = POTLIMIT - (UBYTE) (poty * ((float) POTLIMIT) + 0.5f); if (Android_ReversePddle & 1) Android_POTX = POTLIMIT - Android_POTX; if (Android_ReversePddle & 2) Android_POTY = POTLIMIT - Android_POTY; if (Android_POTX < 0) Android_POTX = 0; if (Android_POTY < 0) Android_POTY = 0; if (Android_POTX > POTLIMIT) Android_POTX = POTLIMIT; if (Android_POTY > POTLIMIT) Android_POTY = POTLIMIT; jovl->joystick.x = newtc[PTRJOY].x; jovl->joystick.y = newtc[PTRJOY].y; jovl->stickopacity = HIT_OPACITY; if (!jovl->anchor) { dy = (jovl->joyarea.b - jovl->joyarea.t) >> 1; if (newtc[PTRJOY].y - dy < 0) newtc[PTRJOY].y -= newtc[PTRJOY].y - dy; if (newtc[PTRJOY].y + dy > Android_ScreenH) newtc[PTRJOY].y -= newtc[PTRJOY].y + dy - Android_ScreenH; jovl->joyarea.t = newtc[PTRJOY].y - dy; jovl->joyarea.b = newtc[PTRJOY].y + dy; jovl->areaopacitycur = jovl->areaopacityset; jovl->areaopacityfrm = 0; } } else if ( (newtc[PTRJOY].x >= jovl->joyarea.l - dx2 && newtc[PTRJOY].x <= jovl->joyarea.r + dx2 && newtc[PTRJOY].y >= jovl->joyarea.t - dx2 && newtc[PTRJOY].y <= jovl->joyarea.b + dx2) || jovl->anchor ) { if (newtc[PTRJOY].x <= jovl->joyarea.l + dx) { newjoy &= INPUT_STICK_LEFT; } else if (newtc[PTRJOY].x >= jovl->joyarea.r - dx) { newjoy &= INPUT_STICK_RIGHT; } if (newtc[PTRJOY].y <= jovl->joyarea.t + dy) { newjoy &= INPUT_STICK_FORWARD; } else if (newtc[PTRJOY].y >= jovl->joyarea.b - dy) { newjoy &= INPUT_STICK_BACK; } if (!jovl->anchor) { if (newtc[PTRJOY].x > jovl->joyarea.r) { /* grace area */ dx = newtc[PTRJOY].x - jovl->joyarea.r; jovl->joyarea.l += dx; jovl->joyarea.r += dx; } else if (newtc[PTRJOY].x < jovl->joyarea.l) { dx = jovl->joyarea.l - newtc[PTRJOY].x; jovl->joyarea.r -= dx; jovl->joyarea.l -= dx; } if (newtc[PTRJOY].y > jovl->joyarea.b) { dy = newtc[PTRJOY].y - jovl->joyarea.b; jovl->joyarea.t += dy; jovl->joyarea.b += dy; } else if (newtc[PTRJOY].y < jovl->joyarea.t) { dy = jovl->joyarea.t - newtc[PTRJOY].y; jovl->joyarea.b -= dy; jovl->joyarea.t -= dy; } } jovl->joystick.x = newtc[PTRJOY].x; jovl->joystick.y = newtc[PTRJOY].y; jovl->stickopacity = HIT_OPACITY; jovl->areaopacitycur = jovl->areaopacityset; jovl->areaopacityfrm = 0; } else { if (prevtc[PTRJOY].s > 0) { /* drag area along */ if (newtc[PTRJOY].x > jovl->joyarea.r) { dx = newtc[PTRJOY].x - jovl->joyarea.r; jovl->joyarea.l += dx; jovl->joyarea.r += dx; newjoy &= INPUT_STICK_RIGHT; } else if (newtc[PTRJOY].x < jovl->joyarea.l) { dx = jovl->joyarea.l - newtc[PTRJOY].x; jovl->joyarea.r -= dx; jovl->joyarea.l -= dx; newjoy &= INPUT_STICK_LEFT; } else if (newtc[PTRJOY].x <= jovl->joyarea.l + dx) { newjoy &= INPUT_STICK_LEFT; } else if (newtc[PTRJOY].x >= jovl->joyarea.r - dx) { newjoy &= INPUT_STICK_RIGHT; } if (newtc[PTRJOY].y > jovl->joyarea.b) { dy = newtc[PTRJOY].y - jovl->joyarea.b; jovl->joyarea.t += dy; jovl->joyarea.b += dy; newjoy &= INPUT_STICK_BACK; } else if (newtc[PTRJOY].y < jovl->joyarea.t) { dy = jovl->joyarea.t - newtc[PTRJOY].y; jovl->joyarea.b -= dy; jovl->joyarea.t -= dy; newjoy &= INPUT_STICK_FORWARD; } else if (newtc[PTRJOY].y <= jovl->joyarea.t + dy) { newjoy &= INPUT_STICK_FORWARD; } else if (newtc[PTRJOY].y >= jovl->joyarea.b - dy) { newjoy &= INPUT_STICK_BACK; } jovl->joystick.x = newtc[PTRJOY].x; jovl->joystick.y = newtc[PTRJOY].y; jovl->stickopacity = HIT_OPACITY; } else { /* recenter area */ dx = (jovl->joyarea.r - jovl->joyarea.l) >> 1; dy = (jovl->joyarea.b - jovl->joyarea.t) >> 1; if (Android_Joyleft) { if (newtc[PTRJOY].x + dx > Android_Split) newtc[PTRJOY].x = Android_Split - dx; } else { if (newtc[PTRJOY].x - dx < Android_Split) newtc[PTRJOY].x = Android_Split + dx; } if (newtc[PTRJOY].x - dx < 0) newtc[PTRJOY].x -= newtc[PTRJOY].x - dx; if (newtc[PTRJOY].y - dy < 0) newtc[PTRJOY].y -= newtc[PTRJOY].y - dy; if (newtc[PTRJOY].y + dy > Android_ScreenH) newtc[PTRJOY].y -= newtc[PTRJOY].y + dy - Android_ScreenH; jovl->joyarea.l = newtc[PTRJOY].x - dx; jovl->joyarea.r = newtc[PTRJOY].x + dx; jovl->joyarea.t = newtc[PTRJOY].y - dy; jovl->joyarea.b = newtc[PTRJOY].y + dy; } jovl->areaopacitycur = jovl->areaopacityset; jovl->areaopacityfrm = 0; } } /* trigger */ newtrig = 1; if ( (newtc[PTRTRG].s > 0 && conptr != PTRTRG) || /* normal trigger */ (newtc[PTRJOY].s > 0 && conptr != PTRJOY && Android_PlanetaryDefense) ) { newtrig = 0; jovl->fire.x = newtc[PTRTRG].x; jovl->fire.y = newtc[PTRTRG].y; jovl->fireopacity = HIT_OPACITY; } /* thread unsafe => "no" problem */ if (!Android_Paddle){ Android_PortStatus = 0xFFF0 | newjoy; Android_TrigStatus = 0xE | newtrig; } else { POKEY_POT_input[INPUT_mouse_port << 1] = Android_POTX; POKEY_POT_input[(INPUT_mouse_port << 1) + 1] = Android_POTY; INPUT_mouse_buttons = !newtrig; } memcpy(prevtc, newtc, sizeof(struct touchstate) * MAXPOINTERS); prevconptr = conptr; return ret; } void Android_KeyEvent(int k, int s) { int i, shft; if (Android_SoftjoyEnable) { for (i = 0; i < 4; i++) if (softjoymap[i][0] == k) { if (s) Android_PortStatus &= 0xFFF0 | softjoymap[i][1]; else Android_PortStatus |= ~softjoymap[i][1]; return; } if (softjoymap[SOFTJOY_FIRE][0] == k) { Android_TrigStatus = (Android_TrigStatus & (~(s != 0))) | (s == 0); return; } for (i = SOFTJOY_ACTIONBASE; i < SOFTJOY_MAXKEYS + SOFTJOY_MAXACTIONS; i++) if (softjoymap[i][0] == k && softjoymap[i][1] != AKEY_NONE) { k = softjoymap[i][1]; break; } } if (Android_DerotateKeys && k <= KEY_UP && k >= KEY_RIGHT) k = derot_lut[Android_DerotateKeys - 1][KEY_UP - k]; switch (k) { case KEY_SHIFT: INPUT_key_shift = (s) ? AKEY_SHFT : 0; break; case KEY_CONTROL: Android_key_control = (s) ? AKEY_CTRL : 0; break; case KEY_FIRE: Android_TrigStatus = (Android_TrigStatus & (~(s != 0))) | (s == 0); break; default: if (k >= STATIC_MAXKEYS) Log_print("Unmappable key %d", k); else { if (k == '+' || k == '<' || k == '>' || k == '*') shft = 0; else shft = INPUT_key_shift; Keyboard_Enqueue( (s) ? (skeyxlat[k] | Android_key_control | shft) : AKEY_NONE ); } } } void Input_Initialize(void) { int i; memset(prevtc, 0, sizeof(prevtc)); prevconptr = PTRSTL; memset(&AndroidInput_JoyOvl, 0, sizeof(struct joy_overlay_state)); AndroidInput_JoyOvl.ovl_visible = 1; AndroidInput_JoyOvl.areaopacitycur = AndroidInput_JoyOvl.areaopacityset = 0.25f; AndroidInput_JoyOvl.deadarea = 0.3f; AndroidInput_JoyOvl.gracearea = 0.3f; AndroidInput_JoyOvl.joyarea.t = AndroidInput_JoyOvl.joyarea.l = 10; AndroidInput_JoyOvl.joyarea.b = AndroidInput_JoyOvl.joyarea.r = 74; AndroidInput_JoyOvl.anchor = 0; memset(&AndroidInput_ConOvl, 0, sizeof(struct consolekey_overlay_state)); AndroidInput_ConOvl.hitkey = CONK_NOKEY; AndroidInput_ConOvl.opacity = COVL_MAX_OPACITY; AndroidInput_ConOvl.ovl_visible = COVL_READY; AndroidInput_ConOvl.statecnt = COVL_HOLD_TIME; Android_PortStatus = 0xFFFF; Android_TrigStatus = 0xF; for (i = 0; i < KBD_MAXKEYS; Android_Keyboard[i] = AKEY_NONE, i++); INPUT_key_consol = INPUT_CONSOL_NONE; INPUT_key_shift = FALSE; Android_key_control = 0; } void Joy_Reposition(void) { int dx = 0, dy = 0; if (Android_ScreenW == 0) return; /* we're going to get called again @ initgraphics() */ if (Android_Joyleft) { if (AndroidInput_JoyOvl.joyarea.r > Android_Split) dx = -(AndroidInput_JoyOvl.joyarea.r - Android_Split); } else { if (AndroidInput_JoyOvl.joyarea.l < Android_Split) dx = Android_Split - AndroidInput_JoyOvl.joyarea.l; } if (AndroidInput_JoyOvl.joyarea.l < 0) dx = -AndroidInput_JoyOvl.joyarea.l; else if (AndroidInput_JoyOvl.joyarea.r > Android_ScreenW) dx = -(AndroidInput_JoyOvl.joyarea.r - Android_ScreenW); if (AndroidInput_JoyOvl.joyarea.t < 0) dy = -AndroidInput_JoyOvl.joyarea.t; else if (AndroidInput_JoyOvl.joyarea.b > Android_ScreenH) dy = -(AndroidInput_JoyOvl.joyarea.b - Android_ScreenH); AndroidInput_JoyOvl.joyarea.l += dx; AndroidInput_JoyOvl.joyarea.r += dx; AndroidInput_JoyOvl.joyarea.t += dy; AndroidInput_JoyOvl.joyarea.b += dy; } void Android_SplitCalc(void) { if (Android_Joyleft) Android_Split = Android_Splitpct * Android_ScreenW; else Android_Split = (1.0f - Android_Splitpct) * Android_ScreenW; } void Keyboard_Enqueue(int key) { pthread_mutex_lock(&key_mutex); if (((key_head + 1) & KBD_MASK) == key_tail) key_head = key_tail; /* on overflow, discard previous keys */ Android_Keyboard[key_head++] = key; key_head &= KBD_MASK; pthread_mutex_unlock(&key_mutex); } int Keyboard_Dequeue(void) { pthread_mutex_lock(&key_mutex); if (key_head != key_tail) { key_last = Android_Keyboard[key_tail++]; key_tail &= KBD_MASK; } pthread_mutex_unlock(&key_mutex); return key_last; } int Keyboard_Peek(void) { int tmp_key; tmp_key = key_last; if (key_head != key_tail) tmp_key = Android_Keyboard[key_tail]; return tmp_key; } atari800-5.0.0/src/android/jni/androidinput.h000066400000000000000000000036711425067567700207360ustar00rootroot00000000000000#include "atari.h" struct RECT { int l; int t; union { int r; int w; }; union { int b; int h; }; }; struct POINT { int x; int y; }; struct joy_overlay_state { int ovl_visible; struct RECT joyarea; float areaopacitycur; float areaopacityset; int areaopacityfrm; int anchor; float deadarea; float gracearea; struct POINT joystick; float stickopacity; struct POINT fire; float fireopacity; int firewid; }; enum con_vst { COVL_HIDDEN = 0, COVL_FADEIN, COVL_READY, COVL_FADEOUT }; enum con_key { CONK_NOKEY = -1, CONK_HELP = 0, CONK_START, CONK_SELECT, CONK_OPTION, CONK_RESET }; struct consolekey_overlay_state { enum con_vst ovl_visible; UWORD *keycoo; struct RECT bbox; float opacity; enum con_key hitkey; int statecnt; int resetcnt; int hotlen; #define COVL_MAX_OPACITY 0.5f #define COVL_HOLD_TIME 150 #define RESET_SOFT 30 #define RESET_HARD 60 }; extern struct joy_overlay_state AndroidInput_JoyOvl; extern struct consolekey_overlay_state AndroidInput_ConOvl; extern UWORD Android_PortStatus; extern UBYTE Android_TrigStatus; enum { SOFTJOY_LEFT = 0, SOFTJOY_RIGHT, SOFTJOY_UP, SOFTJOY_DOWN, SOFTJOY_FIRE, SOFTJOY_MAXKEYS }; #define SOFTJOY_MAXACTIONS 3 #define SOFTJOY_ACTIONBASE SOFTJOY_MAXKEYS #define ACTION_NONE 0xFF extern SWORD softjoymap[SOFTJOY_MAXKEYS + SOFTJOY_MAXACTIONS][2]; extern int Android_SoftjoyEnable; extern int Android_Joyleft; extern float Android_Splitpct; extern int Android_Split; extern int Android_DerotateKeys; extern int Android_Paddle; extern int Android_PlanetaryDefense; extern SWORD Android_POTX; extern SWORD Android_POTY; extern UBYTE Android_ReversePddle; int Android_TouchEvent(int x1, int y1, int s1, int x2, int y2, int s2); void Android_KeyEvent(int k, int s); void Input_Initialize(void); void Keyboard_Enqueue(int key); int Keyboard_Dequeue(void); int Keyboard_Peek(void); void Android_SplitCalc(void); void Joy_Reposition(void); atari800-5.0.0/src/android/jni/graphics.c000066400000000000000000000354011425067567700200250ustar00rootroot00000000000000/* * graphics.c - android drawing * * Copyright (C) 2010 Kostas Nakos * Copyright (C) 2010 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #define GL_GLEXT_PROTOTYPES 1 #include #include "atari.h" #include "screen.h" #include "colours.h" #include "akey.h" #include "cpu.h" #include "log.h" #include "androidinput.h" #include "graphics.h" #define TEXTURE_WIDTH 512 #define TEXTURE_HEIGHT 256 #define OPACITY_CUTOFF 0.05f #define OPACITY_STEP 0.02f #define OPACITY_FRMSTR 75 #define BORDER_PCT 0.05f int Android_ScreenW = 0; int Android_ScreenH = 0; int Android_Aspect; int Android_CropScreen[] = {0, SCREEN_HEIGHT, SCANLINE_LEN, -SCREEN_HEIGHT}; int Android_PortPad; int Android_CovlHold; static struct RECT screenrect; static int screenclear; int Android_Bilinear; float Android_Joyscale = 0.15f; extern int *ovl_texpix; extern int ovl_texw; extern int ovl_texh; /* graphics conversion */ static UWORD *palette = NULL; static UWORD *hicolor_screen = NULL; /* standard gl textures */ enum { TEX_SCREEN = 0, TEX_OVL, TEX_MAXNAMES }; static GLuint texture[TEX_MAXNAMES]; static UWORD conkey_vrt[CONK_VERT_MAX]; static struct { int x; int y; int w; int h; } conkey_lbl[CONK_VERT_MAX / 8]; static UWORD conkey_shadow[2 * 4]; void Android_PaletteUpdate(void) { int i; if (!palette) { if ( !(palette = malloc(256 * sizeof(UWORD))) ) { Log_print("Cannot allocate memory for palette conversion."); return; } } memset(palette, 0, 256 * sizeof(UWORD)); for (i = 0; i < 256; i++) palette[i] = ( (Colours_GetR(i) & 0xf8) << 8 ) | ( (Colours_GetG(i) & 0xfc) << 3 ) | ( (Colours_GetB(i) & 0xf8) >> 3 ); /* force full redraw */ Screen_EntireDirty(); } int Android_InitGraphics(void) { const UWORD poly[] = { 0,16, 24,16, 32,0, 8,0 }; int i, tmp, w, h; float tmp2, tmp3; struct RECT *r; /* Allocate stuff */ if (!hicolor_screen) { if ( !(hicolor_screen = malloc(TEXTURE_WIDTH * TEXTURE_HEIGHT * sizeof(UWORD))) ) { Log_print("Cannot allocate memory for hicolor screen."); return FALSE; } } memset(hicolor_screen, 0, TEXTURE_WIDTH * TEXTURE_HEIGHT * sizeof(UWORD)); /* Setup GL */ glEnable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glGenTextures(TEX_MAXNAMES, texture); glPixelStorei(GL_PACK_ALIGNMENT, 8); /* overlays texture */ glBindTexture(GL_TEXTURE_2D, texture[TEX_OVL]); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ovl_texw, ovl_texh, 0, GL_RGBA, GL_UNSIGNED_BYTE, ovl_texpix); /* playfield texture */ glBindTexture(GL_TEXTURE_2D, texture[TEX_SCREEN]); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, Android_Bilinear ? GL_LINEAR : GL_NEAREST); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, Android_Bilinear ? GL_LINEAR : GL_NEAREST); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, Android_CropScreen); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, hicolor_screen); /* Setup view for console key polygons */ glLoadIdentity(); glOrthof(0, Android_ScreenW, Android_ScreenH, 0, 0, 1); glEnableClientState(GL_VERTEX_ARRAY); glClear(GL_COLOR_BUFFER_BIT); /* Finsh GL init with an error check */ if (glGetError() != GL_NO_ERROR) { Log_print("Cannot initialize OpenGL"); return FALSE; } /* Console keys' polygons */ tmp2 = ((float) (Android_ScreenW >> 1)) / ((float) 4.5f * poly[4]); tmp3 = ((float) Android_ScreenH) / ((float) 14 * poly[1]); if (tmp2 > tmp3) tmp2 = tmp3; if (tmp2 < 2.0f) tmp2 = 2.0f; for (i = 0; i < CONK_VERT_MAX; i += 2) { /* generate & scale */ conkey_vrt[i ] = poly[i % 8] * tmp2 + ((i > 7) ? (conkey_vrt[(i / 8 - 1) * 8 + 2] + 4) : 0); conkey_vrt[i + 1] = poly[(i + 1) % 8] * tmp2; } tmp = Android_ScreenW - conkey_vrt[CONK_VERT_MAX - 4]; for (i = 0; i < CONK_VERT_MAX; i += 2) { /* translate */ conkey_vrt[i ] += tmp; conkey_vrt[i + 1] += (4 + ((Android_ScreenW < Android_ScreenH) ? Android_PortPad : 0)); } /* Determine location of console keys' labels. */ { int key_w = conkey_vrt[2] - conkey_vrt[0]; int key_h = conkey_vrt[3] - conkey_vrt[5]; int key_h_slant = conkey_vrt[6] - conkey_vrt[0]; int label_w = key_w * key_h * 4 / (key_h_slant + key_h*4); int label_h = label_w / 4; for (i = 0; i < CONK_NUM; ++i) { conkey_lbl[i].x = conkey_vrt[i*8 + 6]; conkey_lbl[i].y = Android_ScreenH - (conkey_vrt[i*8 + 7] + label_h + 1); conkey_lbl[i].w = label_w; conkey_lbl[i].h = label_h; } } AndroidInput_ConOvl.keycoo = conkey_vrt; AndroidInput_ConOvl.bbox.l = conkey_vrt[0]; AndroidInput_ConOvl.bbox.b = conkey_vrt[1]; AndroidInput_ConOvl.bbox.r = conkey_vrt[CONK_VERT_MAX - 4]; AndroidInput_ConOvl.bbox.t = conkey_vrt[CONK_VERT_MAX - 3]; AndroidInput_ConOvl.hotlen = 0.1f * (Android_ScreenW < Android_ScreenH ? Android_ScreenW : Android_ScreenH); r = &(AndroidInput_ConOvl.bbox); conkey_shadow[0] = r->l - COVL_SHADOW_OFF; conkey_shadow[1] = r->b + COVL_SHADOW_OFF; conkey_shadow[2] = r->r; conkey_shadow[3] = r->b + COVL_SHADOW_OFF; conkey_shadow[4] = r->r; conkey_shadow[5] = r->t - COVL_SHADOW_OFF; conkey_shadow[6] = r->l - COVL_SHADOW_OFF; conkey_shadow[7] = r->t - COVL_SHADOW_OFF; /* Scale joystick overlays */ Joyovl_Scale(); Joy_Reposition(); /* Aspect correct scaling */ memset(&screenrect, 0, sizeof(struct RECT)); if ( ((Android_ScreenW > Android_ScreenH) + 1) & Android_Aspect) { w = Android_CropScreen[2]; h = -Android_CropScreen[3]; /* fit horizontally */ tmp2 = ((float) Android_ScreenW) / ((float) w); screenrect.h = tmp2 * h; if (screenrect.h > Android_ScreenH) { /* fit vertically */ tmp2 = ((float) Android_ScreenH) / ((float) h); screenrect.h = Android_ScreenH; } screenrect.w = tmp2 * w; /* center */ tmp = (Android_ScreenW - screenrect.r + 1) / 2; screenrect.l += tmp; h = Android_ScreenH; if (Android_ScreenH > Android_ScreenW) h >>= 1; /* assume keyboard takes up half the height in portrait */ tmp = (h - screenrect.b + 1) / 2; if (tmp < 0) tmp = 0; tmp = (Android_ScreenH - h) + tmp - ((Android_ScreenW < Android_ScreenH) ? Android_PortPad : 0); screenrect.t += tmp; screenclear = TRUE; } else { screenrect.t = screenrect.l = 0; screenrect.w = Android_ScreenW; screenrect.h = Android_ScreenH; screenclear = FALSE; } /* Initialize palette */ Android_PaletteUpdate(); return TRUE; } void Joyovl_Scale(void) { int tmp; tmp = ( (Android_ScreenW > Android_ScreenH) ? Android_ScreenW : Android_ScreenH ) * Android_Joyscale; if (!Android_Paddle) { AndroidInput_JoyOvl.joyarea.r = AndroidInput_JoyOvl.joyarea.l + tmp; AndroidInput_JoyOvl.joyarea.b = AndroidInput_JoyOvl.joyarea.t + tmp; } else { if (!Android_PlanetaryDefense) { AndroidInput_JoyOvl.joyarea.l = Android_Joyleft ? BORDER_PCT * Android_ScreenW : Android_Split; AndroidInput_JoyOvl.joyarea.r = Android_Joyleft ? Android_Split : (1.0f - BORDER_PCT) * Android_ScreenW; AndroidInput_JoyOvl.joyarea.b = AndroidInput_JoyOvl.joyarea.t + 8 + (tmp >> 3); } else { AndroidInput_JoyOvl.joyarea.l = AndroidInput_JoyOvl.joyarea.t = 0; AndroidInput_JoyOvl.joyarea.r = Android_ScreenW; AndroidInput_JoyOvl.joyarea.b = Android_ScreenH; } } AndroidInput_JoyOvl.firewid = tmp >> 3; } void Android_ConvertScreen(void) { int x, y; UBYTE *src, *src_line; UWORD *dst, *dst_line; #ifdef DIRTYRECT UBYTE *dirty, *dirty_line; #endif #ifdef DIRTYRECT dirty_line = Screen_dirty + SCANLINE_START / 8; #endif src_line = ((UBYTE *) Screen_atari) + SCANLINE_START; dst_line = hicolor_screen; for (y = 0; y < SCREEN_HEIGHT; y++) { #ifdef DIRTYRECT dirty = dirty_line; #else src = src_line; dst = dst_line; #endif for (x = 0; x < SCANLINE_LEN; x += 8) { #ifdef DIRTYRECT if (*dirty) { src = src_line + x; dst = dst_line + x; do { #endif *dst++ = palette[*src++]; *dst++ = palette[*src++]; *dst++ = palette[*src++]; *dst++ = palette[*src++]; *dst++ = palette[*src++]; *dst++ = palette[*src++]; *dst++ = palette[*src++]; *dst++ = palette[*src++]; #ifdef DIRTYRECT *dirty++ = 0; x += 8; } while (*dirty && x < SCANLINE_LEN); } dirty++; #endif } #ifdef DIRTYRECT dirty_line += SCREEN_WIDTH / 8; #endif src_line += SCREEN_WIDTH; dst_line += SCANLINE_LEN; } } void Android_Render(void) { const static int crop_joy[] = {0, 0, 64, 64}; const static int crop_fire[] = {65, 0, 16, 15}; const static int crop_lbl[][4] = { {65, 64, 40, -9}, {65, 24, 40, -9}, {65, 34, 40, -9}, {65, 44, 40, -9}, {65, 54, 40, -9} }; const static int crop_all[] = {0, 64, 128, -64}; const struct RECT *r; const struct POINT *p; int i; if (screenclear) glClear(GL_COLOR_BUFFER_BIT); /* --------------------- playfield --------------------- */ glBindTexture(GL_TEXTURE_2D, texture[TEX_SCREEN]); glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, SCANLINE_LEN, SCREEN_HEIGHT, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, hicolor_screen); r = &screenrect; glDrawTexiOES(r->l, r->t, 0, r->w, r->h); if (glGetError() != GL_NO_ERROR) Log_print("OpenGL error at playfield"); /* --------------------- overlays --------------------- */ glEnable(GL_BLEND); /* enable blending */ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); glBindTexture(GL_TEXTURE_2D, texture[TEX_OVL]); if (!AndroidInput_JoyOvl.ovl_visible) goto ck; /*!*/ /* joystick area */ glColor4f(1.0f, 1.0f, 1.0f, AndroidInput_JoyOvl.areaopacitycur); glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop_joy); r = &AndroidInput_JoyOvl.joyarea; glDrawTexiOES(r->l, Android_ScreenH - r->b, 0, r->r - r->l, r->b - r->t); if (glGetError() != GL_NO_ERROR) Log_print("OpenGL error at joy area"); /* stick */ if (AndroidInput_JoyOvl.stickopacity >= OPACITY_CUTOFF) { glColor4f(1.0f, 1.0f, 1.0f, AndroidInput_JoyOvl.stickopacity); glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop_fire); p = &AndroidInput_JoyOvl.joystick; i = AndroidInput_JoyOvl.firewid; glDrawTexiOES(p->x - i, Android_ScreenH - (p->y + i), 0, i << 1, i << 1); if (glGetError() != GL_NO_ERROR) Log_print("OpenGL error at stick"); } /* fire */ if (AndroidInput_JoyOvl.fireopacity >= OPACITY_CUTOFF) { glColor4f(1.0f, 1.0f, 1.0f, AndroidInput_JoyOvl.fireopacity); glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop_fire); p = &AndroidInput_JoyOvl.fire; i = AndroidInput_JoyOvl.firewid; glDrawTexiOES(p->x - i, Android_ScreenH - (p->y + i), 0, i << 1, i << 1); if (glGetError() != GL_NO_ERROR) Log_print("OpenGL error at fire"); } /* glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop_all); glDrawTexiOES(0, 0, 0, 128, 64); */ /* console keys */ ck: if (AndroidInput_ConOvl.ovl_visible) { glDisable(GL_TEXTURE_2D); /* disable texturing */ glColor4f(0.0f, 0.0f, 0.0f, AndroidInput_ConOvl.opacity * 0.7); glVertexPointer(2, GL_SHORT, 0, conkey_shadow); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glColor4f(0.5f, 0.9f, 1.0f, AndroidInput_ConOvl.opacity); glVertexPointer(2, GL_SHORT, 0, conkey_vrt); for (i = 0; i < (CONK_VERT_MAX >> 1); i += 4) glDrawArrays(GL_LINE_LOOP, i, 4); if (AndroidInput_ConOvl.hitkey >= 0) { glColor4f(0.34f, 0.67f, 1.0f, AndroidInput_ConOvl.opacity); glDrawArrays(GL_TRIANGLE_FAN, AndroidInput_ConOvl.hitkey << 2, 4); } glEnable(GL_TEXTURE_2D); /* enable texturing */ glColor4f(1.0f, 1.0f, 1.0f, AndroidInput_ConOvl.opacity); for (i = 0; i < CONK_NUM; ++i) { glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop_lbl[i]); glDrawTexiOES(conkey_lbl[i].x, conkey_lbl[i].y, 0, conkey_lbl[i].w, conkey_lbl[i].h); } if (glGetError() != GL_NO_ERROR) Log_print("OpenGL error at console overlay"); } glDisable(GL_BLEND); /* disable blending */ } void Update_Overlays(void) { struct joy_overlay_state *s; struct consolekey_overlay_state *c; s = &AndroidInput_JoyOvl; c = &AndroidInput_ConOvl; /* joy et co. */ if (s->fireopacity > OPACITY_CUTOFF) s->fireopacity -= 0.05f; else s->fireopacity = 0.0f; if (s->stickopacity > OPACITY_CUTOFF) { s->stickopacity -= 0.05f; s->areaopacityfrm = 0; s->areaopacitycur = s->areaopacityset; } else { s->stickopacity = 0.0f; s->areaopacityfrm++; if (s->areaopacityfrm > OPACITY_FRMSTR) { if (s->areaopacitycur > OPACITY_CUTOFF) s->areaopacitycur -= OPACITY_STEP; else { s->areaopacitycur = OPACITY_CUTOFF; s->areaopacityfrm--; } } } /* console keys */ switch (c->ovl_visible) { case COVL_READY: if (c->hitkey == CONK_NOKEY) c->statecnt -= Android_CovlHold; if (c->statecnt <= 0) { c->statecnt = 0; c->ovl_visible = COVL_FADEOUT; } break; case COVL_FADEOUT: if (c->opacity > OPACITY_CUTOFF) c->opacity -= 2 * OPACITY_STEP; else { c->ovl_visible = COVL_HIDDEN; c->opacity = 0.0f; } break; case COVL_FADEIN: if (c->opacity < COVL_MAX_OPACITY) c->opacity += 4 * OPACITY_STEP; else { c->ovl_visible = COVL_READY; c->opacity = COVL_MAX_OPACITY; c->statecnt = COVL_HOLD_TIME << 1; } break; default: /* COVL_HIDDEN */ ; } if (c->hitkey == CONK_RESET) { if (c->resetcnt >= RESET_HARD) { Atari800_Coldstart(); } else if (c->resetcnt >= RESET_SOFT) { Atari800_Warmstart(); CPU_cim_encountered = FALSE; } c->resetcnt++; } else { c->resetcnt = 0; } } void Android_ExitGraphics(void) { if (hicolor_screen) free(hicolor_screen); hicolor_screen = NULL; if (palette) free(palette); palette = NULL; glDeleteTextures(TEX_MAXNAMES, texture); } atari800-5.0.0/src/android/jni/graphics.h000066400000000000000000000014611425067567700200310ustar00rootroot00000000000000enum { CONK_NUM = 5 }; /* Number of console keys on screen overlay */ #define CONK_VERT_MAX (2 * 4 * CONK_NUM) #define COVL_SHADOW_OFF 10 #define SCREEN_WIDTH 384 #define SCREEN_HEIGHT 240 #define DEAD_WIDTH 48 #define SCANLINE_START (DEAD_WIDTH / 2) #define SCANLINE_END (SCREEN_WIDTH - DEAD_WIDTH / 2) #define SCANLINE_LEN (SCREEN_WIDTH - DEAD_WIDTH) extern int Android_ScreenW; extern int Android_ScreenH; extern int Android_Aspect; extern int Android_Bilinear; extern int Android_CropScreen[]; extern int Android_PortPad; extern int Android_CovlHold; extern float Android_Joyscale; int Android_InitGraphics(void); void Android_ExitGraphics(void); void Android_ConvertScreen(void); void Android_PaletteUpdate(void); void Android_Render(void); void Update_Overlays(void); void Joyovl_Scale(void); atari800-5.0.0/src/android/jni/jni.c000066400000000000000000000474111425067567700170110ustar00rootroot00000000000000/* * jni.c - native functions exported to java * * Copyright (C) 2014 Kostas Nakos * Copyright (C) 2014 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include "log.h" #include "atari.h" #include "input.h" #include "afile.h" #include "screen.h" #include "cpu.h" #include "antic.h" #include "../../memory.h" /* override system header */ #include "sio.h" #include "sysrom.h" #include "akey.h" #include "devices.h" #include "cartridge.h" #include "cartridge_info.h" #include "platform.h" #include "sound.h" #include "statesav.h" #include "util.h" #include "graphics.h" #include "androidinput.h" #define PD2012_FNAME "PD2012.com" /* exports/imports */ int *ovl_texpix; int ovl_texw; int ovl_texh; extern void SoundThread_Update(void *buf, int offs, int len); extern void Android_SoundInit(int rate, int sizems, int bit16, int hq, int disableOSL); extern void Sound_Exit(void); extern void Sound_Pause(void); extern void Sound_Continue(void); extern int Android_osl_sound; struct audiothread { UBYTE *sndbuf; jbyteArray sndarray; }; static pthread_key_t audiothread_data; static char devb_url[512]; static void JNICALL NativeGetOverlays(JNIEnv *env, jobject this) { jclass cls; jfieldID fid; jintArray arr; jboolean cp; cls = (*env)->GetObjectClass(env, this); fid = (*env)->GetFieldID(env, cls, "OVL_TEXW", "I"); ovl_texw = (*env)->GetIntField(env, this, fid); fid = (*env)->GetFieldID(env, cls, "OVL_TEXH", "I"); ovl_texh = (*env)->GetIntField(env, this, fid); ovl_texpix = malloc(ovl_texw * ovl_texh * sizeof(int)); if (ovl_texpix == NULL) Log_print("Cannot allocate memory for overlays"); fid = (*env)->GetFieldID(env, cls, "_pix", "[I"); arr = (*env)->GetObjectField(env, this, fid); (*env)->GetIntArrayRegion(env, arr, 0, ovl_texw * ovl_texh, ovl_texpix); Log_print("Overlays texture initialized: %dx%d", ovl_texw, ovl_texh); } static void JNICALL NativeResize(JNIEnv *env, jobject this, jint w, jint h) { Log_print("Screen resize: %dx%d", w, h); Android_ScreenW = w; Android_ScreenH = h; Android_SplitCalc(); Android_InitGraphics(); } static void JNICALL NativeClearDevB(JNIEnv *env, jobject this) { dev_b_status.ready = FALSE; memset(devb_url, 0, sizeof(devb_url)); } static jstring JNICALL NativeInit(JNIEnv *env, jobject this) { int ac = 1; char av = '\0'; char *avp = &av; pthread_key_create(&audiothread_data, NULL); pthread_setspecific(audiothread_data, NULL); NativeClearDevB(env, this); Atari800_Initialise(&ac, &avp); return (*env)->NewStringUTF(env, Atari800_TITLE); } static jobjectArray JNICALL NativeGetDrvFnames(JNIEnv *env, jobject this) { jobjectArray arr; int i; char tmp[FILENAME_MAX + 3], fname[FILENAME_MAX]; jstring str; arr = (*env)->NewObjectArray(env, 4, (*env)->FindClass(env, "java/lang/String"), NULL); for (i = 0; i < 4; i++) { Util_splitpath(SIO_filename[i], NULL, fname); sprintf(tmp, "D%d:%s", i + 1, fname); str = (*env)->NewStringUTF(env, tmp); (*env)->SetObjectArrayElement(env, arr, i, str); (*env)->DeleteLocalRef(env, str); } return arr; } static void JNICALL NativeUnmountAll(JNIEnv *env, jobject this) { int i; for (i = 1; i <= 4; i++) SIO_DisableDrive(i); } static jboolean JNICALL NativeIsDisk(JNIEnv *env, jobject this, jstring img) { const char *img_utf = NULL; int type; img_utf = (*env)->GetStringUTFChars(env, img, NULL); type = AFILE_DetectFileType(img_utf); (*env)->ReleaseStringUTFChars(env, img, img_utf); switch (type) { case AFILE_ATR: case AFILE_ATX: case AFILE_XFD: case AFILE_ATR_GZ: case AFILE_XFD_GZ: case AFILE_DCM: case AFILE_PRO: return JNI_TRUE; default: return JNI_FALSE; } } static jboolean JNICALL NativeSaveState(JNIEnv *env, jobject this, jstring fname) { const char *fname_utf = NULL; int ret; fname_utf = (*env)->GetStringUTFChars(env, fname, NULL); ret = StateSav_SaveAtariState(fname_utf, "wb", TRUE); Log_print("Saved state %s with return %d", fname_utf, ret); (*env)->ReleaseStringUTFChars(env, fname, fname_utf); return ret; } static jint JNICALL NativeRunAtariProgram(JNIEnv *env, jobject this, jstring img, jint drv, jint reboot) { const char *img_utf = NULL; int ret = 0, r, kb, i, cnt = 0; jclass cls, scls; jfieldID fid; jobjectArray arr, xarr; jstring str; char tmp[128]; if (reboot) { NativeUnmountAll(env, this); CARTRIDGE_Remove(); } img_utf = (*env)->GetStringUTFChars(env, img, NULL); r = AFILE_OpenFile(img_utf, reboot, drv, FALSE); if ((r & 0xFF) == AFILE_ROM && (r >> 8) != 0) { kb = r >> 8; scls = (*env)->FindClass(env, "java/lang/String"); cls = (*env)->GetObjectClass(env, this); fid = (*env)->GetFieldID(env, cls, "_cartTypes", "[[Ljava/lang/String;"); for (i = 1; i < CARTRIDGE_TYPE_COUNT; i++) if (CARTRIDGES[i].kb == kb) cnt++; xarr = (*env)->NewObjectArray(env, 2, scls, NULL); arr = (*env)->NewObjectArray(env, cnt, (*env)->GetObjectClass(env, xarr), NULL); for (cnt = 0, i = 1; i < CARTRIDGE_TYPE_COUNT; i++) if (CARTRIDGES[i].kb == kb) { sprintf(tmp, "%d", i); str = (*env)->NewStringUTF(env, tmp); (*env)->SetObjectArrayElement(env, xarr, 0, str); (*env)->DeleteLocalRef(env, str); str = (*env)->NewStringUTF(env, CARTRIDGES[i].description); (*env)->SetObjectArrayElement(env, xarr, 1, str); (*env)->DeleteLocalRef(env, str); (*env)->SetObjectArrayElement(env, arr, cnt++, xarr); (*env)->DeleteLocalRef(env, xarr); xarr = (*env)->NewObjectArray(env, 2, scls, NULL); } (*env)->SetObjectField(env, this, fid, arr); ret = -2; } else if (r == AFILE_ERROR) { Log_print("Cannot start image: %s", img_utf); ret = -1; } else CPU_cim_encountered = FALSE; (*env)->ReleaseStringUTFChars(env, img, img_utf); return ret; } static void JNICALL NativeBootCartType(JNIEnv *env, jobject this, jint kb) { CARTRIDGE_SetTypeAutoReboot(&CARTRIDGE_main, kb); Atari800_Coldstart(); } static void JNICALL NativeExit(JNIEnv *env, jobject this) { Atari800_Exit(FALSE); } static jint JNICALL NativeRunFrame(JNIEnv *env, jobject this) { static int old_cim = FALSE; int ret = 0; do { INPUT_key_code = PLATFORM_Keyboard(); if (!CPU_cim_encountered) Atari800_Frame(); else Atari800_display_screen = TRUE; if (Atari800_display_screen || CPU_cim_encountered) PLATFORM_DisplayScreen(); if (!old_cim && CPU_cim_encountered) ret = 1; old_cim = CPU_cim_encountered; } while (!Atari800_display_screen); if (dev_b_status.ready && devb_url[0] == '\0') { if (strlen(dev_b_status.url)) { strncpy(devb_url, dev_b_status.url, sizeof(devb_url)); Log_print("Received b: device URL: %s", devb_url); ret |= 2; } else Log_print("Device b: signalled with zero-length url"); } return ret; } static void JNICALL NativeSoundInit(JNIEnv *env, jobject this, jint size) { jclass cls; jfieldID fid; jintArray arr; struct audiothread *at; Log_print("Audio init with buffer size %d", size); if (pthread_getspecific(audiothread_data)) Log_print("Audiothread data already allocated for current thread"); at = (struct audiothread *) malloc(sizeof(struct audiothread)); cls = (*env)->GetObjectClass(env, this); fid = (*env)->GetFieldID(env, cls, "_buffer", "[B"); arr = (*env)->GetObjectField(env, this, fid); at->sndarray = (*env)->NewGlobalRef(env, arr); at->sndbuf = malloc(size); if (!at->sndbuf) Log_print("Cannot allocate memory for sound buffer"); pthread_setspecific(audiothread_data, at); } static void JNICALL NativeSoundUpdate(JNIEnv *env, jobject this, jint offset, jint length) { struct audiothread *at; if ( !(at = (struct audiothread *) pthread_getspecific(audiothread_data)) ) return; SoundThread_Update(at->sndbuf, offset, length); (*env)->SetByteArrayRegion(env, at->sndarray, offset, length, (jbyte *)at->sndbuf + offset); } static void JNICALL NativeSoundExit(JNIEnv *env, jobject this) { struct audiothread *at; Log_print("Audio exit"); if ( !(at = (struct audiothread *) pthread_getspecific(audiothread_data)) ) return; (*env)->DeleteGlobalRef(env, at->sndarray); if (at->sndbuf) free(at->sndbuf); free(at); pthread_setspecific(audiothread_data, NULL); } static void JNICALL NativeKey(JNIEnv *env, jobject this, int k, int s) { Android_KeyEvent(k, s); } static int JNICALL NativeTouch(JNIEnv *env, jobject this, int x1, int y1, int s1, int x2, int y2, int s2) { return Android_TouchEvent(x1, y1, s1, x2, y2, s2); } static void JNICALL NativePrefGfx(JNIEnv *env, jobject this, int aspect, jboolean bilinear, int artifact, int frameskip, jboolean collisions, int crophoriz, int cropvert, int portpad, int covlhold) { Android_Aspect = aspect; Android_Bilinear = bilinear; ANTIC_artif_mode = artifact; ANTIC_UpdateArtifacting(); if (frameskip == 0) { Atari800_refresh_rate = 1; Atari800_auto_frameskip = TRUE; } else { Atari800_auto_frameskip = FALSE; Atari800_refresh_rate = frameskip; } Atari800_collisions_in_skipped_frames = collisions; Android_CropScreen[0] = (SCANLINE_LEN - crophoriz) / 2; Android_CropScreen[2] = crophoriz; Android_CropScreen[1] = SCREEN_HEIGHT - (SCREEN_HEIGHT - cropvert) / 2; Android_CropScreen[3] = -cropvert; Screen_visible_x1 = SCANLINE_START + Android_CropScreen[0]; Screen_visible_x2 = Screen_visible_x1 + crophoriz; Screen_visible_y1 = SCREEN_HEIGHT - Android_CropScreen[1]; Screen_visible_y2 = Screen_visible_y1 + cropvert; Android_PortPad = portpad; Android_CovlHold = covlhold; } static jboolean JNICALL NativePrefMachine(JNIEnv *env, jobject this, int nummac, jboolean ntsc) { struct tSysConfig { int type; int ram; }; static const struct tSysConfig machine[] = { { Atari800_MACHINE_800, 16 }, { Atari800_MACHINE_800, 48 }, { Atari800_MACHINE_800, 52 }, { Atari800_MACHINE_800, 16 }, { Atari800_MACHINE_800, 48 }, { Atari800_MACHINE_800, 52 }, { Atari800_MACHINE_XLXE, 16 }, { Atari800_MACHINE_XLXE, 64 }, { Atari800_MACHINE_XLXE, 128 }, { Atari800_MACHINE_XLXE, 192 }, { Atari800_MACHINE_XLXE, MEMORY_RAM_320_RAMBO }, { Atari800_MACHINE_XLXE, MEMORY_RAM_320_COMPY_SHOP }, { Atari800_MACHINE_XLXE, 576 }, { Atari800_MACHINE_XLXE, 1088 }, { Atari800_MACHINE_5200, 16 } }; Atari800_SetMachineType(machine[nummac].type); MEMORY_ram_size = machine[nummac].ram; /* Temporary hack to allow choosing OS rev. A/B and XL/XE features. Delete after adding proper support for choosing system settings. */ if (nummac < 3) /* all OS/A entries */ /* Force OS rev. A. */ SYSROM_os_versions[Atari800_MACHINE_800] = ntsc ? SYSROM_A_NTSC : SYSROM_A_PAL; else if (nummac >= 3 && nummac < 6) /* all OS/B entries */ /* Don't force OS revision - might select rev. A if no rev. B ROM is available. */ SYSROM_os_versions[Atari800_MACHINE_800] = SYSROM_AUTO; else if (Atari800_machine_type == Atari800_MACHINE_XLXE) { Atari800_builtin_basic = TRUE; Atari800_keyboard_leds = FALSE; Atari800_f_keys = FALSE; Atari800_jumper = FALSE; Atari800_builtin_game = FALSE; Atari800_keyboard_detached = FALSE; } /* End of hack */ Atari800_SetTVMode(ntsc ? Atari800_TV_NTSC : Atari800_TV_PAL); CPU_cim_encountered = FALSE; return Atari800_InitialiseMachine(); } static void JNICALL NativePrefEmulation(JNIEnv *env, jobject this, jboolean basic, jboolean speed, jboolean disk, jboolean sector, jboolean browser) { Atari800_disable_basic = basic; Screen_show_atari_speed = speed; Screen_show_disk_led = disk; Screen_show_sector_counter = sector; Devices_enable_b_patch = browser; Devices_UpdatePatches(); } static void JNICALL NativePrefSoftjoy(JNIEnv *env, jobject this, jboolean softjoy, int up, int down, int left, int right, int fire, int derotkeys, jobjectArray actions) { int i; jobject obj; const char *str; char *sep; UBYTE act, akey; Android_SoftjoyEnable = softjoy; softjoymap[SOFTJOY_UP][0] = up; softjoymap[SOFTJOY_DOWN][0] = down; softjoymap[SOFTJOY_LEFT][0] = left; softjoymap[SOFTJOY_RIGHT][0] = right; softjoymap[SOFTJOY_FIRE][0] = fire; Android_DerotateKeys = derotkeys; for (i = 0; i < SOFTJOY_MAXACTIONS; i++) { obj = (*env)->GetObjectArrayElement(env, actions, i); str = (*env)->GetStringUTFChars(env, obj, NULL); sep = strchr(str, ','); act = ACTION_NONE; akey = AKEY_NONE; if (sep) { act = atoi(str); akey = atoi(sep + 1); } softjoymap[SOFTJOY_ACTIONBASE + i][0] = act; softjoymap[SOFTJOY_ACTIONBASE + i][1] = akey; (*env)->ReleaseStringUTFChars(env, obj, str); (*env)->DeleteLocalRef(env, obj); } } static void config_PD(void) { INPUT_mouse_mode = INPUT_MOUSE_PAD; Android_Splitpct = 1.0f; AndroidInput_JoyOvl.ovl_visible = FALSE; Android_PlanetaryDefense = TRUE; Android_Paddle = TRUE; Android_ReversePddle = 3; } static void JNICALL NativePrefJoy(JNIEnv *env, jobject this, jboolean visible, int size, int opacity, jboolean righth, int deadband, jboolean midx, int anchor, int anchorx, int anchory, int grace, jboolean paddle, jboolean plandef) { AndroidInput_JoyOvl.ovl_visible = visible; AndroidInput_JoyOvl.areaopacityset = 0.01f * opacity; Android_Joyscale = 0.01f * size; Android_Joyleft = !righth; Android_Splitpct = 0.01f * midx; AndroidInput_JoyOvl.deadarea = 0.01f * deadband; AndroidInput_JoyOvl.gracearea = 0.02f * grace; AndroidInput_JoyOvl.anchor = anchor; if (anchor) { AndroidInput_JoyOvl.joyarea.l = anchorx; AndroidInput_JoyOvl.joyarea.t = anchory; } Android_Paddle = paddle; INPUT_mouse_mode = paddle ? INPUT_MOUSE_PAD : INPUT_MOUSE_OFF; Android_PlanetaryDefense = FALSE; Android_ReversePddle = 0; if (plandef) config_PD(); Android_SplitCalc(); Joyovl_Scale(); Joy_Reposition(); } static void JNICALL NativePrefSound(JNIEnv *env, jobject this, int mixrate, int bufsizems, jboolean sound16bit, jboolean hqpokey, jboolean disableOSL) { Android_SoundInit(mixrate, bufsizems, sound16bit, hqpokey, disableOSL); } static jboolean JNICALL NativeSetROMPath(JNIEnv *env, jobject this, jstring path) { const char *utf = NULL; jboolean ret = JNI_FALSE; utf = (*env)->GetStringUTFChars(env, path, NULL); SYSROM_FindInDir(utf, FALSE); Log_print("sysrom %s %d", utf, SYSROM_FindInDir(utf, FALSE)); ret |= chdir(utf); Log_print("sysrom %s %d", utf, SYSROM_FindInDir(utf, FALSE)); ret |= Atari800_InitialiseMachine(); (*env)->ReleaseStringUTFChars(env, path, utf); return ret; } static jstring JNICALL NativeGetJoypos(JNIEnv *env, jobject this) { char tmp[16]; sprintf(tmp, "%d %d", AndroidInput_JoyOvl.joyarea.l, AndroidInput_JoyOvl.joyarea.t); return (*env)->NewStringUTF(env, tmp); } static jstring JNICALL NativeGetURL(JNIEnv *env, jobject this) { return (*env)->NewStringUTF(env, dev_b_status.url); } static jboolean JNICALL NativeBootPD(JNIEnv *env, jobject this, jobjectArray img, jint sz) { FILE *fp; void *src; fp = fopen(PD2012_FNAME, "wb"); if (!fp) { Log_print("ERROR: Cannot open PD2012 for write"); return FALSE; } src = (*env)->GetByteArrayElements(env, img, NULL); fwrite(src, 1, sz, fp); fclose(fp); (*env)->ReleaseByteArrayElements(env, img, src, JNI_ABORT); config_PD(); NativeUnmountAll(env, this); CARTRIDGE_Remove(); return AFILE_OpenFile(PD2012_FNAME, TRUE, 1, FALSE); } static jboolean JNICALL NativeOSLSound(JNIEnv *env, jobject this) { return Android_osl_sound; } static void JNICALL NativeOSLSoundPause(JNIEnv *env, jobject this, jboolean pause) { if (pause) Sound_Pause(); else Sound_Continue(); } static void JNICALL NativeOSLSoundInit(JNIEnv *env, jobject this) { Sound_Initialise(0, NULL); } static void JNICALL NativeOSLSoundExit(JNIEnv *env, jobject this) { Sound_Exit(); } jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved) { JNINativeMethod main_methods[] = { { "NativeExit", "()V", NativeExit }, { "NativeRunAtariProgram", "(Ljava/lang/String;II)I", NativeRunAtariProgram }, { "NativePrefGfx", "(IZIIZIIII)V", NativePrefGfx }, { "NativePrefMachine", "(IZ)Z", NativePrefMachine }, { "NativePrefEmulation", "(ZZZZZ)V", NativePrefEmulation }, { "NativePrefSoftjoy", "(ZIIIIII[Ljava/lang/String;)V", NativePrefSoftjoy }, { "NativePrefJoy", "(ZIIZIIZIIIZZ)V", NativePrefJoy }, { "NativePrefSound", "(IIZZZ)V", NativePrefSound }, { "NativeSetROMPath", "(Ljava/lang/String;)Z", NativeSetROMPath }, { "NativeGetJoypos", "()Ljava/lang/String;", NativeGetJoypos }, { "NativeInit", "()Ljava/lang/String;", NativeInit }, { "NativeGetURL", "()Ljava/lang/String;", NativeGetURL }, { "NativeClearDevB", "()V", NativeClearDevB }, { "NativeBootCartType", "(I)V", NativeBootCartType }, }; JNINativeMethod view_methods[] = { { "NativeTouch", "(IIIIII)I", NativeTouch }, { "NativeKey", "(II)V", NativeKey }, }; JNINativeMethod snd_methods[] = { { "NativeSoundInit", "(I)V", NativeSoundInit }, { "NativeSoundUpdate", "(II)V", NativeSoundUpdate }, { "NativeSoundExit", "()V", NativeSoundExit }, { "NativeOSLSound", "()Z", NativeOSLSound }, { "NativeOSLSoundInit", "()V", NativeOSLSoundInit }, { "NativeOSLSoundExit", "()V", NativeOSLSoundExit }, { "NativeOSLSoundPause", "(Z)V", NativeOSLSoundPause }, }; JNINativeMethod render_methods[] = { { "NativeRunFrame", "()I", NativeRunFrame }, { "NativeGetOverlays", "()V", NativeGetOverlays }, { "NativeResize", "(II)V", NativeResize }, }; JNINativeMethod fsel_methods[] = { { "NativeIsDisk", "(Ljava/lang/String;)Z", NativeIsDisk }, { "NativeRunAtariProgram", "(Ljava/lang/String;II)I", NativeRunAtariProgram }, { "NativeGetDrvFnames", "()[Ljava/lang/String;", NativeGetDrvFnames }, { "NativeUnmountAll", "()V", NativeUnmountAll }, }; JNINativeMethod pref_methods[] = { { "NativeSaveState", "(Ljava/lang/String;)Z", NativeSaveState }, { "NativeBootPD", "([BI)Z", NativeBootPD }, { "NativeOSLSound", "()Z", NativeOSLSound }, }; JNIEnv *env; jclass cls; if ((*jvm)->GetEnv(jvm, (void **) &env, JNI_VERSION_1_2)) return JNI_ERR; cls = (*env)->FindClass(env, "name/nick/jubanka/colleen/MainActivity"); (*env)->RegisterNatives(env, cls, main_methods, sizeof(main_methods)/sizeof(JNINativeMethod)); cls = (*env)->FindClass(env, "name/nick/jubanka/colleen/A800view"); (*env)->RegisterNatives(env, cls, view_methods, sizeof(view_methods)/sizeof(JNINativeMethod)); cls = (*env)->FindClass(env, "name/nick/jubanka/colleen/AudioThread"); (*env)->RegisterNatives(env, cls, snd_methods, sizeof(snd_methods)/sizeof(JNINativeMethod)); cls = (*env)->FindClass(env, "name/nick/jubanka/colleen/A800Renderer"); (*env)->RegisterNatives(env, cls, render_methods, sizeof(render_methods)/sizeof(JNINativeMethod)); cls = (*env)->FindClass(env, "name/nick/jubanka/colleen/FileSelector"); (*env)->RegisterNatives(env, cls, fsel_methods, sizeof(fsel_methods)/sizeof(JNINativeMethod)); cls = (*env)->FindClass(env, "name/nick/jubanka/colleen/Preferences"); (*env)->RegisterNatives(env, cls, pref_methods, sizeof(pref_methods)/sizeof(JNINativeMethod)); return JNI_VERSION_1_2; } atari800-5.0.0/src/android/jni/keys.inc000066400000000000000000000056211425067567700175300ustar00rootroot00000000000000#define STATIC_MAXKEYS 256 #define KEY_SHIFT 256 #define KEY_CONTROL 257 #define KEY_BACKSPACE 255 #define KEY_UP 254 #define KEY_DOWN 253 #define KEY_LEFT 252 #define KEY_RIGHT 251 #define KEY_FIRE 250 #define KEY_ENTER 249 #define KEY_ESCAPE 248 #define KEY_BREAK 242 /* Disable warnings caused by initializing some elements of skeyxlat twice. */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Winitializer-overrides" static const SWORD skeyxlat[STATIC_MAXKEYS] = { [0 ... (STATIC_MAXKEYS - 1)] = AKEY_NONE, ['0'] = AKEY_0, ['1'] = AKEY_1, ['2'] = AKEY_2, ['3'] = AKEY_3, ['4'] = AKEY_4, ['5'] = AKEY_5, ['6'] = AKEY_6, ['7'] = AKEY_7, ['8'] = AKEY_8, ['9'] = AKEY_9, ['a'] = AKEY_a, ['b'] = AKEY_b, ['c'] = AKEY_c, ['d'] = AKEY_d, ['e'] = AKEY_e, ['f'] = AKEY_f, ['g'] = AKEY_g, ['h'] = AKEY_h, ['i'] = AKEY_i, ['j'] = AKEY_j, ['k'] = AKEY_k, ['l'] = AKEY_l, ['m'] = AKEY_m, ['n'] = AKEY_n, ['o'] = AKEY_o, ['p'] = AKEY_p, ['q'] = AKEY_q, ['r'] = AKEY_r, ['s'] = AKEY_s, ['t'] = AKEY_t, ['u'] = AKEY_u, ['v'] = AKEY_v, ['w'] = AKEY_w, ['x'] = AKEY_x, ['y'] = AKEY_y, ['z'] = AKEY_z, ['A'] = AKEY_A, ['B'] = AKEY_B, ['C'] = AKEY_C, ['D'] = AKEY_D, ['E'] = AKEY_E, ['F'] = AKEY_F, ['G'] = AKEY_G, ['H'] = AKEY_H, ['I'] = AKEY_I, ['J'] = AKEY_J, ['K'] = AKEY_K, ['L'] = AKEY_L, ['M'] = AKEY_M, ['N'] = AKEY_N, ['O'] = AKEY_O, ['P'] = AKEY_P, ['Q'] = AKEY_Q, ['R'] = AKEY_R, ['S'] = AKEY_S, ['T'] = AKEY_T, ['U'] = AKEY_U, ['V'] = AKEY_V, ['W'] = AKEY_W, ['X'] = AKEY_X, ['Y'] = AKEY_Y, ['Z'] = AKEY_Z, ['\e'] = AKEY_ESCAPE, ['~'] = AKEY_ESCAPE, ['\t'] = AKEY_TAB, ['\n'] = AKEY_RETURN, [' '] = AKEY_SPACE, ['!'] = AKEY_EXCLAMATION, ['\"'] = AKEY_DBLQUOTE, ['#'] = AKEY_HASH, ['$'] = AKEY_DOLLAR, ['%'] = AKEY_PERCENT, ['&'] = AKEY_AMPERSAND, ['\''] = AKEY_QUOTE, ['@'] = AKEY_AT, ['('] = AKEY_PARENLEFT, [')'] = AKEY_PARENRIGHT, ['<'] = AKEY_LESS, ['>'] = AKEY_GREATER, ['='] = AKEY_EQUAL, ['?'] = AKEY_QUESTION, ['-'] = AKEY_MINUS, ['+'] = AKEY_PLUS, ['*'] = AKEY_ASTERISK, ['/'] = AKEY_SLASH, [':'] = AKEY_COLON, [';'] = AKEY_SEMICOLON, [','] = AKEY_COMMA, ['.'] = AKEY_FULLSTOP, ['_'] = AKEY_UNDERSCORE, ['['] = AKEY_BRACKETLEFT, [']'] = AKEY_BRACKETRIGHT, ['^'] = AKEY_CIRCUMFLEX, ['\\'] = AKEY_BACKSLASH, ['|'] = AKEY_BAR, ['`'] = AKEY_CAPSTOGGLE, ['{'] = AKEY_ATARI, [KEY_BACKSPACE] = AKEY_BACKSPACE, [KEY_UP ] = AKEY_UP, [KEY_DOWN ] = AKEY_DOWN, [KEY_LEFT ] = AKEY_LEFT, [KEY_RIGHT ] = AKEY_RIGHT, [KEY_ENTER ] = AKEY_RETURN, [KEY_ESCAPE ] = AKEY_ESCAPE, [KEY_BREAK ] = AKEY_BREAK, /* unmapped codes #define AKEY_HELP 0x11 #define AKEY_DELETE_CHAR 0xb4 #define AKEY_DELETE_LINE 0x74 #define AKEY_INSERT_CHAR 0xb7 #define AKEY_INSERT_LINE 0x77 #define AKEY_SETTAB 0x6c #define AKEY_CLRTAB 0xac */ }; #pragma GCC diagnostic pop atari800-5.0.0/src/android/jni/platform.c000066400000000000000000000037421425067567700200540ustar00rootroot00000000000000/* * platform.c - platform interface implementation for android * * Copyright (C) 2010 Kostas Nakos * Copyright (C) 2010 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "atari.h" #include "cpu.h" #include "input.h" #include "devices.h" #include "log.h" #include "graphics.h" #include "androidinput.h" int PLATFORM_Initialise(int *argc, char *argv[]) { /* Android_InitGraphics() is deferred until GL surface is created */ /* Sound_Initialise() not needed */ Log_print("Core init"); Input_Initialize(); Devices_enable_h_patch = FALSE; INPUT_direct_mouse = TRUE; return TRUE; } int PLATFORM_Exit(int run_monitor) { if (CPU_cim_encountered) { Log_print("CIM encountered"); return TRUE; } Log_print("Core_exit"); Android_ExitGraphics(); return FALSE; } int PLATFORM_Keyboard(void) { return Keyboard_Dequeue(); } void PLATFORM_DisplayScreen(void) { Android_ConvertScreen(); Android_Render(); Update_Overlays(); } void PLATFORM_PaletteUpdate(void) { Android_PaletteUpdate(); } int PLATFORM_PORT(int num) { return (Android_PortStatus >> (num << 3)) & 0xFF; } int PLATFORM_TRIG(int num) { return (Android_TrigStatus >> num) & 0x1; } atari800-5.0.0/src/android/jni/sound.c000066400000000000000000000250531425067567700173570ustar00rootroot00000000000000/* * sound.c - android sound * * Copyright (C) 2014 Kostas Nakos * Copyright (C) 2014 Atari800 development team (see DOC/CREDITS) * * This file is part of the Atari800 emulator project which emulates * the Atari 400, 800, 800XL, 130XE, and 5200 8-bit computers. * * Atari800 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. * * Atari800 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 Atari800; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include "pokeysnd.h" #include "log.h" static int at_sixteenbit = 0; static int snd_bufsizems = 0; static int snd_mixrate = 0; #define OSL_BUFSIZE_MS 10 static void *osl_handle; int Android_osl_sound; static int osl_disable = 0; static int osl_bufnum = 0; static int osl_bufszbytes = 0; static UBYTE *osl_soundbuf = NULL; static UBYTE **osl_soundbufptr = NULL; static ULONG osl_lastplayedindex = 0; static volatile ULONG osl_lastindex = 0; static int osl_nextbufindex = 0; static SLObjectItf osl_engine = NULL, osl_mixer = NULL, osl_player = NULL; static SLEngineItf osl_engineif = NULL; static SLPlayItf osl_playif = NULL; static SLAndroidSimpleBufferQueueItf osl_bufqif = NULL; static SLresult SLAPIENTRY (*osl_slCreateEngine) ( SLObjectItf *pEngine, SLuint32 numOptions, const SLEngineOption *pEngineOptions, SLuint32 numInterfaces, const SLInterfaceID *pInterfaceIds, const SLboolean * pInterfaceRequired ) = NULL; static SLAPIENTRY const SLInterfaceID *osl_SL_IID_VOLUME; static SLAPIENTRY const SLInterfaceID *osl_SL_IID_ANDROIDSIMPLEBUFFERQUEUE; static SLAPIENTRY const SLInterfaceID *osl_SL_IID_ENGINE; static SLAPIENTRY const SLInterfaceID *osl_SL_IID_PLAY; #define CHECK_OSL(command, errmsg) \ if ( (res = command) != SL_RESULT_SUCCESS ) { \ Log_print("ERROR: OSL: Cannot " errmsg " (%08X)", res); \ return FALSE; \ } else \ (void) 0 #define GET_SYMBOL(var, sname) \ var = dlsym(osl_handle, sname); \ errstr = dlerror(); \ if (errstr) { \ Log_print("ERROR: Cannot resolve " sname ": %s", errstr); \ return FALSE; \ } else \ (void) 0 void Sound_Continue(void); /* Legacy AudioThread functions */ void Android_SoundInit(int rate, int bufsizems, int bit16, int hq, int disableOSL) { Log_print("SoundInit for android initializing with %dHz, %d bufsize, OSL %s", rate, bufsizems, (disableOSL) ? "off" : "on"); POKEYSND_bienias_fix = 0; POKEYSND_enable_new_pokey = hq; at_sixteenbit = bit16; snd_bufsizems = bufsizems; snd_mixrate = rate; osl_bufnum = snd_bufsizems / OSL_BUFSIZE_MS; osl_bufszbytes = OSL_BUFSIZE_MS * (at_sixteenbit ? 2 : 1) * snd_mixrate / 1000; osl_disable = disableOSL; if (disableOSL) Android_osl_sound = FALSE; Log_print("Initializing POKEY"); POKEYSND_Init(POKEYSND_FREQ_17_EXACT, rate, 1, bit16 ? POKEYSND_BIT16 : 0); Log_print("POKEY init done"); } void SoundThread_Update(void *buf, int offs, int len) { POKEYSND_Process(buf + offs, len >> at_sixteenbit); } /* Native sound helpers */ static int OSL_grab_functions(void) { const char *errstr; dlerror(); GET_SYMBOL(osl_slCreateEngine, "slCreateEngine"); GET_SYMBOL(osl_SL_IID_VOLUME, "SL_IID_VOLUME"); GET_SYMBOL(osl_SL_IID_ANDROIDSIMPLEBUFFERQUEUE, "SL_IID_ANDROIDSIMPLEBUFFERQUEUE"); GET_SYMBOL(osl_SL_IID_ENGINE, "SL_IID_ENGINE"); GET_SYMBOL(osl_SL_IID_PLAY, "SL_IID_PLAY"); return TRUE; } static int OSL_load(void) { osl_handle = dlopen("libOpenSLES.so", RTLD_LAZY); if (! osl_handle) { Log_print("Cannot dlopen OSL"); return FALSE; } if ( OSL_grab_functions() ) { Log_print("Open SL ES found and bound"); return TRUE; } return FALSE; } void OSL_process(SLAndroidSimpleBufferQueueItf bufqif, void *ctx) { SLAndroidSimpleBufferQueueState st; if ( (*bufqif)->GetState(bufqif, &st) != SL_RESULT_SUCCESS ) { Log_print("ERROR: Cannot get queue state"); return; } osl_lastindex = st.index; } static int OSL_init(void) { SLresult res; const SLInterfaceID mixids[] = { *osl_SL_IID_VOLUME }; const SLboolean mixreq[] = { SL_BOOLEAN_FALSE }; SLDataLocator_AndroidSimpleBufferQueue dlsbq = { .locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, .numBuffers = osl_bufnum }; SLDataFormat_PCM dfpcm = { .formatType = SL_DATAFORMAT_PCM, .numChannels = 1, .samplesPerSec = (snd_mixrate == 44100) ? SL_SAMPLINGRATE_44_1 : (snd_mixrate == 22050) ? SL_SAMPLINGRATE_22_05 : (snd_mixrate == 11025) ? SL_SAMPLINGRATE_11_025: 0, .bitsPerSample = (at_sixteenbit) ? SL_PCMSAMPLEFORMAT_FIXED_16 : SL_PCMSAMPLEFORMAT_FIXED_8, .containerSize = (at_sixteenbit) ? SL_PCMSAMPLEFORMAT_FIXED_16 : SL_PCMSAMPLEFORMAT_FIXED_8, .channelMask = SL_SPEAKER_FRONT_CENTER, .endianness = SL_BYTEORDER_LITTLEENDIAN }; SLDataSource dsrc = { .pLocator = &dlsbq, .pFormat = &dfpcm }; SLDataLocator_OutputMix dlmix = { .locatorType = SL_DATALOCATOR_OUTPUTMIX, .outputMix = NULL }; SLDataSink dsnk = { .pLocator = &dlmix, .pFormat = NULL }; const SLInterfaceID apids[] = { *osl_SL_IID_ANDROIDSIMPLEBUFFERQUEUE }; const SLboolean apreq[] = { SL_BOOLEAN_TRUE }; if (dfpcm.samplesPerSec == 0) { Log_print("ERROR: Incorrect mixrate %d", snd_mixrate); return FALSE; } /* engine */ CHECK_OSL( osl_slCreateEngine(&osl_engine, 0, NULL, 0, NULL, NULL), "create engine"); CHECK_OSL( (*osl_engine)->Realize(osl_engine, SL_BOOLEAN_FALSE), "realize engine"); CHECK_OSL( (*osl_engine)->GetInterface(osl_engine, *osl_SL_IID_ENGINE, &osl_engineif), "get engine i/f"); /* mixer */ CHECK_OSL( (*osl_engineif)->CreateOutputMix(osl_engineif, &osl_mixer, 1, mixids, mixreq), "create mixer"); CHECK_OSL( (*osl_mixer)->Realize(osl_mixer, SL_BOOLEAN_FALSE), "realize mixer"); dlmix.outputMix = osl_mixer; /* player */ CHECK_OSL( (*osl_engineif)->CreateAudioPlayer(osl_engineif, &osl_player, &dsrc, &dsnk, 1, apids, apreq), "create player"); CHECK_OSL( (*osl_player)->Realize(osl_player, SL_BOOLEAN_FALSE), "realize player"); CHECK_OSL( (*osl_player)->GetInterface(osl_player, *osl_SL_IID_PLAY, &osl_playif), "get player i/f"); CHECK_OSL( (*osl_player)->GetInterface(osl_player, *osl_SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &osl_bufqif), "get buffer queue i/f"); /* register callback */ CHECK_OSL( (*osl_bufqif)->RegisterCallback(osl_bufqif, OSL_process, NULL), "register callback"); Log_print("OpenSL ES initialized successfully"); return TRUE; } static void OSL_stop_playback(void) { SLuint32 playstate; (*osl_playif)->SetPlayState(osl_playif, SL_PLAYSTATE_STOPPED); Log_print("Waiting for OSL player to finish"); do { usleep(50000); (*osl_playif)->GetPlayState(osl_playif, &playstate); } while (playstate != SL_PLAYSTATE_STOPPED); Log_print("Playback finished"); } static void OSL_teardown(void) { if (osl_playif) { OSL_stop_playback(); (*osl_player)->Destroy(osl_player); osl_player = NULL; osl_playif = NULL; osl_bufqif = NULL; } if (osl_mixer) { (*osl_mixer)->Destroy(osl_mixer); osl_mixer = NULL; } if (osl_engine) { (*osl_engine)->Destroy(osl_engine); osl_engine = NULL; osl_engineif = NULL; } Log_print("OpenSL teardown complete"); } static void OSL_buf_free(void) { if (osl_soundbufptr) { free(osl_soundbufptr); osl_soundbufptr = NULL; } if (osl_soundbuf) { free(osl_soundbuf); osl_soundbuf = NULL; } } static int OSL_buf_alloc(void) { UBYTE *ptr; int i; if (osl_soundbuf || osl_soundbufptr) { Log_print("WARNING: Sound buffers already allocated. Freeing."); OSL_buf_free(); } if (! ( osl_soundbufptr = (UBYTE **) malloc(osl_bufnum * sizeof(void *)) ) ) { Log_print("ERROR: Cannot allocate sound buffer pointers (%d)", osl_bufnum); return FALSE; } if (! ( osl_soundbuf = (UBYTE *) malloc(osl_bufnum * osl_bufszbytes) ) ) { Log_print("ERROR: Cannot allocate sound buffer for %d buffers of %d bytes each", osl_bufnum, osl_bufszbytes); return FALSE; } memset(osl_soundbuf, 0, osl_bufnum * osl_bufszbytes); for (ptr = osl_soundbuf, i = 0; i < osl_bufnum; i++, ptr += osl_bufszbytes) osl_soundbufptr[i] = ptr; Log_print("Allocated OK sound buffer for %d buffers %dms each, %d bits at %dHz", osl_bufnum, OSL_BUFSIZE_MS, (at_sixteenbit) ? 16 : 8, snd_mixrate); return TRUE; } static int OSL_start_playback(void) { SLresult res; int i; Sound_Continue(); for (i = 0; i < osl_bufnum; i++) { if (! osl_bufqif) return FALSE; CHECK_OSL( (*osl_bufqif)->Enqueue(osl_bufqif, osl_soundbufptr[i], osl_bufszbytes), "enqueue init buffer"); } osl_nextbufindex = 0; osl_lastindex = osl_lastplayedindex = 0; Log_print("Buffer queue bootstrap OK"); return TRUE; } /* Platform interface. Used only with SL sound */ void Sound_Exit(void) { Log_print("Sound exit"); OSL_teardown(); OSL_buf_free(); if (osl_handle) { dlclose(osl_handle); osl_handle = NULL; } Android_osl_sound = FALSE; } int Sound_Initialise(int *argc, char *argv[]) { Android_osl_sound = TRUE; if ( osl_disable || ! OSL_load() || ! OSL_init() || ! OSL_buf_alloc() || ! OSL_start_playback() ) { Android_osl_sound = FALSE; Sound_Exit(); Log_print("Using legacy AudioThread"); } else Log_print("Using OpenSL ES sound"); return 1; } void Sound_Update(void) { SLresult res; while (osl_lastplayedindex < osl_lastindex) { if (! osl_soundbufptr) return; POKEYSND_Process(osl_soundbufptr[osl_nextbufindex], osl_bufszbytes >> at_sixteenbit); if (! osl_bufqif) return; res = (*osl_bufqif)->Enqueue(osl_bufqif, osl_soundbufptr[osl_nextbufindex], osl_bufszbytes); if (res != SL_RESULT_SUCCESS) { Log_print("Cannot enqueue buffer #%d (%08X)", osl_nextbufindex, res); return; } osl_nextbufindex = (osl_nextbufindex + 1) % osl_bufnum; osl_lastplayedindex++; } } void Sound_Pause(void) { Log_print("OSL pausing sound"); if (! osl_playif) return; (*osl_playif)->SetPlayState(osl_playif, SL_PLAYSTATE_PAUSED); } void Sound_Continue(void) { Log_print("OSL resuming sound"); if (! osl_playif) return; (*osl_playif)->SetPlayState(osl_playif, SL_PLAYSTATE_PLAYING); } atari800-5.0.0/src/android/project.properties000066400000000000000000000010631425067567700210620ustar00rootroot00000000000000# This file is automatically generated by Android Tools. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file must be checked in Version Control Systems. # # To customize properties used by the Ant build system edit # "ant.properties", and override values to adapt the script to your # project structure. # # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. target=android-20 atari800-5.0.0/src/android/res/000077500000000000000000000000001425067567700160675ustar00rootroot00000000000000atari800-5.0.0/src/android/res/drawable-hdpi/000077500000000000000000000000001425067567700205725ustar00rootroot00000000000000atari800-5.0.0/src/android/res/drawable-hdpi/icon.png000066400000000000000000000066001425067567700222320ustar00rootroot00000000000000PNG  IHDR<<:rsRGBbKGD pHYs B(xtIME c IDAThZ]luν3sg]@j:dՅE 4Z(< lyЋ07#>8mV5:I OBJQ&]r w%E|s.a\KKKp>X__Ow=Ip\]]#Dt x)?ܵ/\p39)e855L~]kp4ȗ^zi$?!ӭVOl۷iVGsBv^^^ $q?LDA<[w# "BZnG>wܡVTV'sDU޽{/zwu, ߓR;0󫫫}R^_j듮y7ŀQ,@J)ADȲ B|ᇇOwc7Μ9AZϟ?"xǾ5::zh?mǁ뺰@J u!˯Ʌ=zo;O+$I"y:Z#I 9BD4;;kڼ>YRJ>/>syqy4M!yEZy"Z{.MOO;JBqm $Ɍ1p]QRʞi uysK71;_:5(* $鉮 3c@068KD7ƼVVaRXxB"ݳ,ݪ89ݯ^z|yyQD{u"2w /x$ƘI|lOda()(Z#MӢUNrv !o߾׮]/m1y": "߶>3U^kxjϞ=yȲ CDp]$38=B!ll6yoq%u?-n_t:Zjuh}||gwR,>)nm'iyZZe)BpOT*$@E_Tw,8Nq"zʕ+/_VڵeY[]ViݕZMiEV[LH" hY!"i uBa8g9r~v0(uQLN]fmk}0w,,a0 [R<= ZkaaoɌ3iͭb7fw4QNanAβ_|gaay̑)+f˲<dfG"m~vij>t:Zk(~Ai8Ng~~χ|E$S, 2#b[,l ??&3c""^^>l6RE {GFƨIDrk R+Jώ|s cjzpV`R @kQsd]_kCt~l3flcЀWVVbmm+zy^lJ+T*{ pNa&(c &a ZGGwdƢ3)GQt+[ZR|*YR8MSaX8[噹_t>VB4,(X%X1,%:s]~6jJ1xҲ.ʌ< ci!2S8MӞᠻ!&ͮR[HtTofGG!D>4k!l+jR68<0(t$Y-ѵ{1f>LD~i,=yWHDzڊ(iQIИ,ːyOty ]ں`Hۢ飶nKKK%Sif( 7ٮ߲g( `)w<ϫڻk\wAz}سau1>>hsv9ED5{ェZqe]nU܋7n) ,\v4؊\kj}hS "jwǕRB v9˭'&UlqKv-I% QV[v(}tkR{1v"ٻ6@xDl&•;f^+ e?n4&Xp0Z}xڵq\uk*s{OD1S}2dGs-ƀ" `Tá pU1M7]|VU6ͰM.0)aUukgƘDQ <{8 ð"\ZB7Ron&ie7Ka&;Ri$?y83dPBBReٷO<ϓ|\ ovxqqq!*4M$I r&w!4M_9~F3dIX 2c*y[Cmh4`*.!.7!(m[RJI)M ʖ[]=\ kvg(K)EcO8ehS)yӏ.y76~u߉ߌ9xK= kPkٵUe"NFQ#PܪUuqq @=B"!VxƘzYlt^pqmmՓ'Ou<|| +++= v5 ix<Zo?|ꩧ4/7nL5GgG?Z\\NnIENDB`atari800-5.0.0/src/android/res/drawable-ldpi/000077500000000000000000000000001425067567700205765ustar00rootroot00000000000000atari800-5.0.0/src/android/res/drawable-ldpi/icon.png000066400000000000000000000025271425067567700222420ustar00rootroot00000000000000PNG  IHDR;0sRGBbKGD pHYs B(xtIME  ;IDATHǵVoTUν931:qH%SAڈA$ $?BŽ paB FFM`%TS]E 1Q1Bc)UIv~{qu:J7y/s{ 1.](1fӧOXϿ`Y #r[\.L&_KŇa6x<^￲iӦN)e}0PΝvhhh|߇yR6癙jzTWW'OXxmcaA,;}[CDfTcV!` χepP($*JԩSwz@/^l3C)fnиLT;˗'< R0͛7_ 0f @)5b? #Ac =EDR6>SJB6 sðRʽvAfU\]g[ٺDD9 `Z;DngZھ*[J<殻mn-뵀{tҝU*2;w 7[Zk1v$-+ek+DQhվ?{lk_CRD4!صkWчa!sA|R0LbXRj fY'Y.MLD0a03LӜ^fCx9w=}EXKңZ]xڳgϥ 'N$Ys]wѣGOS H$f]]]B%===ow`Lwtt.x"L&` "hKً/ןqF!|auGD "5hA)'Z?_ݽ{6bTcZR ր`wff_k= +RԺ͛7>, J)]_mq9ךK1iӦ󝝝pγ՜rxyDTJ_H$Bu)e)ϳbch8N`Us6SAR h{MJ9v b8 J):~N[ccc Κw]8777 eB1`\.[sl6H$ZÇN&o?jėnvww.'ֺ]y s`hެK)nkkr0ye XQ(vQt.[9)僆52D\ /ffĠR 8ghvc0R{A"ldėqkW^ pXʒ%Y9A,618R}XTz J͆Y6`]k :bQNZ}sٸqEm-/nL y򴔲1!`ʕ+###bn3fY\T;oWJ*')DZXlXk^J9 ÐLHko!󼃌18TR*Z}rc-cl kQ-S Mڀ 02UnSB"[jՇ9ZXk%|A66J=Ԇ )x3 nJ7LْbK Ck F1y* fQJy%a)Kna1fb.ベL16U{aˋ""fYLځ]@"]zM4h4kD"PYrZd7aD3338 X^&NG1sԒP;dZs_T9箮xRMH]kVaCDDT7,M\x< }Z^ [Pd8LXm ˊ~snֺ6 سl[j)ԭn{IqRJ(v}I8{,T*/ٴYZ'M Wzs<3gμzƔwxr{v 빫s|yމ-[|iimN_e-[:IENDB`atari800-5.0.0/src/android/res/drawable/000077500000000000000000000000001425067567700176505ustar00rootroot00000000000000atari800-5.0.0/src/android/res/drawable/actionbar_bg.xml000066400000000000000000000002671425067567700230110ustar00rootroot00000000000000 atari800-5.0.0/src/android/res/drawable/folder.png000066400000000000000000000056701425067567700216410ustar00rootroot00000000000000PNG  IHDR@;ˌsRGBbKGD pHYsodtIME (+kq 8IDATh[]]u֚>?4aa+#6(ZVJԗVs@}i!>P%y "@ M1:Ɨk_soZ}8 F{IϞYgfRUĸ&7 Mnp#2z_{d@^9GzcWN:{TL$]' N<ɶF.~GOw>Z,OMcqddp)w}0 6`^0>VZy`3]-@[V_ED+k-d Tʅŝw޹RqyLMMW'N[nA\CAD,?ʐ"=\֫^cddO<?⡇˗/qj5W^C ;@3o sqCjcVנ 4,DS&_D; HK7%3!` MY1հ e׷<ٮHT0I۲QN2XY eSe8LsN ӱl| ؁l٠@>X4dH=>XRm)aZ/}w 6KŇٜ0Dv< cF+uu"QGL8`tƁXt YNzNtA7X T/AޞEZp;4ڐ@TT>v'Lr5]K=w766O\ƠjGHh,3̸kO~RB =ȭ0D)Ƃg0==L0@%r(e 8"P9JsU%&42 (%k JZHZ[஻7RP݀kU@I X $(#e 29Di/XB~@΃R ryr ) +P2C_$%irjp7w3% J*|\%B*"ΫoV2-Rܮȑn-eƣ1[\m6m.s^ /&&jli="^J\o\,)wA#%tmc3@ {%M N&l d ܹsV`6=#fNՊhHeBB eX wnQJ>jvtm\>oIalX)\ȈN]xo.[hX鋍fv;KV'qцiil7W Q D{(Dd!"H J$Bd `Hp5e(G&̰$K Yl[ԺPe]`Q˿߿vZo劶gxr<ʐhUD!LؽT*/*F)N7 P{nGWAC*"PUUU"FՐrAU-%"0CHXe"Ld%if$qY!BH8OͥN8C8:I9{in8|06Iy/C#u]n;hZxttcBcLcV彏瞼B@1DDEbJDF(ktD$1 "f \S9&e u Z*eTRΑF;zs=j[ ׿&BVC&ykGB@Ac/qPȲLKynkUaD`BZ$I9 c H(b߾}HO=^xy@=s ykޓ=imZ9,/}zYӶl"I GLs>,BK iiفɜ>/dl ,ɩ9$2HUeFC!_e2$݋F,\>Iikɯv)"nd5e擠3~v0E+J9i\J#s ?. {7Oj+^Yk`l[U&2R0/Sf1c-Fi#澗=BΘUα|@3 ]u>Zf/ bP^09^$_(XvHuH L^ĠTgg?{;raݕGZ-/ܔQ}oTY60D6`\DBzTNq鈳ȍ @#y=9n(X1'[ k"(csu7T4YEP}iՕ.1+d4Jm_߲>U ʅkhɫ9Op߮~=E?-r9",[@R#ׁ7k-y]ٷqK @1XrIENDB`atari800-5.0.0/src/android/res/drawable/ic_menu_close_clear_cancel.png000066400000000000000000000122721425067567700256410ustar00rootroot00000000000000PNG  IHDR00W pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATxZhg~z1C#H*[H[ -ZYNu]qBW4)7е D69,&P ݡ{f4|3X^ayK ^]ZN )`Q7}# ^X !_pC,W_~vP3/_6f(|*37ڶ)>YYԭI'eeh"&U!y/:izOYcchKOƏ_4AD\I!0 es6c@d.9q c9rƫKe6Y @JVT _?saiJjA@x>s:FsE P}BP6̃F^jčw2C@pH}/.qJ!}l`@ңFH8B fžcG_=+?;  Y:QzthL07Igf%5ތՋu؝9K;ömrg|*ie+К2Q†a`hhXȤ3ӒC^z{LMOF9۶ u'W kB 畞.V c))t:2IGnJ-6_VںP(v@Jj`H֞tInX +z  0S(-B_@RnN>,!dUQug褃t8eTbdU+i0Zu]uFύ:=:>^Dt{Cr/t _T 9(~>0 hT2@bljlKҕSf$S7xg}ɚGO ,df/MD0ԥ]L"cB/m˶!/\촚a0 M~&|ЌdJ aً ໖[&~$U_+y5T Lv{6Jlk}OD0M˄FR G5B#Tl2? 1מaW >cM9z1^|yvkv?UIHȑF0 "V[/*|_}>~r PG )J9^Z]D斃\ U'|$?\6YsM,7xq$;g5bYw8`arEp6/L/iX36VKb!w&__e*ZMX7d(j.`prfDM{"\aGcV҉? "!cdpvKfPGѳ'(jL-x2-Qrr5\.AG NVprp& &ʙ$澞{LIkѬf!;eҙx8 Wj%|v\7 c"gs2 ; C&j %l`fK UzsY}Đ}l3!t]XlWgĂKA:wHwgss]z^570tr٭O[oOUͦL6ӕkH_{URӕe3n5wgՄ:)P-@H:@ߙl%TS\{c)ɵ>HTSjo=C{w(S5"w2X>,k~ys%\\{ֆJ[zlbe뀽%*US@*ȁgܵ-ۥ>\!n-86|g5(4n-/9suhpIV>g5C @:c2Z\q;x}{ oB":ЌI˲zruH݂E+31T4IAK꤮: ?x8=2>3U"07g[?GLuwI5_7ɿ\kIENDB`atari800-5.0.0/src/android/res/drawable/ic_menu_preferences.png000066400000000000000000000041401425067567700243550ustar00rootroot00000000000000PNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe<IDATxY[hTG&kLvA0kPh*^PZiZ UbH))C/A0 VR5!D=[8N7{7pΙ1?_(Q`YЬIB ox{5mw=eKC`_lV9& CA]PҐs[%iPѲѲ|W?|0 yرc[nzk參]PP!a_~}ѣGO7rY֭P]]]#aKRxǍ7&`->C VUKB&M"B;o^ݽDc>&ɓ'{֬Yݻ?:u "eԈaf7N\.!l6y'Xlp8Ę1chAǁ*~Ң"!jsĉӧOK6۷+DH=qD]\\,n7pq Ln,aZGp:#ðr1 عsھ7=hNN6A(SH6>S BF޼y3fsJ2#\KO> F* y޽6N:pqE^'0b_OOy knn1d@pպohU*k```TtT,2MNOiʔ)@ULZxqbw=ydAL6!Ƈ =x@\|كu VpEϣG99H'c'gǎ'hcuyϟQǏ"ϴ<@ϟ?ڵkT;yD6ja1_k7FLrB^]piVI f:+5JA )Þ)x EѧhYPL](W S }gjKFs }#J -[Tb73g7p9:y9DxիW3 50 'g@K:iRJKKMg5c#)C_/[V AYcZ@RKN(Ɣօc۰aCXU^^~}|UY@ HTB#!JM@ BRs6 zX%KO E}") ڠb߿Bf!ꒂUѢi$ ' w 쯦c%ᰀNYQb jBdw6CF iAD\nfTwrD 8ũSAv$Kk"֭Swtx^ ]vgȊ\dKK˗ׯ_Nx;<̑Gh=/ZV___hBIU$fW@ŷnr&Ep+?ݎD76YT4ϊuU?[OKMM?`穫+o`|~* yeltTw)#B+Y҉e&*tc7>Y ٞ7 I} F@!f YHrAy F @dB,<1*ȴN7wskhhPF7x]/QnSqwgP<`q#fk7bO0a4o,h?X%K.<={Ǒq'HÇw}>}v,n 'uv)!W\5\СC]ܹsc˭dx)^և*weK) NIENDB`atari800-5.0.0/src/android/res/drawable/ic_menu_rotate.png000066400000000000000000000046551425067567700233650ustar00rootroot00000000000000PNG  IHDR00WtEXtSoftwareAdobe ImageReadyqe< OIDATxZ_l[W?vn4IvSÆpJxЌ=#HKؤ&[U5MP* @۠+" )tvRGW"`M G\ 4wa4?L$f pJeYL"II`0<ȶ{#2!{HyZ(DGx<>(.֥?tMes15=%L>oH&Aԛ90wo&RaЎ7ys%p3x$D)s8jţ1KD 9Ip8;LIz.EFiŹ4KP=Jgҽ0|rQ[$dmJM? m~i5gAd|d Nu]CY1y$$W$n%!u婆*iyE̾yLV]h.,2Yҿe<#9 ̤跁@@$ceqܵQb#E~f>[wiYH糈 Vbc=i=ݙt.(v/z=_''[;{-f:tzW2 q8HrU>P+ҷ wf=d J>zN/ʘd/TZո̘Q֡@͛Դ~<Ե2-NTD-㲷V=JDXN/hj5]:㟅dk~JD U@9l6W++*b)S\yL&mW4򱰔yt)s+l'tE77M#|ID5.CΖ3՟̉˱Orf\y|YF4^́|:>/ )M^-L‚"CVؙom]R ڲeBEøvݷ/<ϴՏ|=(5WA@V2R^+[ tc"*Ү <áX|SgNw pcB.uj{c/14*#厃gh*͒V<)Zc(Nh OskYZ %@7F<߹lx]G ,0PB:ndԺ:!@<\4I~o ?.o\b d.Z :5yhUhv9LΩ (V6n8a0ZV&B׳UvHۣύz{b臺hwtBwd//$ f D"}#++ mB&ə$Ո,p_S"썎샕ro,ߕ+k;r5j>.= IM"}~Rkڝ>uT85DPaeMۚ{;( ph~[*@N{dEd2Ьڗ"k+v+jωxBs=9@V *D ˿^dR5O <#s\')ƿ pQ2)qTIENDB`atari800-5.0.0/src/android/res/drawable/ic_menu_search.png000066400000000000000000000117031425067567700233240ustar00rootroot00000000000000PNG  IHDR00W pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx_lk:g0bCmu:1V#yTCT*yTH!- *CJJHZ% PZ b^@&ba:scw0wuT;N4Aevvuw9scJW~Kި?c](3#,& @^pkƴ~Wb& X[=^[/v*OD?eYȏygj-F7Wy~<:ML,6m0@)yK0`,әO8(Z_:.흿|!)&40@ A(RyEĐ}~og:fL⏻[;30S)1 ShUR~ѾDU@7 hOaz1p" J)@|`Q;m껻U}g/%yvm~wꮛb""1M`ҟW@JΔYuૃOe27sCFm]ā]Ľ+7Em}O6 ]ڙhܶm| L;:X%6Z:Sh0Tf<'c.2 qxcjeq8#2hnneI DPSi佑 cjVZə@ru>m[T)nŐ&lРϫ q# d2I}o޸VeA`.2I.I235{oB@^VT* =zOX\=ʋZ %"cX6U]恗ܑ;{"bY}ܷڹ75*TRR{7SZL/OYcz痌~2j>v*L0t"՚H_+ XMS7qNo4!0]Ir=OaO-i©^ћ_!/;hQLR{*(~0h}x9mC@"B)(5 9ΓsՈKjvPd_^2YmL}0 J#II >E+`r_pT~';؝,"mцZ:;HR:糜bfv,LvUoEь6W镯+/@dVO" I9wvk Bz-ϲC ?J(`%wqCQ-).=qb'-(:1齵TkCsP n4w{Bw‰]!7 T5lZ\-t>_ {֒uIENDB`atari800-5.0.0/src/android/res/drawable/keyboard.png000066400000000000000000000050201425067567700221530ustar00rootroot00000000000000PNG  IHDR00WsRGBbKGDxxx4З pHYs B(xtIME ++& IDAThYMlff%iR(Rdڊ 2bZQ A$ z([hcOrkM@o8PQP6$Rh˒d-ܟEK,)Jc'=`)μ7r*r*BGB:>p;>?9s}}}_;IM,r߯Eض ys=.] J)!7 [n4MX4+!zGGG |PVh4xgff>0 a;w###`#AUզ'4ickښVT!vo4Te*dY p`tùs@2OmnQs~|>J) "Am{Ba4MЅTXm P\nCu˲Q!|`H$2 6MӹKccc ß4!*e(bFGB(_l!|k672{g=s H`0yX,ˠB$xB(mme! oٶD"crr[mcnnl~a6 ho~VUUE|wF(HM077J]h4ZScMBC7q8bDb2W^@H\v }}}|hh@Er}Ax< "20D"xb>L4~GQ7G%r]^]J%ܼys࣏>aH$$lnN4o]q-ܹs UU!IRӀvpa&jt]2VVVKpBKpdvT1H(rs:,˂ zm[C: KK3B)u,?q7g!9^ϝ(e뱱n㠩mmnX@al9jݡ'}iYlc pcs(pn MZeT:zsBW<}0!8{,zzz`YO]@\~tC!dYVVVF<in4/a6tFxqqat]i-g6VdMr΃1RJI0/0Fc'kvv|fV2*t]o9Bce! ^ʔRI@0 ^oڶi麎JIQ$@HYz!"zaY @@VC^?0+ A3R7^c0`FKڀaci)h n$ atari800-5.0.0/src/android/res/layout/file_selector_footer.xml000066400000000000000000000020461425067567700243250ustar00rootroot00000000000000