Atari 800 Emulator for Unix et al, Version 0.1 ---------------------------------------------- Copyright (C) 1995 David Firth. E-Mail: david@signus.demon.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This is the first release of my Atari 800 emulator for Unix (consider it an early Alpha). My main objective is to create a portable freely distributable emulator (i.e. with source code available). It can be configured either as text only or using X-Windows. The text only mode 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, VAX/VMS, CBM Amiga (Dice C) and the HP-UX 9000/380. The X-Windows version supports graphics but runs *very* slowly. This appears to be beacuase of the refresh rate that I am achieving through X-Windows. I create a window of 384 pixels by 240 pixels which is enough overscan graphics. I also create an Image of the same size. The Image is built up scanline by scanline by calling the X-Windows PutPixel function. When the Image is complete the X-Windows PutImage function is called to move the Image onto the window. I tried writting directly to the Window but that appeared to be even worse. If anyone has any suggestions as how to improve the refresh rate please forward them to david@signus.demon.co.uk I used to have support for SVGALIB in Linux but removed it when I increased the resolution for overscan modes. Thinking about it, I could have just copied the base 320x192 pixels onto the screen - I'll probably put it back in. --------------------------------------------------------------------------- Why have I written this emulator instead of using PC Xformer? A few years ago (85/86) I wrote a small 'test' compiler for the Atari 800 computer (It was never released commercially but has had a commercial game written in it - Enigmatix released by Page 6). For historical reason I would always like to be able to keep a usable copy of my first compiler. This was not possible using PC Xformer since it only runs on MS-DOS and without access to the source code have no chance of porting it to future computers. This emulator originally had a text only interface which is all I needed, but as so often happens one gets carried away :-) Features -------- 48K/52K Atari 400/800 emulation (optional RAM between 0xc000 and 0xcfff) Slow and Slow modes of operation :-( Should run on any Unix computer running X-Windows. Display List Interrupts. Vertical Blank Interrupts. All Antic Display modes. Player Missile Graphics with collision detection. Character vertical reflect, invert and blank. Files can be stored directly on your host computer via the H: device. (H: replaces the C: device which serves no useful purpose) Reads XFD disk files. PIL modes - allows memory between 0x8000 and 0xbfff to be toggled between RAM and ROM. Bugs / Known Problems --------------------- A lot of colours have the wrong RGB values. Contact me if you know a way of converting the Atari colours into RGB values. I am using a lookup table but a lot are just set to cyan (R=0x00, G=0xff, B=0xff). A few programs cause the emulator to enter its built in debugger. The reason for this is unknown at the moment. Fifth player uses colours from individual missiles and player missile priority is ignored - these should be easy to fix. Future Atari 800 Enhancements ----------------------------- Hardware scrolling - pointless until the screen refresh rate is improved. GTIA graphics support for ANTIC modes. Atari 800XL/XE emulation. Printer support (Print to file + spool on close). Disk swapping Paddle controller using X-Windows mouse position. Specify cartridge to load. Paged memory using PORTB. Sound possibly through /dev/audio (don't hold your breath though) It may be possible to add support for Super Cartridges - The only problems are :- 1. I don't have any. 2. I don't know the how the banks are selected. I assume that it would be by writing to an appropriate bank selection address. If so, it could be easily emulated with additions to the GetByte and PutByte functions.