Titan - Sega Saturn Emulator
=============================
Project Started by UCantWin

Intro
-----
Project Titan is an emulator that I started a month or two ago because I always wanted to code an emulator, but had never done it before. I used to work on a PSX emulator, but with so many newer, more advanced PSX emulators out there, I wanted to do something different. So I chose the Sega Saturn (next best thing, right?). So I got to work, using some code fragments from my old PSX project and rewriting most of the code from scratch (and getting a crash course in the inner workings of the Saturn). So I whipped up a buggy interpreter and the humble beginnings of a primitive dynarec engine (first time for everything :) and now the program is starting to come together in terms of functionality.

Project
-------
I'm at the point in project Titan where my limited experiance with the Saturn and with programming an emulator in general becomes a hinderance. It's not that I couldn't do it with enough time and effort, but it would be nice to have outside input and help. Therefore, I've decided to make the project public in hopes that with the help of others, this emulator will eventually be able to do something down the line. This emulator is not a conventional Saturn emulator however. I tried to design it to be portable (although it is currently coded for Win32) as well as modular (dll plugins for Win32, .so libraries for Linux, etc) Also, I was scanning through some documentation and realized that it is possible to use HLE for the Saturn as well -- the only question being, is it useful or practical to do. 

So here's the deal: I try to work on this bad boy a little bit every day, but as of late, work has slowed down a bit. I'll try to post the updated code as often as possible from now on. If your interested, drop me a line and we can talk. Let me give a tentative status for the project.

Progress
--------
VDP	- 5% (working on actual code before separation into a plugin module)
SMPC	- 35% (several SMPC commands still unhandled)
SH2	- 90% (interpreter mostly done -- squashing bugs as I trace into the BIOS)
DynaRec	- 10% (rethinking "ReBECa" design -- need to backstep a bit)
Mem	- 92% (may need to make minor corrections/additions)
SCU	- 10% (rewritten interrupts and DMA -- still untested)
CD      - 5% (started basic CD implementation -- enough to appease the BIOS for now)
PAD     - 5% (have some SMPC stuff, but doesn't read any input)
Sound   - 5% (no DSP, 68k integration in progress)

History
-------
0.01    Build "2000X"
        * Memory Access for Sound and SCU Fixed (forgot to byteswap)
        * Upgraded to Genital68k 0.12 and added more 68k integration 
        * SH2 Opcode Fix: CMP/HS, CMP/HI, MOV.B, MOV.W
        * Added some GNU compatibility fixes and a preliminary Makefile (doesn't work yet)
        * Added some previously unmapped SCU registers
        * Started messing with the VDP2 Color RAM palette
        * Corrected Win32 Acceleration Table -- ESC now halts emulation

        Build 20001208
        * Added some VDP and CDROM code snippets
        * Rewrote SCU/DMA/Interrupt Handling -- more likely to partially work now :)
        * Added Debug Handling -- Console output now implemented
        * Now using Genital68K instead of Starscream

        Build 20001201
        * Reverted to Older VDP Memory Model
        * Cleaned up some existing DirectX VDP init code
	* SH2 Interpreter Fixes
            - Fixed ROTL and ROTR (I broke them in the last build)
            - Fixed Opcode Identification (also broken in the last build)
            - Opcode Bugfixes: EXTS.B, EXTS.W, STS.L, MAC.W, MOV.W
            - Completed Remaining Opcodes DIV1 and MAC.L
        * Forgot to free VDP memory in memFree()
        * Started CD Support (Memory Handling)
        * Corrected stupid error in memGetWord()

        Build 20001124 (Happy Thanksgiving!)
        * Used anarko's code to fix SMPC with minor modifications
          (Major props to anarko for letting me use his code!)
        * Replaced itoa() with string array in Settings.cpp
           GNU compiler should have no problems compiling it now
        * Started some DirectX init code for the VDP
        * Added Win32 Console for future debugger (disabled by default)
        * Added DMULTS and DMULTU opcodes to Interpreter
        * Opcode Bugfixes: ROTL, ROTR, ROTCL, ROTCR
        * Did some plugin stuff... moving clser to VDP functionality

        Build 20001117
        * Modified the SMPC code -- still needs alot of work
	* Corrected JSR Opcode (Again)
	* Started Journal.txt for programming notes
	* Tweaked Win32 interface a little
	* Added some Compatibility fixes for the GNU compiler
	  (Thanks to Anoakie Turner for the tips)

        Build 20001110
        * Added "Special" memory region... no more pesky invalid memory messages
          Now I just need to figure out what it actually is for
        * Began basic VDP plugin functions (client side)
        * Major SH2 Bugfix -- all 0xCXXX opcodes are now properly identified
        * Opcode Bugfixes: SWAP, JSR, BRA, TST.B, MOV (multiple)
        * x86 Dynarec Block "Prologue/Epilog" Code in place (no more blue screens!)
            - Now I can (finally) start filling in the meat of the code once the
              Interpreter core is debugged

        Build 20001103
        * Compiles with Starscream -- integration needed (posted along with source)
        * Barely started VDP (too lazy to start abstraction layer)
        * Major SH2 Bugfixes: BRA, BRAF, BF, BF/S, STS, LDS, LDC
        * Modified memory functions to include some unused memory regions
        * Enabled hardware polling, but no hardware is emulated :-/

        Build 20001026
        * Finally posted the code on the net!
        * Cleaned up SMPC and added last minute comments for posting
        * Added swapLong() hack (blasted MSVC has issues with the macro)
