(new stuff is at the bottom, above the TODOs)

--------------------
28 Mar 99

A long time ago I implemented the speed improvement in the core I hinted
at in the original release.. it made about a 15% improvement. (Using table
lookup instead of tearing apart the opcode every cycle).

Did some work on cleaning up a little - wrote a simulator for the console
interrupt routine. It's incomplete, but it improved compatibility
remarkably! Between that, and actually loading the right amount of
cartridge data, a lot of stuff that didn't even try before now runs.

It also means I scan for FCTN (ALT) = now. ;) Though other FCTN keys are
NOT implemented. I notice FCTN = crashes sometimes - I think if it's held
down and repeats once or twice. I'll get to checking that.

--------------------
24-25 April 99

Quite a few changes, actually. I made a few minor internal changes to the emulator, then
completely rewrote the VDP core to use a tile-based approach instead of drawing every
single pixel. I was very tired when I did this, and the first attempt, although
boosting the speed of the system 3 times, couldn't handle color. ;) The second attempt
still roughly doubled performance on my system.

Sprites and other graphics modes are still not supported, though the new core makes
supporting text mode awfully easy. ;)

Then I added a flag - the emulator now redraws the screen only if a write to VDP RAM
or a VDP register occurs, otherwise it skips that step, as it takes time. This helped
speed a bit, too.

Finally, I ported the whole mess to Win32, using MS Visual C++ 5.0 and WinAllegro, the
excellent port of the DOS Allegro library. To my surprise, the emulation instructions
per second jumped about 25%! Impressive. :)

I fixed the breakpoint problem in BASIC by telling the CRU to return '1' for everything,
instead of reading what was written (what the heck was I thinking?). The keyboard hack
is still in there, and the console interrupt simulator is still incomplete.

Various tweaks later, and we're at this stage. 

Now, originally it ran in standard VGA 320x200 mode... but my documention says that not
all video drivers under windows support that, so if it can't set that mode, it will try
640x480x256 colors instead. You will need at least 512k video RAM to pull that off. Also,
if it uses this resolution, everything will be squished into a corner of the screen.
Tell me if it matters, and I'll incorporate a scaling routine for you. 320x200x256 works
on my system, so if nobody else cares I don't need to incorporate it. ;)

You will likely need Direct X 5.0.... I don't use anything fancy, but the WinAlleg library
expects that version. The current is 6.1, so if you're older you're getting behind. ;)

I'll see about adding a menu and simplifying the config next time around.

--------------------
30 April 99

Not a release, but quite a few hours poking around the console interrupt simulator.
Added user-defined interrupt support, that worked first try, surprisingly. At least,
I think it did, because several games (like Star Trek) began working after that.

I've sorta been working on it daily, and so didn't mention earlier that the sprites are
implemented with 100% support now, and a few other changes were made to the way the
screen is drawn.. though you won't see it. But it should tie up Windows less (if you
noticed at all.) I'm not sure if I have sprite priorities right, though, even though
when I compare my Emulators priorities to V9T9s in XB it looks the same. ;) Also, I
don't have any support for the 5-sprite-on-a-line flicker, and I doubt I will ever
bother doing that, as it's just silly. Sprite coincidences are not checked yet, but
very few games outside of XB ever used that feature.

Modified the VDP interrupt timer to count using the GPL status register like the real
thing does. May not really matter, but it doesn't hurt my code any.

Modified the system to check the status register and see whether or not it's allowed
to run the interrupt routine, and also to check if the VDP is actually supposed to
generate an interrupt. If an interrupt is supposed to happen, and the interrupt mask
(LIMI) is set to 0, a flag is set to queue the interrupt to occur as soon as it's
allowed to.

Question! Is this correct behaviour? How would we test it? It seems to work. But is
the interrupt allowed to wait to run, or is it lost?

The standard practice of coding LIMI 2;LIMI 0 in your program seems to suggest that
VDP interrupts CAN wait, otherwise we're not giving it much of a window.

A lot of games are flagged as 'slow' in my database, but that should be fixed now that
the interrupt routine is working correctly.

Also, went through and optimized the multiply instruction and all of the jump
instructions - it made a difference, too! The emulator is regularly hitting over
1,000,000 instructions/second on my PC now. :)

