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

History
-----
Project Titan is an emulator that I started a while 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.

Current Notes
----



Progress
--------
VDP     - 5% (seperated into a plugin -- but still no actual progress)
SMPC    - 40% (several SMPC commands still unhandled)
SH2     - 95% (most of the interpreter bugs are now gone, but a redesign may be coming)
DynaRec	- 80% (opcodes need to be completed, tested, and optimized)
Mem     - 95% (may need to make minor corrections/additions)
SCU     - 10% (rewritten interrupts and DMA are 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 integrated, but only for x86 processors)

History
-------
0.01    Build 20010411
        * Extended Ricepad's x86 memSetByte() code to all the memSet functions, but had to 
          disable it because of some minor issues
        * Added support for more SMPC Commands
        * Fixed compile issue with the debugger -- should compile now
        * Added some goodies to the debugger... now it might actually be somewhat useful
        * Added some fixes for the GCC compiler (still not quite there, but it's progress)
        * Fixed Binary loading feature
        * Added some sh2->x86 code and altered the register caching scheme

        Build 20010223
        * Added BIOS option to ini file to make it easier to switch between multiple BIOSes
        * Fixed some MOV opcodes in the new core
        * Forgot to byteswap values for M68k Processor (doesn't crash on 68k reset anymore)
        * Redesigned Interpreter Core to increase efficiancy
        * Upgraded to Genital68k 0.22
        * Fixed a typo in global.h -- VDP Register changes are now passed to the plugin
        * Added Ricepad's memSetByte() function to i386.c
          (Should be easy enough to adapt to the other memory functions)

        Build 20010128
        * Added byteswapping patch for better x86 performance
        * Began transition from "ReBECa" model to "PATRICk"
          - Rewrote Prolog/Epilog Code
          - Began SH2->x86 translation code (compiles with NASM)
          - Nearly completed caching system for generated blocks
        * Streamlined opcode identification -- will use this for the Patrick core
        * Upgraded to Genital68k 0.21 -- Full code optimization now works
        * Moved VDP and CDROM Win32 code to plugin dlls, and slightly modified API

        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 closer 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)
