This is the source code distribution for Atari800Win, an Atari 8-bit emulator for Win32 systems. The executable is not included in this archive; if you are looking for that instead, head to http://www.cris.com/~Twist/atari800win and download the latest version. No attempt has been made here to support anything but a Visual C++ 6.X environment. There is an exported makefile; but it assumes NMAKE and other Visual C utilities. If folks want to create makefiles for other compile systems, great - please forward them to me for inclusion into the archive. Atari800Win is actually an MFC application. This was done to make various user interface design and implementation faster; the one commodity I do not have to spare is time, and so saving it is important to me. However please note that the requirement to support a large legacy code base written in C precluded Atari800Win ever being remotely object oriented. There is much ugly sharing of variables across modules; from C to C++, etc. This is the reality of having to port something instead of rewrite it; I make no further excuses. It works. Most of the original source code for the Atari800 project is included verbatim. It is located in the "Atari800Src" directory and is regularly updated by a team of programmers who are working on it (including me). The homepage for that effort is http://cas3.zlin.vutbr.cz/~stehlik/a800.htm. In addition the Win_C directory has C modules that have most of the hardware dependent requirements for Windows; graphics, sound, and the like. In most other ports of Atari800 this would be a single file included in the main archive; the Windows version gives a wider variety of options and so it was prudent to break these up into applicable modules. The final section of source is the Win_CPP directory; it contains "classes" (which for already mentioned reasons aren't really objects) required to handle the various user interface work. This source code is very much a work in progress; it changes currently every few weeks or so, either from modifications to the underlying Atari800 layer or changes in the Windows code itself. Also, being a largely personal project, I have not commented very well; I will go back and clear this up as I get time, but for now most comments are pretty sparse. If there are questions that can reasonably be answered (not "how does DirectX work?" for instance - there are books for that :-) ) you can e-mail me and ask why I did this or that using rich@kesmai.com. I get a LOT of e-mail and I have a very full time real job, so please be patient. A few compile-time defines and what they mean: UNALIGNED_LONG_OK - The processor can access memory on non-word aligned boundaries. True for all Intel makes; NOT true for most everything else. POKEY_UPDATE - Regularly update the pokey routines instead of using a DMA interrupt. Set to on because there ARE no interrupts in Win32. USE_PERF_COUNTER - Uses QueryPerformanceCounter() instead of timeGetTime(). Generally faster, but requires a lot more code to watch for rollovers. USE_FLIP_BUFFER - Causes the display routine to double-buffer and pageflip. Currently much slower than the simple blit from system to video ram that is the default. USE_DSOUND - enables DirectSound code. Should work but hasn't been turned on in a while; DirectSound was a wildly inconsistent performer for the user base and didn't always work, whereas the current Multimedia layer sound work fine.