Configuration is still coming.. the TIDATA file is getting awkward. But note it! That
will probably be a fixed format when I do get things rolling.

Big time thanks to Darrin (Docwadd@aol.com) for support and encouragement, without his
effort testing and debugging to date would have been a lot less informative!

Thanks also to Mark Van Coppennolle of the PC99 team for an encouraging email and a hint
about the funky XB things I was seeing. However, I couldn't reply because his reply
address was messed up, and I deleted the original message where he had it typed
correctly in his sig. My oops. ;)

-------------------------------
18 May 99

The much-promised config routine will hafta wait, it's boring. ;)

Sound and CRU keyboard scanning added. Once the keyboard responds correctly I'll likely
release this version. Notes above on the sound support... still have to add the noise
channel (need to hook up the TI and sample the noises ;) ). Volume control is not working
because WinAllegro doesn't support it, but I at least hacked in a way to turn OFF the
channel when it's supposed to be silent.

The games I had flagged before as SLOW *do* have better timing now.

Some things are working, some things are broken.. fixing everything is a bit tricky as
the hardware doesn't all exist yet. ;)

As for the keyboard... it responds as a TI keyboard. So the function keys don't do anything,
and so on. If you want a quote you'll need to press ALT-P (FCTN-P), and so on... the keys
are not fully remapped. This is just a basic addition to get the games playing. ;)

-------------------------------
26 Jun 99

One thing to note on the keyboard, only left shift works, either ALT responds as the TI's
FCTN. I've noticed it doesn't come back from switching out to Windows at all, so don't do it. 
That's something funny in the WinAllegro library. In addition, the author of WinAllegro has 
told me he's discontinued the project, and most of it is incorporated into the main Allegro 
project.. so eventually I'll have to convert it over to THAT!

(From Amiga, to PC DOS with Allegro, to PC Windows with WinAllegro, to PC Windows 
with Allegro... tsk.)

Ok! There were some bugs in a few of the opcodes, I think they're fixed now. I wasn't 
resetting the status flags for some instructions. CRU scanning of keyboard and joysticks 
got a major overhaul... a combination of tweaking the CRU routine and fixing opcode 
bugs has got Alpha Lock emulation working, and joystick nearly working. The joystick,
mapped to the arrow keys and TAB, responds ONLY if you hit diagonals, but it does at 
least respond correctly now. The keyboard seems to work 100% finally.

Except, of course, that it's a TI keyboard. ;) I'll map it to the PC keyboard 
eventually.

Many of the games are working now thanks to CRU scanning, and for the record, XB 
lowercase letters appear now, just as I was told they would. How absolutely bizarre..
does anyone know the piece of code in XB that checks this? I'd love to see that...

Enjoy!

-------------------------------
5 July 99

After an attempted discussion on the TI mailing list, which seems to have been taken as
attempts to bash PC99, the commercial emulator, I've decided to cease major efforts on
this project and do something more enjoyable. ;)

The new purpose of this Emulator is to run the original Super Space Acer, a game I 
created ages ago, so that I can distribute it with the PC version I'm working on. ;) 
Since the code will be horribly hacked apart to make everything work the way I want 
it to, I'm only adding a few more things before releasing this to the world.

Today I added the DSK1 support - program image file loading works sweetly. I also
corrected a bug with the VDP status not setting the VDP interrupt bit, so now C99 
programs load correctly. I also added a very simple tool that will show you a 
disassembly of the current program as it runs... press HOME to turn it on, and END 
to turn it off. It's a low-res font and read-only. Pressing F1 (it may take more 
than a tap!) will stop and single-step the emulator, letting you watch program flow. 
Pressing F2 lets it run full speed again. When single stepping, you will not get 
response from any keys other than F1 or F2.

