pax_global_header00006660000000000000000000000064146107705210014515gustar00rootroot0000000000000052 comment=3d534714e7553383d7156e4a585ae9e50908d158 atari800-5.2.0/000077500000000000000000000000001461077052100130515ustar00rootroot00000000000000atari800-5.2.0/.gitignore000066400000000000000000000010231461077052100150350ustar00rootroot00000000000000*.o *.a /Makefile /Makefile.in /emuos/build /src/Makefile /src/Makefile.in /tools/Makefile /tools/Makefile.in /DOC/Makefile /DOC/Makefile.in /src/atari800 /src/config.h /src/config.h.in /src/android/bin /src/android/gen /src/android/jni/Android.mk /src/android/libs /src/android/obj /src/android/local.properties /src/android/proguard-project.txt src/guess_settings src/libatari800_test /tools/cart /config.log /config.status /configure /compile /missing /depcomp /install-sh autom4te.cache/ /aclocal.m4 .deps .dirstamp stamp-* *~ atari800-5.2.0/.travis.yml000066400000000000000000000006121461077052100151610ustar00rootroot00000000000000matrix: include: - os: linux language: c dist: trusty sudo: required branches: only: - master compiler: - gcc env: global: - MAKEFLAGS="-j 2" before_install: - .travis/install_prerequisities.sh before_script: - . ./.travis/setup_env.sh script: - . ./.travis/build.sh deploy: skip_cleanup: true provider: script script: .travis/deploy.sh atari800-5.2.0/.travis/000077500000000000000000000000001461077052100144375ustar00rootroot00000000000000atari800-5.2.0/.travis/build.sh000077500000000000000000000056211461077052100161010ustar00rootroot00000000000000#!/bin/sh # # actual build script # most of the steps are ported from the atari800.spec file # BUILDROOT="${PWD}/.travis/tmp" OUT="${PWD}/.travis/out" mkdir -p "${BUILDROOT}" mkdir -p "${OUT}" unset CC CXX P=atari800 prefix=/usr bindir=$prefix/bin datadir=$prefix/share icondir=$datadir/icons/hicolor docdir=$datadir/doc/${P} common_opts="--prefix=$prefix" VERSION=`sed -n -e 's/^AC_INIT(Atari800, \([0-9][\.0-9]*\).*$/\1/p' src/configure.ac` isrelease=false ATAG=${VERSION}${archive_tag} tag=`git tag --points-at ${TRAVIS_COMMIT}` case $tag in ATARI800_*) isrelease=true ;; *) ATAG=${VERSION}${archive_tag}-${SHORT_ID} ;; esac NO_CONFIGURE=1 ./autogen.sh targets="sdl" maintarget="sdl" options_sdl="--with-video=sdl --with-sound=sdl" options_ncurses="--with-video=ncurses --with-sound=oss" options_x11="--target=x11 --with-sound=oss" case "$TRAVIS_OS_NAME" in linux) for target in $targets do ./configure $common_opts `eval echo \\\$options_${target}` make mv src/${P} src/${P}-${target} make clean done touch atari800 make DESTDIR="${BUILDROOT}" install || exit 1 for target in $targets do install -m 755 src/${P}-${target} "${BUILDROOT}${bindir}" done pushd "${BUILDROOT}${bindir}" ln -sf ${P}-${maintarget} ${P} popd install debian/changelog "${BUILDROOT}$docdir/changelog.Debian" install DOC/ChangeLog "${BUILDROOT}$docdir/ChangeLog" install DOC/NEWS "${BUILDROOT}$docdir/NEWS" install DOC/CREDITS "${BUILDROOT}$docdir/CREDITS" install DOC/README "${BUILDROOT}$docdir/README" install DOC/USAGE "${BUILDROOT}$docdir/USAGE" install DOC/PORTING "${BUILDROOT}$docdir/PORTING" gzip -9nv "${BUILDROOT}$docdir"/* # These are too small to gzip install DOC/FAQ "${BUILDROOT}$docdir/FAQ" install DOC/BUGS "${BUILDROOT}$docdir/BUGS" install DOC/TODO "${BUILDROOT}$docdir/TODO" install debian/README.Debian "${BUILDROOT}$docdir/README.Debian" install debian/${P}.cfg "${BUILDROOT}$docdir/${P}.cfg" # and don't gzip the copyright statement install debian/copyright "${BUILDROOT}$docdir/copyright" # install and gzip man page install -d "${BUILDROOT}man/man1" install -m 644 src/${P}.man "${BUILDROOT}$datadir/man/man1/${P}.1" gzip -9nv "${BUILDROOT}man/man1"/*.1 # install menu file install -d "${BUILDROOT}$datadir/menu" install -m 644 debian/menu "${BUILDROOT}$datadir/menu/${P}" ARCHIVE="${PROJECT_LOWER}-${ATAG}.tar.xz" ( cd "${BUILDROOT}" tar cvfJ "${OUT}/${ARCHIVE}" . ) ;; osx) DMG="${PROJECT_LOWER}-${VERSION}${archive_tag}.dmg" ARCHIVE="${PROJECT_LOWER}-${ATAG}.dmg" pushd src/macosx xcodebuild -derivedDataPath "$OUT" -project atari800.xcodeproj -configuration Release -scheme Packaging popd mv "$OUT/Build/Products/Release/$DMG" "$OUT/$ARCHIVE" || exit 1 ;; esac export ARCHIVE export isrelease if $isrelease; then make dist for ext in gz bz2 xz lz; do ARCHIVE="${PROJECT_LOWER}-${VERSION}.tar.${ext}" test -f "${ARCHIVE}" && mv "${ARCHIVE}" "$OUT" done fi atari800-5.2.0/.travis/deploy.sh000077500000000000000000000067721461077052100163060ustar00rootroot00000000000000#!/bin/sh # This script deploys the built binaries to bintray: # https://bintray.com/atari800/atari800-files # Bintray needs an api key for access as password. # This must have been set as environment variable BINTRAY_API_KEY # in the settings page of your travis account. # You will find the key in your profile on bintray. if [ -z "$BINTRAY_API_KEY" ] then echo "error: BINTRAY_API_KEY is undefined" >&2 exit 1 fi OUT="${PWD}/.travis/out" # variables RELEASE_DATE=`date -u +%Y-%m-%dT%H:%M:%S` BINTRAY_HOST=https://api.bintray.com BINTRAY_USER="${BINTRAY_USER:-atari800}" BINTRAY_REPO_OWNER="${BINTRAY_REPO_OWNER:-$BINTRAY_USER}" # owner and user not always the same BINTRAY_REPO="${BINTRAY_REPO_OWNER}/${BINTRAY_REPO:-atari800-files}" if [ "${TRAVIS_PULL_REQUEST}" != "false" ] then BINTRAY_DIR=pullrequests BINTRAY_DESC="[${TRAVIS_REPO_SLUG}] Download: https://dl.bintray.com/${BINTRAY_REPO}/${BINTRAY_DIR}/${ARCHIVE}" else BINTRAY_DIR=snapshots BINTRAY_DESC="[${PROJECT}] [${TRAVIS_BRANCH}] Commit: https://github.com/${GITHUB_USER}/${PROJECT}/commit/${TRAVIS_COMMIT}" fi # use the commit id as 'version' for bintray BINTRAY_VERSION=$TRAVIS_COMMIT echo "Deploying $ARCHIVE to ${BINTRAY_HOST}/${BINTRAY_REPO}" echo "See result at ${BINTRAY_HOST}/${BINTRAY_REPO}/${BINTRAY_DIR}#files" # See https://bintray.com/docs/api for a description of the REST API CURL="curl -u ${BINTRAY_USER}:${BINTRAY_API_KEY} -H Accept:application/json -w \n" cd "$OUT" #create version: echo "creating version ${BINTRAY_DIR}/${BINTRAY_VERSION}" $CURL --data '{"name":"'"${BINTRAY_VERSION}"'","released":"'"${RELEASE_DATE}"'","desc":"'"${BINTRAY_DESC}"'","published":true}' --header 'Content-Type: application/json' "${BINTRAY_HOST}/packages/${BINTRAY_REPO}/${BINTRAY_DIR}/versions" echo "" #upload file: echo "upload ${BINTRAY_DIR}/${ARCHIVE}" $CURL --upload "${ARCHIVE}" "${BINTRAY_HOST}/content/${BINTRAY_REPO}/${BINTRAY_DIR}/${BINTRAY_VERSION}/${BINTRAY_DIR}/${ARCHIVE}?publish=1&override=1&explode=0" echo "" # publish the version echo "publish ${BINTRAY_DIR}/${BINTRAY_VERSION}" $CURL --data '' "${BINTRAY_HOST}/content/${BINTRAY_REPO}/${BINTRAY_DIR}/${BINTRAY_VERSION}/publish?publish_wait_for_secs=-1" echo "" if $isrelease; then echo "celebrating new release ${VERSION}" BINTRAY_DIR=releases BINTRAY_VERSION=$VERSION #create version: echo "creating version ${BINTRAY_DIR}/${BINTRAY_VERSION}" $CURL --data '{"name":"'"${BINTRAY_VERSION}"'","released":"'"${RELEASE_DATE}"'","desc":"'"${BINTRAY_DESC}"'","published":true}' --header 'Content-Type: application/json' "${BINTRAY_HOST}/packages/${BINTRAY_REPO}/${BINTRAY_DIR}/versions" echo "" #upload file(s): # we only need to upload the src archive once if test "$TRAVIS_OS_NAME" = linux; then for ext in gz bz2 xz lz; do SRCARCHIVE="${PROJECT_LOWER}-${VERSION}.tar.${ext}" if test -f "${SRCARCHIVE}"; then echo "upload ${BINTRAY_DIR}/${VERSION}/${SRCARCHIVE}" $CURL --upload "${SRCARCHIVE}" "${BINTRAY_HOST}/content/${BINTRAY_REPO}/${BINTRAY_DIR}/${BINTRAY_VERSION}/${VERSION}/${PROJECT_LOWER}-${VERSION}.orig.tar.${ext}?publish=1&override=0&explode=0" echo "" fi done fi echo "upload ${BINTRAY_DIR}/${ARCHIVE}" $CURL --upload "${ARCHIVE}" "${BINTRAY_HOST}/content/${BINTRAY_REPO}/${BINTRAY_DIR}/${BINTRAY_VERSION}/${VERSION}/${ARCHIVE}?publish=1?override=0?explode=0" # publish the version echo "publish ${BINTRAY_DIR}/${BINTRAY_VERSION}" $CURL --data '' "${BINTRAY_HOST}/content/${BINTRAY_REPO}/${BINTRAY_DIR}/${BINTRAY_VERSION}/publish?publish_wait_for_secs=-1" echo "" fi atari800-5.2.0/.travis/install_prerequisities.sh000077500000000000000000000023261461077052100216040ustar00rootroot00000000000000#!/bin/sh echo rvm_autoupdate_flag=0 >> ~/.rvmrc case "$TRAVIS_OS_NAME" in linux) sudo apt-get update sudo apt-get install -y \ curl \ libsdl1.2-dev \ ;; osx) curl --get https://www.libsdl.org/release/SDL-1.2.15.dmg --output SDL.dmg mkdir -p ~/Library/Frameworks mountpoint=~/sdltmp mkdir "$mountpoint" hdiutil attach -mountpoint "$mountpoint" -readonly SDL.dmg cp -R "$mountpoint/SDL.framework" ~/Library/Frameworks hdiutil detach "$mountpoint" rmdir "$mountpoint" rm -rf src/macosx/SDL.Framework rm -rf src/macosx/SDL_image.Framework ln -s ~/Library/Frameworks/SDL.Framework src/Unix/MacOSX/SDL.Framework ln -s ~/Library/Frameworks/SDL_image.Framework src/Unix/MacOSX/SDL_image.Framework # we must install the macports version of the dependencies, # because the brew packages are not universal mkdir src/Unix/MacOSX/external for i in gmp/gmp-6.1.2_0+universal.darwin_16.i386-x86_64.tbz2 \ mpfr/mpfr-3.1.5_0+universal.darwin_16.i386-x86_64.tbz2 \ jpeg/jpeg-9b_0+universal.darwin_16.i386-x86_64.tbz2; do f=`basename $i` curl --get https://packages.macports.org/$i --output $f tar -C src/Unix/MacOSX/external --include="./opt/local" --strip-components=3 -xf $f done ;; *) exit 1 ;; esac atari800-5.2.0/.travis/setup_env.sh000077500000000000000000000012701461077052100170060ustar00rootroot00000000000000#!/bin/sh # Use as: ". setup_env.sh" export GITHUB_USER=$(echo "${TRAVIS_REPO_SLUG}" | cut -d '/' -f 1) export BASE_RAW_URL="https://raw.githubusercontent.com/${GITHUB_USER}" export PROJECT=$(echo "${TRAVIS_REPO_SLUG}" | cut -d '/' -f 2) export SHORT_ID=$(git log -n1 --format="%h") export PROJECT_LOWER=`echo ${PROJECT} | tr '[[:upper:]]' '[[:lower:]]'` CPU=unknown if echo "" | gcc -dM -E - | grep -q __x86_64__; then CPU=x86_64 fi if echo "" | gcc -dM -E - | grep -q __i386__; then CPU=i386 fi if echo "" | gcc -dM -E - | grep -q "__arm.*__"; then CPU=arm fi export CPU case "$TRAVIS_OS_NAME" in linux) archive_tag=-linux ;; osx) archive_tag=-macosx ;; esac export archive_tag atari800-5.2.0/COPYING000066400000000000000000000431331461077052100141100ustar00rootroot00000000000000 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.2.0/DOC/000077500000000000000000000000001461077052100134565ustar00rootroot00000000000000atari800-5.2.0/DOC/.gitattributes000066400000000000000000000000351461077052100163470ustar00rootroot00000000000000INSTALL.falcon text eol=crlf atari800-5.2.0/DOC/BUGS000066400000000000000000000111071461077052100141410ustar00rootroot00000000000000Bugs 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.2.0/DOC/BUILD.PS2000066400000000000000000000006711461077052100146470ustar00rootroot00000000000000To 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.2.0/DOC/BUILD.RPI000066400000000000000000000017701461077052100146760ustar00rootroot00000000000000RASPBERRY PI BUILD ================== See README.RPI for system requirements. With Pi OS Buster and earlier, Atari800 depended upon Pi-specific graphics libraries. This situation changed with the release of Pi OS Bullseye. The Pi-specific libraries were dropped, and a new standard KMS video driver was introduced, allowing a wide range of Raspberry Pi models to run the Debian release of Atari800. Consequently there are no longer special build procedures for the Raspberry Pi, and it can be treated the same as any other Debian based Linux system. To build the atari800 executable, follow the instructions in: DOC/Build.linux. To build a deb package for general release, follow the instructions in: DOC/Build.linux_package. Note that Atari800 v5.0.0 was released with build instructions for Pi OS Buster. This was an error, because Bullseye had already been released at that time. If you wish to build v5.0.0 refer to the files listed above, and not those in the distribution file atari800-5.0.0-src.tgz. atari800-5.2.0/DOC/BUILD.android000066400000000000000000000120301461077052100156530ustar00rootroot00000000000000Build 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.2.0/DOC/BUILD.linux000066400000000000000000000036351461077052100154050ustar00rootroot00000000000000TO COMPILE, BUILD AND INSTALL ATARI800 FROM SOURCE CODE ======================================================= OBTAIN THE SOURCE CODE ====================== If you wish to compile the current development version, clone the atari800/atari800 repository using Github. Or If you wish to compile a specific released version of atari800, obtain the source code from the atari800 Github releases area. Source is available in zipped files with names like atari800-5.0.0-src.tgz (where 5.0.0 denotes the version). Open a terminal on the directory containing your atari800 source files. You need to remain in this directory for all the procedures below to work. CREATE THE CONFIGURE FILE ========================= If your directory already contains a file called 'configure' you can skip this. This will be the case if you are compiling a released version of atari800. If you don't have a configure file, generate it as follows. Make sure you have autoconf installed: sudo apt-get install autoconf Create the configure file: ./autogen.sh See DOC/INSTALL for further details. INSTALL SDL DEVELOPMENT FILES ============================= Ensure the SDL development files are installed: sudo apt-get install libsdl1.2-dev COMPILE ======= Configure and make: ./configure make Make generates the executable file src/atari800. You can run atari800 by on it, or by changing to the src directory and using the command: ./atari800 If you are happy to run the emulator this way, you don't need to need to install as described below. INSTALL ======= To install atari800: sudo make install You can then run the emulator with the following command, regardless of which directory you are in: atari800 UNINSTALL ========= The package manager knows nothing about this installation, so it can't be uninstalled in the usual manner. Use the following command instead: sudo make uninstall atari800-5.2.0/DOC/BUILD.linux_package000066400000000000000000000134341461077052100170560ustar00rootroot00000000000000HOW 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', where 4.2.0 denotes the version. 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 it on the target machine. Follow the instructions in the following file: DOC/BUILD.linux Confirm that the compilation completes without error. Warnings can usually be ignored. 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 CONFIGURATION OPTIONS IN THE DEBIAN RULES FILE ===================================================== 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 choose your options 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. 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.2.0/DOC/BUILD.windows000066400000000000000000000155131461077052100157360ustar00rootroot00000000000000Building 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.2.0/DOC/CHANGES.OLD000066400000000000000000002527661461077052100151100ustar00rootroot00000000000000/***********************************************************************\ |* 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.2.0/DOC/CHANGES.dc000066400000000000000000000141251461077052100150410ustar00rootroot0000000000000027-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.2.0/DOC/CREDITS000066400000000000000000000364031461077052100145040ustar00rootroot00000000000000Current 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 - Ram-Cart 64K/128K/1M/2M/4M/8M/16M/32M and Double Ram-Cart 2x128K/256K cartridges support - SiDiCar 32K cartridge support 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 Martin von Gagern - allow SDL joysticks to come after keyboard-emulated joysticks atari800-5.2.0/DOC/ChangeLog000066400000000000000000006451411461077052100152430ustar00rootroot00000000000000*** 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.2.0/DOC/FAQ000066400000000000000000000040751461077052100140160ustar00rootroot00000000000000Frequently 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.2.0/DOC/HOWTO-DIRTYRECT000066400000000000000000000126021461077052100156510ustar00rootroot00000000000000USING 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.2.0/DOC/HOWTO-DIRTYSPAN000066400000000000000000000077521461077052100156670ustar00rootroot00000000000000DIRTY 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.2.0/DOC/INSTALL000066400000000000000000000231511461077052100145110ustar00rootroot00000000000000Installation 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.2.0/DOC/INSTALL.dos000066400000000000000000000021241461077052100152720ustar00rootroot00000000000000Installation 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.2.0/DOC/INSTALL.falcon000066400000000000000000000110651461077052100157530ustar00rootroot00000000000000 Oct 2022 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-pokeyrec --disable-videorecording \ --disable-screenshots --disable-audiorecording --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=$(m68k-atari-mint-gcc -print-sysroot)/usr/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=$(m68k-atari-mint-gcc -print-sysroot)/usr/bin/m5475 --target=firebee --enable-pagedattrib --enable-cyclesperopcode Then for all versions: m68k-atari-mint-stack --fix=256k atari800 m68k-atari-mint-flags -S atari800 m68k-atari-mint-strip -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.2.0/DOC/INSTALL.ps2000066400000000000000000000022131461077052100152100ustar00rootroot00000000000000PS2 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.2.0/DOC/INSTALL.wince000066400000000000000000000162131461077052100156160ustar00rootroot00000000000000 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.2.0/DOC/LPTjoy.txt000066400000000000000000000007641461077052100154070ustar00rootroot00000000000000LPTjoy 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.2.0/DOC/Makefile.am000066400000000000000000000010501461077052100155060ustar00rootroot00000000000000doc_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.2.0/DOC/NEWS000066400000000000000000001430211461077052100141560ustar00rootroot00000000000000Version 5.2.0 (2023/12/29) ========================== New features: ------------- * possibility of renaming the host device "letter" from previously hardcoded H: to any letter but C: (cassette), E:, K: and S: So if you have e.g. a program with hardcoded "D:" (as for diskette) you can now use it on a host device as well by renaming the host device to D: either via the Emulation configuration -> Host device settings menu or using command line option -Hdevicename * little thing but useful (for me at least): tooltip in the settings menu that reminds users there are virtual host devices with automatic ATASCII<->ASCII conversions (mainly end-of-line character). Extremely useful for all text files including ATARI BASIC source code that can be stored using LIST "H6:PROGRAM.LST" and read back using ENTER "H6:PROGRAM.LST" (H6 = H1 with ASCII conversion, etc.). Version 5.1.0 (2023/12/28) - released at SILK ========================== Thanks to all the contributors (see git log for each commit author) New features: ------------- * New command line options: -playbacknoexit = don't exit the emulator after playback finishes -joy-distinct Allows larger number of joysticks by not combining multiple physical devices into a single emulated joystick. For example this allows using keyboard to emulate one or two joysticks, and to use these in conjunction with physical SDL joysticks / controllers in order to play with more people than there are SDL joysticks. The same logic gets applied to LPT joysticks, these come after joysticks from keyboard emulation. Furthermore, the logic also gets applied to put SDL joysticks after LPT joystics even when the command line flag isn't set. Since LPT joysticks take precedence over SDL joysticks on the same emulated device, this takes a device that was completely ignored before and makes it useful now. The assignments are fixed at program start-up, after config file and command line flags have been taken into account. If the UI is used to enable or disable a keyboard-emulated joystick, this can cause an emulated joystick to be controlled by multiple physical devices, or by none. * Swap also SDL joysticks on AltL+J This swaps all physical devices connected to the first two emulated joysticks: the keyboard keys, the SDL devices, and the LPT devices. After the swap the real joystick / hat setting in the UI will appear swapped as well, but the keyboard setting won't (fixes #156). * Show all input events on a single line during recording This way the recording file alternates between two forms of lines: input lines which contain all keyboard and joystick events in one line, and output lines with the screen content digest. By filtering out the former, the latter can be aggregated nicely, e.g. using a command like this: zcat ${file:?} | grep -vE '^[0-9A-F]{8} *$' | uniq -c Consecutive frames of equal input state will be represented as a single row, with a repeat count giving an idea for how long the state was maintained. * RAM cartridges implementation (#184) - Many RAMCART and one SiDiCar cartridges - Support for writeable cartridges - CART monitor command - Make blank cartridge UI option - Reserved CART file ids for additional cartridge types currently unemulated by Atari800, added also the description of the types * added XEX reading in monitor (useful for patches) * Added H: device rename; save it in setup file (#204) Changes: -------- * Altirra OS updated to v3.41 * Altirra BASIC updated to v1.58 * Fix buffer over-read in generate_partial_pmpl_colls (#165) * Atari ST/TT/Falcon optimizations * Fixed keystrokes for inserting/deleting of line/character (#179) * SIO now resets BRKKEY (fixes Arsantica 3 demo) * Fix for issue #199 (BBSB warp doesn't work) * Fixes CTRL and CAPS keys when using SDL12-compat library. * DOC/README.RPI explains clearly support for various RaspberryPis Version 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) - 94: Ram-Cart 64 KB cartridge - 95: Ram-Cart 128 KB cartridge - 96: Double Ram-Cart 2x128/256 KB cartridge - 97: Ram-Cart 1 MB cartridge - 98: Ram-Cart 2 MB cartridge - 99: Ram-Cart 4 MB cartridge - 100: Ram-Cart 8 MB cartridge - 101: Ram-Cart 16 MB cartridge - 102: Ram-Cart 32 MB cartridge - 103: SiDiCar 32 KB cartridge 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.2.0/DOC/PORTING000066400000000000000000000211331461077052100145230ustar00rootroot00000000000000How 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.2.0/DOC/PortMaintainers000066400000000000000000000024551461077052100165260ustar00rootroot00000000000000Who 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.2.0/DOC/README000066400000000000000000000132561461077052100143450ustar00rootroot00000000000000 Free and portable Atari 800 Emulator for everybody, Version 5.2.0 ----------------------------------------------------------------- Copyright (C) 1995 David Firth. E-Mail: david@signus.demon.co.uk Copyright (C) 1998-2023 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 86 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.2.0/DOC/README.RPI000066400000000000000000000047071461077052100147770ustar00rootroot00000000000000SYSTEM SPECIFICATION ==================== Atari800 is available for both 32-bit (armhf) and 64-bit (arm64) architectures. It will run on the following systems: Pi 2 running Pi OS Full 32-bit Bookworm (armhf). Pi Zero 2 W, 3, 4, 400 and 5, running Pi OS Full 64-bit Bookworm (arm64). It is also possible to downgrade to Pi OS 32-bit and run the the armhf version of atari800 on these machines, but this is not recommended. The Pi 1 and and the single core Zero are not supported. They can run atari800 in tiny windows, but nothing approaching full screen. Larger images overload their processors, producing choppy sound and video. Pi OS Lite is not supported. Atari800 may run OK with Pi OS Lite on certain machine/monitor combinations, but in general it cannot support proper fullscreen images running at full speed. At the time of writing (December 2023) it is not known whether this is a temporary situaton that will be corrected by further development, or if new software such as the KMS video driver that atari800 depends upon to run at full speed has been deliberately omitted from the Lite version. PERFORMANCE LIMITATIONS ======================= The atari800 menu allows you to select the fullscreen resolution using , ,