(It would have been nice, if I had proceeded with this, to kick the screen into 
640x480, and let you watch the TI screen in one corner, see the disassembly in a
second corner, see the registers and a memory dump in the third, and had a little 
control panel/hex editor in the fourth. Wouldn't it? ;) )

TODO before quitting - noise support - though possibly not fully. And Bitmap graphics 
support (if I feel nice, I'll toss in a few other toys before quitting, but those two 
are the main list.)

-------------------------------
6 July 99

The disassembly screen that comes up with HOME now draws the TI display in the top
left corner, a disassembly down the left side, and a register dump under the TI
display. F1 still single-steps, F2 resumes. F3 changes the color of the text, in case
you can't see it. It's not 100%, there are some glitches. But it's shown there is
likely a bug in the way BLWP/RTWP is handled which is crashing some games. Will check
that out.

Also, Bitmap mode is now implemented, I believe correctly, and Text mode is also
implemented. Multicolor mode is ignored as I can't test it anyway.

Finally, the '#' switches in the TIDATA file work (the #FRAMESKIP worked in the last
release, actually).

#FRAMESKIP n		- skip 'n' video redraws before actually redrawing
#KSCAN n			- (new) 0 - disable keyboard 'hack' (more accurate)
						    1 - enable keyboard 'hack' (faster)

-------------------------------
10 July 99

Emulator is now as far as it's going to go..
Noise channel support has been added, and tested as working as listed above.
Upgraded to a newer version of Visual C, and Allegro, so new libraries are
in the zip file. The uploaded source is also the final public version.

I also found a simple workaround for the one directory restriction... you can
in fact pass subdirectories to the TI, and they'll work (if they already
exist).

For example, you can set up your PC directory like this:

\Ami99
\Ami99\DSK1
\Ami99\DSK1\BASIC
\Ami99\DSK1\XB
... etc, and access like so:

OLD DSK1.BASIC\MYGAME
RUN "DSK1.XB\XBGAME"

etc...

(Remember that '\' on a TI is FCTN-Z)

Of course, many programs limit you to 10 characters, but in basic and XB you can enter longer strings.

Which brings me to mention filenames. This DSR uses the PC filesystem with no translation
at all! Use sensible filenames. Since this is a Win32 program, going up to 10 characters
is probably ok. So is using more than 10... you don't have the traditional restrictions.
But I can't say for sure if it'll work or not, test it. Don't go overboard.

And if you use V9T9 files, remember that to Ami99, a file called "MYFILENA.ME" is just
that... on V9T9, you would use "MYFILENAME". On Ami99, use it just like it looks,
"MYFILENA.ME"

Ami99 should be able to load V9T9 files, and TIFILES files. It checks for a 00 or FF as
the first byte, and if it isn't there, assumes a 128 byte header. This may cause grief,
but it worked on all the files I have. ;)

---------------------------------
11 July 99

I know I was done, but I couldn't resist trying to figure out what was crashing things,
and I did.. the interrupt routine left interrupts enabled when calling user interrupt
functions. Once I disabled that, most games started working, including the much loved
Parsec! It's too fast, of course, on my PC.

So, I added a quick speed control to the TIDATA file.. the current setting is close enough
on my machine... but feel free to adjust it as you like. The current method of setting
speed is based on the refresh, so in many instances it won't be rock solid, but it's
enough to slow games down to playable where needed. ;)

Finally, added a #DEBUG flag to TIDATA to start the emu in debug mode.. if you hold F1
while starting it will single-step right away (most of the time)

---------------------------------
17 July 99

Noticed a simple fix to make a small speed improvement, and implemented it, and
added a small hack to make it interrupt closer to 60hz instead of 70hz, so music
will play closer to the right speed. ;)

----------------------------------
6 Oct 99

Implemented speech support. Bits of it were implemented before, but tonight I gave
up on Allegro ever getting streaming right under windows and implemented it with
dynamically created samples. Currently the resident library works correctly, although
it pauses the thread while speaking. The overall effect is the same as the real TI,
as normally programs would just loop and wait for the speech to complete, but it's
important to note that when you send a >50 speak command, the software will think
the synthesizer returned immediately. So this isn't quite right, but it works. ;)

-----------------------------------
17 Oct 99

Actually started like on the 10th or so - removed all Allegro code and ported emu to
DirectX, running it in a resizeable window. Removed the F3 debug color key, as it's
not needed now. All graphics modes now work as well as they did in the old version.
Sound is, however, completely broken, and there is no speech yet either. It's also
SSSSSSLLLLLLLLOOOOOOOOOW. I'll see what I can do in future versions for that, I think
multi-threading will help a lot. Might be time to knuckle down and do some Assembly,
too, but a lot of the slowdown came from making the video routines completely device
independant, so they will work on any depth, by using Windows, of course. There are a
couple of ways I can improve that, I think, perhaps by not using the GDI, but I would
like it to be compatible for all future machines, too.
Anyway, I'll release today, with the new source code, as the source is a lot cleaner. ;)

-------------------------------------
23 Oct 99

A little bit of tuning, and replacement of the timer system has things running a lot
better now - the old method was lucky to get 20-30 ticks per second, this method
gives me (close to) 60 much more reliably. There will eventually be an option to
set it to 50 or 70 eventually. ;) Also implemented the voice channels (no noise or
speech yet, sorry it's taking so long, but time is short ;) ). Very short sounds,
such as the beeps in the Demo cart, may not play right, but everything else works
well. The square wave is now generated and so the tone.wav isn't needed any more.
Sorry if you liked using the SINE or TRIANGLE waves... if someone liked it, speak
up and I'll add an option to generate those. I've reversed the sprite priorities, 
and to my annoyance it made no difference in the Demonstration cart. Will someone
*please* confirm whether sprite priorities are correct or backwards? (ie: do the
sprites overlap in the right order). I don't have a working system to check with.
But you'll find this release runs a lot faster, nearly as fast as the old Allegro
version did. I still have a few things to do, so no source upload.

--------------------------------------
24 Oct 99

Further revisions to the system. Speech is implemented in it's own thread, but it's
not functioning quite right due to problems with the streaming routines, and I'm
not positive the code itself is working quite right. The Video update has also been
moved into it's own thread, and was rewritten to use the blitter more and the GDI
less. It seems a bit faster, but the only thing I can say for sure is that Windows
responds a lot better when it's in bitmap mode.

Re speech, cause it's what everyone wants. It doesn't work well. Not at all. XB
speech is sometimes legible. Games - forget it. They aren't running fast enough
to keep the speech buffer full, it runs out of data, and you get garbled noise
instead of speech. 

For now, though, here's the code. I'm tired and I don't wanna look at this anymore
for a little while.

---------------------------------------
15 Nov 99

In response to comments on the emulation board which pointed out that the last
build of Ami99 was not compatible with Windows 95 (only 98 and newer), I did some work
today. I have replaced the timer system with the Win95 equivalent, and although I
don't have a Win95 system to test on, this should work ok. ;)

Also, I found a bug I'd been seeing on and off for quite a while which was more
common in this build - ALT-Equals completely screwing up the video. It was related
to the single-byte access of the Video chip not being reset (IE: I didn't reset
the video processor, and it got confused as all heck.) I'm quite confident that
bug is fixed now.

Those are the only differences, this is an "emergency" release. ;)

----------------------------------------
16 Nov 99

-Fixed a crash bug - illegal opcodes no longer generate errors on exit as they used to.
-Added some of the menu options - QUIT, actually. ;) 
-Added preliminary AVI support - currently it just saves the AVI as C:\AMI99AVI.AVI. 
There is no sound, nor is there likely to ever be any, I'm afraid. It eats up disk 
rather quickly, too, as it's uncompressed and 16-bit color. I'm not sure at the 
moment how to reduce it or how to compress it, the MSDN docs are vague as best 
(and difficult to search through.) ;) Expect about 70-80mb a minute (!!)
Your desktop must be in 16-bit mode for this to work correctly.
-Added 50/60hz switch.

-----------------------------------------
22 Nov 99

-Found a big bug in the interrupt routine - it was being called far too often. Made a small
change that makes a lot more sense than the original version (flagging the interrupt in the
timer routine), and things are (a) correct, and (b) Much faster! ;) I hoped it might fix some
crash bugs, but no, sorry.
-This version works on Windows 95 now. Grr.

------------------------------------------
1 Dec 99

-Implemented code to compress AVIs

------------------------------------------
6 Dec 99

-Discovered cause of lost frames during AVI recording - contention between the AVI write routine and
the VDP thread for control of the backbuffer. Increased speed of copy loop from the backbuffer, and
the AVI thread releases the backbuffer much sooner, allowing a better chance. The VDP thread does not
explicitly lock the backbuffer, it's locked only during writes and varies by video driver. This is
better... but not perfect.
-Fixed the sprite priorities. The reason it never made any difference before (and hence, my frustration),
is that the sprite loop counted forward through the sprite attribute list, using the loop index only
as a counter. Now the loop index is an index, so when I count backwards it actually GOES backwards.
------------------------------------------
9 Feb 00

Began merge of Roland Meier's Linux-based changes and removed speech support. Will revisit speech
when I get a better idea of how to implement it. There were too many fundamental problems with
the way I did it.
------------------------------------------
11-12 Feb 00

Completed code merge, began work on getting it all working in Win32. Scratchpad RAM moved from
a "real" address of 0x8300 to 0x8000, this affects all the patches which read the CPU[] array
directly. They've all been updated (after ripping my hair out for hours ;) ) 
------------------------------------------
15 Feb 00

Implemented Windows 9938 mouse support. Various other tweaks and tests... passed code to
Roland to check. :)
------------------------------------------
28 Feb 00

Roland has finished his changes, and most stuff works in Win32. A few known issues, RESET acts
funny wen you're in 9938 mode. Colors are probably wrong in Text2, and possibly the other
modes as well. G4-7 are a little slow to draw.

We've included Roland's FR213 Fractal Generator to test things... You can load English texts
by selecting 7 Programkonfiguration, then 9 Load English Text. :) You will need to make the
Window larger in Win32 to see the 80 coloumn text. :)

The Linux port works, too, probably a little better right now as I'm still trying to understand
the 9938 chipset, while Roland knows it well. ;)

Some people were complaining before about Ami99 taking a LONG time to start, and running the disk
frequently. I wonder if it's a difference between the Release and Debug builds, so I've included
both. If you have that problem, try the Ami99Debug.exe instead, and please let me know if it's
better!

Give it a try, though, have fun! :) 

--------------------------------------------
4 Mar 00

Fixed the XB crash problem - it was caused by trying to speed up CPU memory writes and checking
the XB bank switch a bit too late. ;)
---------------------------------------------
25 Mar 01

(Yes more than a year later)
Just a few minor updates from old email - attempting to improve the VDP emulation.

These VC++ settings were found to improve start time of release builds:
Release build optimizations - custom:
-Assume aliasing across function calls
-favour fast code
-frame pointer omission
-full optimization

-Modified VDP draw order slightly, no real changes noted
-Corrected reset VDP access flag on data access - didn't fix anything
-Hide mouse when over the TI Window
-Added real joystick support (arrow keys still work, and override both sticks)
---------------------------------------------
14 Oct 01

Mostly work on the DSR.
-Implemented directory searching on the Windows side. 
-Implemented the file read sector function. Implemented autodetect of file type
on the LOAD command. (V9T9, TIFILES or RAW)

Not released because the video is all messed up
-----------------------------------------------
10-22 November 01 - Alpha 1 Release

QI Alpha Release - system-wide enhancements
-Rewrote video blit-to-screen system
-Added configurable stretch mode
-Re-added DirectX support and implemented several full-screen modes
-Improvements in the 9918 register emulation thanks to Thierry's page
-Fixed sprite wraparound at top of screen
-Implemented Multicolor mode
-Implemented 'illegal' mode
-Implemented Bitmap versions of all modes
-AVI recording is now working flawlessly, thanks to the new buffer code
-AVI recording also works regardless of your desktop display depth
-Removed 9938 and Linux support. (Sorry, folkses, I can't maintain 'em)
-Auditted CPU core for minor speedups
-Auditted flag clearing in CPU core - several fixes
-Improved memory handler
-Major bugfixes involving mapping of scratchpad RAM in speedup routines
-Removed never-to-be-used menu options, added some new ones
-Added ability to 'paste' text to the emulated keyboard
-(internal) Moved scratchpad back to 0x8300 because otherwise it's too confusing ;)
-Bugfix in SAVE PROGRAM opcode on V9T9 style directories
-Implemented proper handling of *real* console interrupt
-Disabled write to GROM (why'd I enable that?)
-Fixed bug autodetecting TIFILES files
-Added switch to disable joysticks (they slow things down if they are missing)
-----------------------------------------------
24 November 01 - Alpha 2 Release
Continuing QI work...
-Fixed bug in the CB instruction (probably all C instructions) that was confusing
the optimizer - Ami99 now seems to work correctly with optimizations on. Pre-emptively
modified the JMP and CRU instructions, which were doing the same silly thing.
-Correctly enumerate and disallow unsupported graphics modes for full screen
-Bugfix in word-sized CRU multi-bit instructions using Indirect Register Autoincrement mode -
always set byte mode off
-Bugfix - failed to set byte mode on or off in single address instructions, XOP, MPY and DIV
(again, may affect instructions using Indirect Register Autoincrement mode) (So it would use
whatever was last used, possibly with incorrect results)
-Minor bugfixes in several opcodes regarding bit setting. This fixed Pole Position and a few
others that had been bothering me!
-Fixed joystick reading. Duh. I strongly dislike the 9901. Was confused about inverted bits,
when they weren't meant to be inverted at all. There are no longer any hack routines involved
in normal execution! 
-Simplified timer handler to reduce dependancy on Windows messaging system
-Implemented precise interrupt timing using performance counters. This will usually cause
CPU usage to sit at 100% but Ami99 will give up it's timeslice regularly so it should not
cause your PC to slow down unreasonably. If it doesn't, tell me and I'll add an option to
disable it (Sleep(), the alternate method now, is not reliable at all)
-Added configuration of Joystick 1 and 2, they may be the keyboard, PC joystick 1 or 2
-Added configuration of volume attenuation and implemented the 9919 default of 2db/step
-----------------------------------------------
10 December 01
Continuing...
-updated Help->About box
-----------------------------------------------
12 December 01
-added Register watch window
-added Debug watch window
-added Disassembly window
-did away with all direct access to CPU[] - now calls the memory functions (VDP is okay)
(except in the loader [deliberate] and in Roland's float speedup calls [tricky], and naturally
in the actual CPU memory access functions. Perhaps a future operator override?)
-Discovered my *$#@**$@%#! PC locks solid if you hit the video card too fast.
-Readded Pause and Single Step (only when throttling is on)
-----------------------------------------------
14 December 01
-Worked on remaining unknown bug that is throwing some programs into hyperspace - determined that
observed bugs in Moon Patrol and Slymoids (illegal opcode, and Idle opcode) are actually in the
games themselves, at least according to both Ami99 and the disassembler code. Two code bases agree.
SXB and Tunnels of Doom still exhibit an illegal opcode condition, but it's caused by something in
the GPL interpreter launching the code into hyperspace, and will take a lot more work to track down
-Added 'Bank' to the watch window - displays the current XB bank switched in
-Modified Watch window to NOT call rcpubyte as this could cause it to trigger the VDP or GROM
memory addresses and cause crashes
-----------------------------------------------
14 December 01
-More work on the CPU bug. Discovered I was not loading all of Tunnels of Doom, and my Super XB
was (probably?) corrupt, as downloading a new copy of that worked. However, some games (Princess
and Frog, Tunnels of Doom) *still* exhibit a few glitches that need to be figured out. I think
they are pretty rare cases, though. :) No more illegal opcodes (unexplained, anyway). 
-----------------------------------------------
28 December 01
-Added 2xSaI rendering code by Derek Liauw Kie Fa (Kreed), and support code from SNES9x. Added new Video
option "Filter" to support this, with the idea of adding other things someday. But.. WOW. :)
-Re-organized source. While it's still quite incestuous, it's getting cleaner
-Modified disassembler to not use romword()
-I now believe the Tunnels of Doom glitches are caused by a bad data file, need to get DSK images
working to verify that
-----------------------------------------------
29 December 01 - Released Alpha3
-Completed integration of the 2xSaI code into the menu and permit dynamic changing. Added code to
allow it to work regardless of the stretch mode (including 'none'). Will release this code soon cause
it's pretty. ;) Kreed's email link is bad, though, so I'll just hope the comments on his web page
about using it in emulators is cool ;)
-Broke sound at some point - anything less than maximum volume is silent
-And a lucky break it was - was caused by initializing one more voice channel than actually existed.
Fixing this should break some "odd" behaviour glitches :) That's been in there ever since breaking
out the noises into their own channels. 
-----------------------------------------------
10-13 January 02 - Released Alpha 3.1 (bugfix)
-Fixed lockup bug with CPU Throttling enabled
-Renamed emulator to Classic99 to deal with the realization that it's not for the Amiga after all!
 Silly me, all this time and I never noticed! (Okay, I knew, but many people ass-u-me.) ;)
-Added borders to fix 2xSaI and DirectX render glitches (and to have a border for border color)
-Added non-DirectX version - I expect it to be slow, mind you! And it has no sound.
-Fixed bug that was preventing display in Windows 98 - bad parameter to the blit function!
-----------------------------------------------
20 Jan 02
-Added DirectDraw clipper so that Ami99 won't draw on top of everything else!! ;)
-*Finally* fixed the 'can't find specified memory file' to tell you WHICH ONE!! ;)
-Verified that DirectX code is DX7 compliant.
-----------------------------------------------
21 Jun 02
-Added support for loading variable and fixed record files, and saving fixed type. All preliminary
and not 100%, but it lets you read some XB programs and some data files. Fixed a few more minor CPU
bugs by writing a CPU test program that does at least one test on every CPU instruction (excluding
CRU) and comparing to a real TI.
-----------------------------------------------
10 July 02
-Added Sprite collision detection. Updated compatibility in TIDATA file :)
-----------------------------------------------
28 July 02
-Improved XB loading - seems to work now
-Started work on speech, but it doesn't work at all ;)
-----------------------------------------------
28 September 02
-Big overhaul in the disk emulation system:
--No longer prefers RAW files - TIFILES or V9T9 only (TIFILES preferred) Raw files are NOT recommended.
--Loads, saves, reads and writes pretty much all file/record types
--Returns correct error codes on disk issues
-Having problems with ARC303 and writing compressed files - uncompressed works, decompression works. (CPU?)
-Added emulation of the IDLE instruction, improved RSET. Note that neither are meant to be used on the 994A
-Added range testing to XOP (0-F)
-Minor cleanup of Program and Workspace pointers
-Implemented 9901 Timer (Very much imperfect, probably very wrong. But Frogger tries to do things now, at least)
-Implemented 9901 VDP and Timer interrupt control
-Do not set the interrupt mask when calling an interrupt (except in console simulator)
-Updated color palette (hey, I've used the old one since '92!! ;) ). Now uses Raphael's version.
-Improved VDP 9918A memory access (Popeye works now! Diagnostics checkboard test passes!)
-----------------------------------------------
24 November 02
-Bugfix only - Removed Windows NT specific code so it will run on Windows 98 again
-----------------------------------------------
22 May 04
-Added a number of ROMs as built-in resources
-Updated menu for ROM/system selection
-Added more reasonable defaults for today's machines
-Removed TIDATA file
-Added 'magic' disk ability so things like Editor/Assembler can have their support files available
-Default to filtered screen, DirectX mode
-----------------------------------------------
24 May 04
-Had to change the included ROM list to remove a few that were not actually TI's copyright (I added
 more to make up for it ;) )
-----------------------------------------------
25 July 04
-Bugfix in STCR - wasn't setting parity correctly on byte transfers
-Reworked the interrupt code to improve triggering, and not trigger when the last wasn't cleared
-Fixed sprite early clock - was reading the wrong bit
-P-Code card is implemented (but doesn't work yet)
-Added Tunnels of Doom with 'Pennies', 'Penny' (same quest?), and 'Quest' quests 
 (previous issues were a bad dump of the Pennies quest)
-Verified CPU core is at least as good as TI/SIM's, by plugging his in temporarily. Not sure the
 cause of the problems I still see -- bad dumps?
-Added 'Known issues with current cartridge' under About
-----------------------------------------------
14 Aug 04
-Rebuilt files after a report that Tunnels of Doom wasn't working (turns out my copy was loading 
the files from disk instead of the built-in files, and the built-in files were corrupt.)
-----------------------------------------------
4 July 05
-Minor fix-ups, release of little tweaks made over the last year to disk, video, and sound.
 While none of the new stuff is really ready, have temporarily disabled the 99/4 system due to
 weird behaviour in it. Will do more.
-Removed GDI-only build - no longer supported.
-----------------------------------------------
5 July 05, 7 July 05
-Reworked audio system - now has default square wave, softer sine wave, as well as flute, 
 oboe, organ, piano, sax, strings, trombone and violin samples. Now you can pretend the TI was 
 a cheap synth. ;) (works well on some music, poorly on others).
-Noise should have better pitch now too, found an error in the samples there.
-Added configuration dialog for instruments
-Added option configuration dialog
-Cleaned alt-enter fullscreen code
-Re-enabled 99/4 but it may still be a bit flakey
-Slightly simplified startup procedure
-Configuration settings are now saved! (No config dialog yet - I ran out of time. But 
 everything is in there now, for the first time ever.)
-User cartridges can be loaded (right now they must be manually added to the classic99.ini)
-Added option to slow down keyboard when unthrottled (good for BASIC/XB)
-Small fix to timer code
-Couple of small CRU fixes - ignore cards and repeat lower CRU space properly
-Documentation (LoadingFiles.txt) updated!
-----------------------------------------------
29 Aug 05
-Very minor fix to the disk system to support sequential reads of variable record files.
 This makes Major Tom work. (Though it still shouldn't, it does. ;) )
-Added samples for Classic99.ini cartridges in Mods\Mods.txt
-----------------------------------------------
6 Nov 05
-Re-added speech. It works mostly, although it occasionally falls out of sync and garbles.
 Both Speech ROM and External speech work. Put into a DLL so the GPL code doesn't contaminate
 the TI code. :)
-----------------------------------------------
4 Feb 06
-Added switch to disable speech, if desired
-Added keyboard map image to Help menu
-----------------------------------------------
15 Mar 06
-Added CPU cycle-accurate counting (still throttled only per-frame, but at least 
speed is correct and not guessed at now). Except DIV is a bit fast. Docs are unclear 
on that. Will guess at it later. Interrupt simulator does not have cycle counts, and
probably won't. If you're using that, you're trying to run faster anyway. ;)
-Disk can now read Windows text files as DF80 (to load compressed object files from 
cross-assemblers with Editor/Assembler Load and Run). I'll do the DV80 as normal text later. 
Uncompressed object files will not load until I do that.
-Relax CPU usage when 'Pause Window When Inactive' is set, and the Window is inactive
-Rewrite timer thread to use waitable timers instead of spinning on the Performance 
counters, but did not note an improvement in CPU usage. (Still have to measure and see 
if it's accurate). Tweaked 9901 timers for the new code but did not see if it was better 
since it's still pretty wrong. ;)
-Clear blit event after a blit - this prevents a double blit after a video update.
-Clear user interrupt on File->Reset to work around a console ROM bug
-----------------------------------------------
21 Apr 06
-Implemented the NTSC TV Filter by Shay Green with some real time controls - now
 nicely reproduces the look of the original TI Monitor (and can be tweaked some)
-Implemented the browse button for AVI filename on the options dialog
-----------------------------------------------

-TODO: ship a loaded classic99.ini with all the carts and my compatibility notes,
		but make it only load the cart into the menu if the files exist!
-TODO: Add disk management dialog/menu GUI
-TODO: Add user cartridge manager
-TODO: Rewrite file system to buffer files and include disk image support. (Covers the following)
  -TODO: Files are unfortunately opened/closed many times per access (to be fixed)
  -TODO: STATUS is probably returning the wrong or incomplete information on program files (verify on real TI)
  -TODO: EOF detection is hacky and won't work if reading multiple files at once
  -TODO: add 'update' support to the file system so that the Assembler works
-TODO: Still chasing a problem with ARC303 writing bad compressed files
-TODO: add an About the TI page to the program (a pic and description)
-TODO: make the AVI recording record the correct buffer - be it the base or filtered. (make
       sure to stop recording if filtering is changed mid-stream, due to buffer size change).
-TODO: improve speech timing/coordination
-TODO: Implement proper keyboard emulation
-TODO: Implement simulated timespace for machine so that REAL time is less important (to solve timing issues)
-TODO: Add support for PIO (LPT) and RS232 (COM) access, possibly including low level
-TODO: Fix support for the 9901 timer
-TODO: Fix the P-Code card emulation
