File: CHANGES

package info (click to toggle)
snes9x 1.26-1
  • links: PTS
  • area: non-free
  • in suites: potato
  • size: 2,712 kB
  • ctags: 9,605
  • sloc: cpp: 40,776; asm: 27,081; ansic: 6,572; makefile: 314
file content (1045 lines) | stat: -rw-r--r-- 60,790 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1.26
- Fixed memory leak that crept in when SA-1 support was added when loading a 
  game freeze file.
- Added SPC dumping option based on code from Telekawaru that he sent me ages
  ago but I've just found again while looking for something else!
- Merged in most of the Amiga PPC port source code changes into the main 
  source code tree.
- Keying on a sound channel seems to clear its last-sound-sample-block-just-
  played flag. Chaos Engine/Soldiers of Fortune needs this.
- Add multi-thread support to the UNIX ports for sound playing - required in 
  the Linux port to work around a Sound Blaster Live driver bug and useful if
  you have multiple CPUs in your machine to help spread the emulation workload.
1.25
- Added BS 24Mbit ROM memory map, for Derby Stallion 96 and Sound Novel-TCool.
  No idea if it works. Thanks to Nose0000 for the info and code.
- Corrected unzip code not to loop forever if an encrypted zip file is loaded -
  an error is generated instead.
- Changed relative SPC700 cycle length for Mortal Kombat 3 to fix sample
  repeat problems - I wish I knew exactly how fast the SPC700 is clocked.
  Maybe I should write a test ROM and run it on a real SNES?
1.24
- 3dfx speed hack back again, only disabled when Seiken 3 is loaded.
- Some minor SA-1 speed ups added - the SA-1 instruction skipping code will
  have to wait until I have more time.
1.23
- Corrected a SA-1 reset bug that reset the SA1 RAM bank pointer back to block
  zero but didn't clear the RAM bank register. Was causing Kirby 3 to crash.
- Fixed a wave clipping problem with interpolated sound that was causing noise
  on sound output when certain sound samples were played.
- Fixed a bug in the sync-sound code that could overrun the sound buffer by a
  few bytes causing clicks on the sound output.
- The sound sample repeat bug that has plagued Snes9x ever since is was called
  Snes96 finally bit the dust - Snes9x continued to play sample loops
  even if the game dynamically updated the sample not to loop. Fixes the
  stutter in the Mortal Kombat series and improves the sound from several games
  that download sound samples in real-time as they are played.
- Rewrote the code the handled the SPC700's 64 byte shadow RAM area to fix a
  possible sample corruption problem with ROMs that stored samples that
  cross the 64 byte start area.
- Added code to allow ROMs to change the sample being played the next time the
  channel loops or is keyed on - not sure if it fixes anything but seems more
  correct.
- Added a zero-frequency fix to the stereo sound mixing code that I'd already
  added to the mono code some time ago.
- Changed the code to set the end-of-sample flag just before the last block is
  played, rather than just after. Seems to help improve the sound on some 
  games.
- Sound sample start code now doesn't reset the channel's envelope volume level
  to zero before starting the sample - helps reduce the clicks being heard when
  a channel envelope volume level hadn't reached zero before being keyed on
  again.
- Changed initialisation of sample-end-register to 0 rather than 255 - seems
  more logical now I've thought about it. Not sure if it helps anything.
1.22
- Finally fixed the corrupt copy of Donkey Kong Country not working problem -
  Snes9x thought the ROM used the same memory map as Street Fighter Alpha 2.
- Added explode, unshrink and unreduce decompression modes support to the
  unzip code.
- Fixed offset per tile bug that crept in after me trying to fix the Starfox
  on-tilt bug.
- Made some fixes to the C Super FX emulation code, enough to get most 'FX
  games playable on the Mac port.
1.21
- Finally worked out how character DMA worked on the SA-1 and implemented a
  hacky, slow version, but its enough to get the level up screens displaying
  correctly on Mario RPG.
- Incorporated ZSNES' new optimised Super FX asm code - had to track down and
  fix a nasty memory overwrite bug in the code first to get it to work.
- Changed sample mixing code to not automatically wrap offsets to
  keep inside the sound buffer, external port code is now expected to do that.
  Helped me fix a problem in the Windows port that prevented very large sound
  buffers from working, which are required for some badly written sound card
  drivers.
- Corrected a bug in the SA-1 C code where incorrect processor emulation
  functions where called if the code was compiled with in-lining turned off.
- Fixed crash bug in Super Mario RPG on the level up screen - forgot to mask
  the enable bit from the RAM bank register. Thanks to Christian Wolf for
  sending me a freeze file which made it easy to find the problem.
- Fixed a lockup bug in the window clipping code, if the ROM ever turned off
  the sub-screen completely the clipping code would enter an infinite loop.
  Fixes The Cartoon Addams.
- Made the Daffy Duck NMI fix only enable when Daffy Duck is loaded - fix was
  causing problems for Breath Of Fire 1 and 2.
1.20
- Windows port no longer sets DirectSound to exclusive mode, so its now 
  possible to hear sound output from Windows apps while Snes9x has focus.
- Fixed the freeze file loading and saving on the Windows port.
- More GUI settings are saved in the registry on the Windows port now.
- Added 3D/FX image scaling/filtering support to the Windows port.
- Added the TV mode from the Mac/Linux ports to the Windows port.
- Incorporated Kreed's new output image routines into the Windows port that
  fixes RGB555 display colour problems. Many thanks to Kreed.
- New auto-frame rate timing code on the Windows port, stops the silly speed
  up problems when the old code tried to 'catch up' after the emulator had
  been paused.
- Increased the DirectSound secondary buffer length on the Windows port to
  hopefully fix all the static/broken sound output problems some people were
  experiencing.
- Altered the ZSNES Super FX asm code so the Windows port could use it - all
  previous versions of the Windows port were shipped using the C Super FX
  emulation code which is a lot slower.
- Implemented interpolated and sync-sound options on the Windows port.
- Added an image stretch option to the Windows port - stretches the SNES image
  to fill the whole screen or the Window. Looks really good on my TNT card 
  since that chips seems to filter the image as it scales it.
- Implemented Windowed mode on the Windows port.
- Added special SPC700 cycle timing for Empire Strikes Back.
- Fixed the missing polygon problem for Super FX games - thanks to zsknight
  for the information.
- Implemented SA-1 support required for Mario RPG, Kirby Superstar,
  Paradius 3, etc. but since only a good image of Mario RPG exists, I could
  only test that game.
- Fixed a graphics clip window bug: inverting the area of a clip area that
  only consisted of empty bands should become the full width of the screen;
  Mario Kart's rear-view mirror display needs it.
- Fixed mode 7 render code to use correct z-buffer when rendering onto the
  sub-screen. Fixes Final Fantasy V title screen.
- Added horizontal offset per tile support in the offset per tile modes 2 
  and 6, and switchable horizontal/vertical offset in mode 4. Fixes Chrono 
  Trigger in several places and Mario All Stars title screens.
- Changed SPC700 relative cycle length to 14, needed for Stunt Car Racer.
- Enabled immediate triggering of NMI if NMI enable flag set while scan-line
  was on first line of v-blank. Needed to fix a background jitter bug in
  Daffy Duck: The Marvin Missions.
- Altered ROM load code to ignore corrupt ROM map type byte in ROM header,
  preventing the code erroneously detecting what it thinks are interleaved 
  ROMs. Fixes EEK! The cat, Formation Soccer, the corrupt copy of Donkey 
  Kong Country, ...
- Disabled IRQ re-triggering if V-IRQ registers set to the current line. Fixes
  Chuck Rock.
- Fixed missing sprites in Andre Agassi Tennis - writing to low byte only of
  the sprite write address register seems to also clear the hi-byte.
1.19
- Games written by the Japanese software company Human seem to need special
  SPC700 sound CPU timing, so the ROM load and reset routines now check the
  software author company and adjust the CPU cycle length accordingly.
  It gets Clock Tower, Super Fire Pro-wrestling Premium, etc working.
- Added ROM check sum calculation and testing code - Snes9x can now detect
  pure, corrupt or hacked ROMs.
- Noticed a fast way to implement the SNES 4096 colour mode, so I implemented
  it. Now the colours in ActRaiser 2 look correct.
- Corrected a noise frequency error thanks to information from Takehiro.
- Added a 'start in full screen mode' flag to the Linux port.
- While debugging the new graphics code I thought of a fast way to implement
  the SNES direct colour mode, tried it out and now the colours in Actraiser 2
  are correct.
- Blast, forgot about the colour window and fixed colour effects. The separate
  sub-screen is back again, but all the other graphics speed ups are there.
- Now I've got a z-buffer I keep finding other ways to optimise the SNES
  graphics rendering - no need for a separate sub-screen, no need to clear
  the sub-screen to the fixed colour, no need to waste CPU time on translucency
  effects on hidden pixels, no need to completely clear the main-screen to the
  back drop colour, etc., etc.
- Implemented a software z-buffer and changed the SNES graphics rendering to
  use it (required change for future 3D card support). Finally fixes the
  sprite-to-sprite priority bug that some games suffer from. Also a big speed
  increasing for some games (10 fps+), others are slight losers.
- Added code to skip the rendering of completely transparent graphic tiles
  rather than comparing each pixel to see if it is transparent; helps the
  frame rate a bit on some games.
- Added a fixed for Tetris & Dr. Mario - the game didn't like a multi-player 5 
  adaptor plugged in to the real SNES when being played, so turned off the
  adaptor emulation for this game.
- Added hack for Final Fantasy II - if sync sound isn't on, make attack rate of
  1ms actually 0ms (old v1.16 behaviour). Causes a slight click but its better
  than samples being cut short.
- Fixed a clip window area invert bug if the colour window was enabled on
  on one window and the other window was being used to clip a background layer.
  Fixes the finial (I hope) display problem with Gun Hazard.
- Added code to intersect the clip window areas if both a colour window and
  a background layer clip window were enabled at the same time. Required by
  Gun Hazard.
- Forgot to mark graphic clip windows as needing recomputing when the master
  colour window inside/outside/on/off/main-screen/sub-screen PPU register was
  updated. Was causing display problems for Gun Hazard.
- Internal H-DMA execution accelerator pointer variables where not always
  being recomputed when started H-DMA part way into a frame. Was causing
  display problems for Gun Hazard.
- Made H-DMA continue for one extra scan-line to fix a disappearing monster
  problem in Dragon Quest 5. Thanks to Alex Jackson for the bug report.
- Zoop seems to require volume envelope height reading by the sound CPU to
  always return 0 when the channel is in gain mode.
- The sound code was ignoring updates to the ADSR volume envelope rates while
  one was in progress. Fixed that and now the bird song at the start of
  Chrono Trigger sounds correct.
- Had to disable the CPU shutdown code for loops reading the horizontal beam
  position, it was causing problems for Star Fox. Still no polygons though.
- Oops, sound DSP noise output was broken - accidentally deleted an important
  line while removing debug code ready for the last release.
- Added initial 3Dfx support to the Linux port - basically using the Voodoo
  card as a bi-linear filtering, scaling blitter. Actually slightly slower than
  TV mode, for non-scrolling images due to poor texture upload speeds to the
  card, but the full-screen feature is nice and the speed doesn't drop as more
  of the screen changes.
1.18
- Implemented a sync-sound mode where sound data gets generated in sync with
  SPC700 instructions being executed. Finally the sound Williams Arcade
  classics can be heard. Also helps slight sound timing problems in many other
  games but doesn't fix Mortal Kombat 2 like I thought it would - its 
  sound routine programmers must have been on drugs or something!
- Added interpolated sound - gives low frequency sounds much more bass similar
  to a real SNES especially with the playback rate ramped up to 44KHz.
- Added on-screen messages as various emulation options are toggled on and off
  using the in-game keys.
- Fixed a PPU register read bug with the sprite register write position. Thanks
  to Takehiro TOMINAGA for the bug report.
- Altered the auto-frame skip timing code to only wait and re-sync to the end 
  of frame when frames haven't been skipped. Again thanks to Takehiro.
- Speeded up the colour addition and subtraction code using ideas from
  Takehiro.
1.17
- Linux and UNIX sound code now driven directly from signal timer handler 
  rather than the timer handler just setting a flag which had to be polled in
  the main emulation code. Slightly faster execution.
- Fixed the crash bug in the ZSNES Super FX asm code with Vortex - the game's
  polygons still aren't visible though.
- Implemented bent-line increase and exponential decay and sustain volume
  envelopes - they should match, or at least be very similar to the real SNES
  sound DSP chip now.
- It would seem ROMs can key on sound channels even if the channel hasn't
  been keyed-off, Pac-In-Time requires it. Changed code to allow it.
- Quick mod to ZSNES Super FX code to get Winter Gold working - it was already
  working with the C Super FX code.
- Added emulation of the extra 1/2 scan-line per frame on PAL and NTSC - 
  should help improve music speed emulation.
- Worked around the click sound heard when ROMs use 0 volume envelope attack
  rate.
- Removed the 'check for IRQ already happened' H-IRQ position register setting
  code - it was causing problems for Ninja Warriors and was not required by
  F1 Grand Prix.
- Fixed a bug in the new sound code - the sustain part of the 
  attack-decay-sustain-release volume envelope was being skipped if the 
  sustain level wasn't at 100%. The fix has helped some music notes from 
  being cut off early in a few games.
- Added fix to Pro Action Reply support (again). Thanks to Paul Shoener III for
  the original fix and Gil Pedersen for reminding me to apply it!
- Finally fixed the Tales of Phantasia 'bum note' problem! The ROM set its
  sample directory to the upper-most page and I forget to code for the hidden
  64 bytes of RAM, that appear when the boot ROM is switched off, when fetching
  sample addresses.
- Adjusted the relative cycle length between the 65c816 and the SPC700 slightly
  to get Terranigma working again.
- Oops, the emulated joypads 3 and 4 via the emulated Multi-player 5 interface
  weren't working. Thanks to Steffen Schwenke for the bug report.
- Optimised the echo sound code - by-passed the the FIR filter code if only
  a pass-through FIR filter was defined by the ROM.
- Modified V and H-IRQ register changing code to trigger an IRQ immediately if
  V-IRQ is enabled and the scan-lines match and either H-IRQ is not enabled or
  the electron beam position has already gone past the trigger point. Fixes 
  the screen flicker in F1 Grand Prix.
- Modified the priority-per-pixel mode 7 code to use BG#1's clipping data if
  the top bit of the mode 7 pixel is set. Fixes initial track drive-through
  display in F1 Grand Prix.
- Modified the sprite priority levels for the priority-per-pixel mode 7
  display. Now the car can be seen in F1 Grand Prix.
- Wrote a sound DSP register recording scheme which 'plays back' the register
  changes in sync with the sound generation code. I'm bit disappointed, it
  only improves the sound in a very few games... Scrapped the code, it actually
  causes more problems than it fixes. Oh, well, another 3 weeks work wasted...
- Fixed a SPC700 wake up problem for Lufia I - made the SPC700 also wake up
  when the 65c816 read from one of the four comm ports.
- Included lots of sound code speed ups and sound quality improvements
  from Takehiro TOMINAGA - many thanks go to him.
1.16
- Fixed a case where the -forcelorom option didn't work - the case was
  required for Formation Soccer which claims in its ROM header to use the 
  same memory map as Super FX ROM, it doesn't.
- Pulled apart a real SNES using a crowbar (great fun), just to look at what
  speed the SPC700 is actually clocked at for more accurate relative emulation
  speed.
- Implemented SPC700 cycle counting in the hope the improved timing would fix
  Tales'; no such luck but at least the -ratio option is obsolete now.
- Implemented executing SPC700 instructions during DMA, fixes BSZelda and
  Goal lock up at start and music pausing briefly when ROMs do lots of DMA,
  usually between game screens.
- Scrapped the i386 asm SPC700 code - it was the cause of the music not 
  restarting after a battle in Chrono Trigger and FF3 and I didn't realise
  because the bug had already occurred in the test freeze-file I had.
  Thanks to John Stiles for pointing out that the Mac port didn't have the
  missing music problem.
- Fixed RGB subtraction bug on displays with only 5 bits for green, e.g. RGB555
  displays. The GREEN_HI_BIT variable was always set to a value for 6 bit
  green displays.
- Added the SA-1 memory map, still a long way to go before any SA-1 game will 
  run.
1.15
- Jumped versions to keep in sync with the DOS port release.
1.14
- Improved 8-bit sound generation slightly, but it still sounds very poor
  compared to 16-bit sound.
1.13
- Implemented the Tales of Phantasia memory map using the information supplied
  by zsKnight. Had to also implement a de-interleave routine to work around
  a ROM feature and Snes9x CPU instruction fetching implementation detail.
- Added a frames-per-second on-screen display option.
- Fixed the final glitch bug with the Mario Kart track display - the byte code
  for the termination of the DSP1 raster command wasn't been recognised.
- Disabled a NMI/DMA hack for Rise of the Robots, was causing problems for
  Mario Kart and 'Robots wasn't working correctly anyway.
- Optimised the mode 7 rendering a little.
- Changed tile rendering code to use offsets into screen buffer rather than
  direct pointers ready for z-buffer implementation.
1.12
- Changed V-blank NMI to occur immediately after a WAI instruction, Toy Story 
  required this.
- Fixed reading of H-DMA line counter register, Top Gear 3000 needed this.
- Ripped off large parts of ZSNES's DSP1 code (with _Demo_'s and zsKnight's
  approval). Now Mario Kart works almost 100%.
- Added a check to see if a vertical scanline IRQ register change will cause
  a H-IRQ later on the current scanline. Pilot Wings needed this.
- Fixed possible crash bug in clip window code when both windows had two
  spans. Could actually cause Chrono Trigger to crash the emulator.
- Fixed a lock-up problem with the C Super FX code, Star Fox and executing
  a few 'FX instructions per scan-line (required for Winter Gold).
1.11
- Partially fixed the DOS netplay server - the server timer is running too
  slowly and it doesn't deal with disconnects correctly yet.
- Corrected the sound echo delay - it was varying with the sound playback
  rate chosen by the user - it shouldn't have been.
- Implemented DOS netplay code - DOS server code still not working though.
- Removed all floating point calculations from the sound generation code.
- Fiddled with the pitch modulation code - my guess is the output of a
  channel that is used to modulate the frequency of another channel is 
  automatically muted by the SPC700 chip. Just a guess, but the wind from
  FF3 sounds 'better' but far from perfect.
- Optimised the tile palette index calculation.
- Optimised the planar to chunky tile conversion code.
- Fixed X11 port to always scale SNES image if hi-res. only (no interpolation)
  support is enabled.
- Added zipped ROM image support using Gilles Vollant unzip code and 
  some code that Ivar (Lestat) sent me a long time ago.
- 65c816 asm RTI instruction was destroying the program bank in emulation mode,
  the C code was already correct. Caused C64E to break.
1.10
- Finished NetPlay v1 - allows up to five networked machines to play 
  multi-player SNES games, one player on each machine.
- Switchable full-screen mode added to Linux X11 port, some code and ideas
  nicked from Maciej Babinski's original Snes9x XFree86 DGA Linux port, the
  UAE Amiga emulator, plus lots of my own code.
1.08
- Bug fixes to C Super FX emulation - now Winter Gold works correctly again.
1.07
- More DSP1 work. Mario Kart is now playable! The character projection code
  is still broken so the opponents and obstacles aren't always positioned
  correctly on screen and you keep bumping into them, but I can still keep 
  coming first!
- Started work on NetPlay support.
- Decreased sound card DMA buffer size on DOS port to improve sound generation
  and sound CPU synchronisation in some games.
- Included Linux joystick driver patches from Vojtech Pavlik so the port can
  use the new v1.x joystick drivers, again written by Vojtech Pavlik. Allows
  use of Micro$oft Sidewinder pads, NES and SNES pads, PlayStation pads,
  Gamepad Pros, etc.
- Added halve-the-result colour subtraction.
1.06
- Extended code to allow support for multiple 16-bit screen formats,
  switchable at run-time, rather just supporting one, selectable at compile
  time.
- Added XFree86 DGA Linux port - code from Maciej Babinski.
- More fixes to the X11 image format conversion and setup code.
- The asm SetByte routine wasn't wrapping writes to S-RAM correctly, allowing
  some ROMs to think they were running on a copier and put up an error
  screen. Thanks to Nu of #rom for the report.
- Added 'TV-Mode' support (interpolation and scan-lines) to the DOS and
  UNIX ports from code based on John Stiles work.
- Added v-sync option to the DOS port.
- Added fix to Pro Action Reply support, thanks to Paul Shoener III.
- Added ggi support (untested) to Linux port using patches from
  Alexander Larsson (alla@lysator.liu.se).
- Added 16 to 24/32 bit image conversion routines to the UNIX X11 code.
- The SPC700 OR1 instruction was broken. Thanks to Pyrgopolinices for the
  report.
- DOS port was having trouble splitting and joining path names - caused
  problems when specifying the full path name of a ROM when the ROM image
  was on another drive.
- If a ROM reset the sound DSP and then turned on echo effects but kept
  the same echo delay setting, then the echo effects could not be heard.
  Thanks to madec@mclink.it for the bug report and freeze file that made it
  easy to find the problem.
- DOS port was always using stereo sound setting, if sound card
  supported it, regardless of the user preference.
- Linux port X11 port could crash if window was resized while transparency
  effects were enabled.
- The colour subtraction accelerator look-up table was slightly wrong, causing
  one bit of red, green blue values to 'spill' into the next field.
- Allowed colour window to cut a hole in the main-screen and show the sub-
  screen underneath. The effect is used by Illusion of Gaia.
- Added support for colour subtraction, with the halve-the-result flag
  set.
- Included DSP1 code from _Demo_. Now you can see the track in Mario Kart and
  the ground in Pilot Wings - still can't play the games though due to other
  missing commands.
- Added an NMI hack to work around a code bug in Battle Toads: BATTLEMANIACS,
  its only by chance that the game works on a real SNES - And disabled it
  again because it causes problems for Chrono Trigger.
- A frame skip of zero was actually still skipping one frame. Thanks to
  Marius Fodor for the info.
- And yet more X-OR window bug fixes - now the effects during some of the more
  'posh' spells look correct in Chrono Trigger.
- Yet another window area inversion bug - off by one pixel on right-hand edge.
- Forgot to put dummy start and end points for XOR window combination modes -
  now Uniracers looks correct and Sailor Moon looks like it does on a real 
  SNES.
- Window clip code was using wrong index into a 2-dimensional array when
  the whole of the main or sub-screens were clipped.
1.05
- The master volume disable code was looking that the wrong variable!
- Fixed crash bug in newer sound code if a ROM tried to start a sample
  playing who's data went past the end of SPC700 memory. (Cannon Fodder)
1.04
- Fixed DSP1 ROM header detection bug.
- More DSP1 work; still nothing works, although I know the multiply command
  is correct because I've compared the results against a real DSP1.
1.03
- Oops, the multi-player 5 disable code change broke the multi-player 5 being
  the default controller.
- Implemented the colour window on the main screen - now Zelda's oval zoom
  window displays correctly and Krusty's Super Fun House clips the left-most
  8 pixels as it does on the real SNES.
- TERRANIGMA didn't like me returning a random value when it attempted to 
  read a channel's the current sample byte.
- Hacked in initial support for mode 7 priority-per-pixel - the priority bit
  doesn't actually change the priority of the pixel but the two games that I
  know of that use the feature look OK. (Winter Extreme Skiing and the
  intro of Tiny Toons Adventures).
- Colour addition/subtraction code now uses RGB565 rather than RGB555
  calculations - helps a little with the loss of the bottom bit of SNES
  colour data.
- DSP1 emulation started - nothing works yet.
1.02
- Switched to adding back drop colour rather than fixed colour when
  sub-screen addition is enabled but there's nothing on the sub-screen.
  Uniracers seems to need it. - DISABLED it again. Causes problems for
  other ROMs and Uniracers itself on later screens.
- Fixed XOR window logic combination mode and area inversion code, now
  Uniracers works correctly.
- Oops, if colour window and half colour addition/subtraction were both
  switched on, area outside colour window was still being halved, it shouldn't.
  Hacky fix at the moment until I implement the correct fix.
- Fixed several bugs with the mosaic effect and 16x16 tiles and a few
  possible background scroll offset bugs and the mosaic effect.
- Optimised the sound sample generation code for cases when the SNES
  sample playback frequency was higher than the sound card playback rate.
- Fixed possible click sound when a sample was first started to be played.
1.01
- Corrected scanline count for PAL games - should be 312 lines verses 262 for
  NTSC. Was causing slow music on PAL games.
- Added error correction code to the SPC700 timer update code - the
  SPC700 timers are updated using the emulated h-blank handler which is
  called every emulated 63.6 microseconds (15.720KHz) but the SPC700 timers
  need to be updated at multiples of 8KHz, hence the error. Was causing
  music to be played slightly too fast.
- Switched back to using C SPC700 code - the old SPC700 asm code was lacking
  several optimisations that the C version had. It also had multiple
  speed hack cycle skipping bugs. Plus I hadn't even finished optimising
  all the code from the last time I converted the C compiler output.
- Optimised SPC700 memory access routines a little.
- Disabled code that prevented ROMs updating SPC700 timer values while the
  timer was running - it seems like it is allowed, even though docs on the
  'net I've seen say its not.
1.0
- Fixed SuperScope support.
- Added hi-res. option to my DOS port.
- Fixed 4, 6, and 8 button standard PC joystick support.
- Changed some types the source code was using BYTE -> uint8, WORD -> uint16,
  DWORD -> uint32 and BOOL -> bool8, types were clashing Windows typedefs
  but sizes didn't always match.
0.99
- 8-bit double height and/or width tile rendering was missing every other
  group of 4 pixels - screen pointer advance count was wrong.
- Asm SPC700 emulation was ignoring the Shutdown flag - the result is its
  not possible to turn off cycle skipping for the SPC700 emulation.
0.98
- CPU to ROM address decoding code rewritten - used by Game Genie cheat codes,
  orginal code might have been the cause of some Game Genie codes not working.
- Started to remove printf calls and replace them with calls to S9xMessage,
  port code can then dicide what to do with message.
0.97
- Re-enabled decompressed sample caching, still has a possible click problem
  but the sound code is a lot faster with it enabled. Added command line option
  to disable it if required.
- Added '7' key support to rotate through available controller options, in
  the order multi-player5, mouse on #1, mouse on #2, superscope,
  standard controller and then back to multi-player5.
- Hi-res. (512x448) support fixed.
- Mouse support completed - Lemmings 2 and Mario Paint working a treat.
- More colour window fixes.
- Fixed freeze game problem when ZSNES SuperFX code is being used -
  ZSNES 'FX state was not being saved and restored.
- ZSNES SuperFX asm emulation code plugged in to Snes9x.
0.96
- Looks like if the colour window is not enabled at all and the colour
  window selector is defined to only allow colour effects inside the colour
  window, then no effects should be visible.
- Offset-per-tile rendering code didn't support width 64 screen size, which
  Chrono Trigger used on its title screen.
- Contra 3 seems to prove that defining the clip window area to be 'outside'
  a window that covers the whole screen is not an area with no range.
  - No it doesn't. It proves that I shouldn't have initialised the right
    window edges to 255! Contra 3 enables clipping windows without first
    defining their range.
- Debug frame advance feature was being prevented from forcing the next
  frame to be rendered by SyncSpeed which was being called after the
  debugger returned to the main loop.
- H-DMA code was allowing ROMs to manually start H-DMA during the v-blank
  period, ROMs shouldn't be allowed to do this.
- Asm code would not push the correct CPU status onto the emulated stack if
  returning from an NMI immediately triggered an IRQ - fixes Mortal Kombat 1
  and War of the Gems.
- 'd' dump memory debug command was not preserving the CYCLES count.
- C versions of SNES memory access code had same problem as asm code on the DOS
  port except it didn't cause a crash just ROMs failed to work correctly.
- Asm i386 code was using signed compares to check for special case memory
  areas - it was causing crash problems on the DOS port which was sometimes
  returning valid address values with the top bit set - i.e. they seemed
  like negative values!
- Changed event reschedule code to always allow h-blank start events, used to
  disable them during v-blank period.
- Added code to HDMA when end of visible lines reached.
- Changed register 4212 code not to always return h-blank when in v-blank.
- Clipping fixed colour addition to background area was off by one pixel on
  the right-hand edge.
- HDMA: Finially worked out how the real SNES operates when ROMs manual
  start H-DMA during the frame - ROMs must set up the H-DMA line count
  and address values before H-DMA is started.
- Fixed the asm code to remove all hard-wired structure offsets - one offset
  into the IPPU structure was wrong in the code because the structure had
  changed size.
- Added colour window support and allowed graphic window settings to be
  different on the main screen and sub screen, just like a real SNES.
- SuperFX LJMP instruction had bank and address values swapped.
- Fixed possible memory overwrite problem because OBJList array was one
  element too short.
- Added AND multi-graphic window combo support.
- ROM image memory allocation allocates an extra 32K of RAM, then moves the
  pointer forward by that amount - stops the SuperFX emulation from accessing
  unallocated memory, possibly causing a crash.
- SuperFX emulation now stores sign and zero flags in separate variables so
  the MERGE instruction can set flags correctly.
- Added 65c816 instruction skipping to i386 asm code when 65c816 waiting in
  a simple loop for some 'event' to happen e.g. end of frame NMI.
- Finally fixed the APU instruction skipping problem with the i386 asm
  code when the WAI instruction is used - caused slow music on some ROMs.
- Offset-per-tile modes don't seem to support screen size - Mario All Stars
  Super Mario 2 requires this on title screen. Doesn't seem to effect
  Tetris Attack or Puzzle Bobble.
- Changed SNES select and start keys from shift and control to space and
  enter - allows shift-fn key to save game positions without the SNES ROM
  also getting a select joypad button press.
- Multiplayer5 support for controllers 3+ was broken for ROMs that used
  automatic hardware joypad reading rather than reading joypads serially.
- ResetPPU was not clearing tile caches and marking OBJ as need recomputing.
- Cached OBJ positions and sizes were not being recomputed if ROM changed
  global OBJ sizes during frame.
- Fixed brightness multiplication problem on 16-bit code for green.
- SPC700 emulation now uses one variable to store ZERO and NEGATIVE flags.
- SPC700 emulation now only increments PC once at end of instruction.
- New ROM type and interleaved detection code.
- Reading sound DSP register ENDX also clears the value. The docs on the
  'net said that only writing to the register cleared its value. Fixes
  sound in Zoop.
- Fixed mode 4 colour palette problem on background #2 in tile-based graphics
  code.
- Fixed graphics mode 4, offset-per-tile support. Only one set of offset data
  that is switchable between horizontal and vertical, unlike modes 2 and 6
  which allow separate horizontal and vertical offsets per tile.
- Modified the APU timer code again, if the timer is enabled, a write to the
  timer target register is only allowed if a value hasn't been written yet.
  Fixed Donkey Kong Country 1 and Earth Worm Jim 1 & 2.
- Attack rate of 0ms changed from 1ms back to 0ms because of a group of ROMs
  that change from attack mode to decay mode in real-time. Will change back
  when I've added better SPC700 CPU and sound generation sync code.
- Added support for ROMs set a new sound timer value while the timer is
  enabled (EWJ 1 & 2).
- Added support for ROMs that read the sound envelope height (MK1, MK2, etc).
- ROMs writing to the H-DMA enable register during visible scan-lines were
  restarting H-DMA for that frame causing random screen effect corruption.
- Echo feedback seems to be after the FIR filter, not before as a diagram I've
  seen suggests.
- Sound pitch modulation added.
- Memory access routines changed to pass a single 24-bit address rather than
  the previous separate 8-bit bank and 16-bit address parameters.
0.3
- Updates to A-Bus address during a frame must not update H-DMA address.
  Fixes Actraiser 2 and Pacman 2.
- Removed sound volume mangling - with echo support enabled it doesn't seem to
  be required.
- Attack rate of 0ms changed to 1ms to help prevent click sound with sudden
  start of a sample playing.
- Sample caching of samples that looped using part of the original sample
  created a click on the sound output. Caching disabled for the moment. Would
  require 512K of cache RAM to fix sample caching.
- Colour addition/subtraction support added - but still a little buggy in
  places and very slow.
- 16-bit colour support added.
- Sustain sound volume was not being set if a sample using ADSR was started
  with both the attack rate and decay rate set to zero - resulted in missing
  sound samples on with some games.
- Sound echo support added.
- Sound channel mixing code was not completely clearing a channel's sound
  buffer when a channel finished playing a sample.
- Sound mixing code rewritten to use one buffer, rather than writing each
  channel into a separate buffer then combining them into one buffer.
- Memory access routines rewritten to use an 8K block lookup table rather than
  dedicated code for each ROM memory map - it was getting difficult to support
  the new types of SNES ROM memory maps becoming apparent.
- Sound sample decoding wasn't decoding sound samples correctly if a
  previously cached sample was only partially overwritten by the ROM as
  opposed to being completely replaced.
- Sound sample decoding wasn't clipping generated sample values correctly.
- Changed H-DMA to start in the current frame only if enable register is
  written to during v-blank, h-blank or while the screen is blanked.
- The SPC700 seems to start executing instructions before the 65c816 -
  shorter reset pulse? (NO - forgot the SPC700 executes instructions while DMA
  is taking place).
- ROMs that reset the H-IRQ position so another IRQ would be triggered on the
  same scan-line where not supported - Super Off-Road: The Baj needs it.
- $4212 bit 7 needs to go high at the end of h-blank at line 224 not at the
  start of h-blank - Bubsy needs it.
- Sample decoding routine could write to memory outside sample cache area if
  address of block to decode was greater than $0x10000 - 9.
- Walking mario can be seen on map screen of MarioWorld - needed sprite
  priority rotation working. ROM sets bit 7 of $2103 then sets rotation in
  $2102. Reset rotation at start of v-blank not at end.
0.24
- Fixed reading of DMA register values - now Ms Pacman works.
- Saved sprite memory address being restored on the wrong scan-line - caused
  corrupt sprites on at least one game (GANBARE GOEMON 2).
- Screen colour palette not being updated if ROM only wrote to low byte of
  palette register.
- Possible memory corruption fixed if a ROM tried to write to an invalid
  sprite address via PPU registers.
- X11 port support quick load and save by pressing function keys to load or
  shift + function keys to save.
0.23
- Added option to disable graphic window effects - T2: The Arcade Game doesn't
  seem to like them.
- Mode 7 "outside screen area" register interpretation fixed - now the
  Actraiser map screen looks a lot better.
- Old DMA code hack for Battle Toads: Double Dragon removed as it was no
  longer required and it was causing problems for Ys III.
- Lowered max volume level of 16-bit sound mixing code to help with sound
  clipping problems is lots of SNES sound channels are playing.
0.22
- Crash bug fixed in mode 7 graphics windows code
0.21
- Fixed a noise channel volume bug - noise waveform was getting clipped.
- Fixed 24bit X Window System server support on the Solaris port.
- Sprites in priority level 1 on mode 7 were being drawn incorrectly behind 
  graphics screen.
- BG 3 priority 1 tiles sometimes not drawn dependent on the $2105 bit 3
  setting.
- Added graphic window support the tile redraw code.
- Added mosaic support to tile redraw code.
- Tile redraw code was drawing one line too many on screen-splits.
- Tile-based redraw code made more intelligent about when a background should
  be displayed or not.
- Added wrap within bank support to large DMAs just to support Rock 'n' Roll
  racing.
0.20
- DMA routines added lots of special cases and removed most calls to GetByte,
  using a pointer instead.
- Multiple using PPU registers is now only computed when first byte of result
  is actually read.
- Sound enabled by default if compiled without DEBUGGER defined.
- Tile redraw method made the default.
- Fixed CPU_SHUTDOWN so SPC700 continues to execute even if main CPU is 
  "skipping" cycles waiting for an event to happen.
- More command line options added.
- Default cycles-per-scan-line to execute lowered to 90% from 100%.
- +/- keys now work even if auto-frame rate adjust was enabled.
- SPC700 emulation partially rewritten in assembler.
- Asm 65c816 code change to use same speed up techniques as the C++ code.
- Minor speed tweaks to the sound decoding and mixing code.
- C++ SPC700 emulation changed to use same method as 65c816 emulation for
  computing and storing emulated CPU flags.
- Mode 7 code rewritten and several scrolling offset bugs fixed.
- Lo-ROM S-RAM memory map bug fixed - now Uniracers works.
- Multiple speed ups and changes to the tile and line-based redraw code.
- Tile and line redraw code changed to cache converted tiles between frames.
- Variable cycle length timing made compile-tile switchable.
- C++ 65c816 emulation changed to use several opcode jump tables to avoid
  a register size comparison test on most emulated instructions.
- C++ 65c816 emulation changed how is computes and stores emulated CPU flags.
- Fixed high frequency sound playback bug - the sample rate calculation was
  blowing the range of an unsigned long.
- Fixed V-RAM reading so DKC3, Addams Family, Aladdin and Pacman all work.
- Fixed sound code so ROMs can change from ADSR mode to decrease mode - fixes
  lots of ROMs.
0.12 released
- Added dynamic speed regulation.
- TCALL vector calculation change from n to 15 - n.
- Fixed crash bug if ROM writes to sound DSP register numbers greater than
  127.
- Fixed DOS memory locked for interrupt code.
- Added long name versions of command line switches.
- Added command line switch for SPC700_SHUTDOWN code and WAI cycle skipping
  code.
0.1 released
- All DOS memory is now locked from being swapped.
- Fixed DOS port keyboard polling code - could get confused if a keyboard
  interrupt happened while keys were being checked.
- SPC700 ADC instruction never cleared Overflow or Carry flags!
- Changed selection of playback speeds for Solaris port.
- Sample caching code was broken - cached samples were never used.
- Added code speed ups for ROMs that use a lot of DMA to VRAM.
- More cpu code asm speed up.
- Fixed 16x16 size tiles on tile-based redraw code.
- Fixed sound gain-mode increase and decrease volume envelopes.
- Added code to support ROMs that reuse sprites in the same frame.
- Fixed processing of negative volume levels.
- Fixed SPC700 EOR1 instruction.
- Added SPC700 shutdown code to stop executing SPC700 instructions if in
  a tight loop waiting for a timer or for the 65C816 to respond.
- DOS playback rate was being forced to 16KHz by Allegro - fixed.
- Fixed bug in SPC700 MOV1 C,bit, address.
- Fixed a off-by-one loop sample pointer bug in MixSamples.
- Added command line flags for cached-tile based drawing and sub-screen
  background layers priority swapping.
- NOPE, got encoding of the OR1/EOR1,AND1 range of correct originally -
  got duff information from an "SPC700" programmer.
- More SPC700 fixes: got the encoding of the OR1/EOR1,AND1 range of
  instructions wrong - I guessed wrong originally.
- Sample looping bug fix on mono sound mixing code.
- Sound pitch value no-longer clipped to 14 bits - apparently FF3 needs this.
- Followed Paradox's suggestion and changed graphics code to place sub-screen
  background layers below main-screen background layers. Helps lots of games
  that use sub-screen addition/subtraction - now you don't have to toggle
  background layers on and off so often just to see hidden text, characters,
  or maps, etc. Made it switchable.
  Acts as a good intermediate solution until sub-screen addition/subtraction
  is actually implemented.
- Modified sound skipper code to return random values when ROM is stuck
  waiting for the SPC700 CPU to respond - helps several ROMs that previously
  don't work with the currently selection of APU skippers.
- Improved sound mixing code so volume is not attenuated so much, giving
  better results on 8bit sound cards.
- Changed the frequency at which the joystick polling routine is called - now
  called every-other frame rather than every 3rd frame.
- Recompiled Linux and DOS ports with the Pentium optimising version of gcc -
  gives a few percent speed increase.
- Changed V-RAM increment count from 64 to 128 - apparently Final Fantasy 3
  needs this as well.
- Fixed sprite priority bug with Mode 7 - apparently Final Fantasy 3 needs
  this.
- Fixed a screen clipping problem with the S-VGA mode.
- Fixed bug that had crept in with -m 2 S-VGA mode (Linux version).
- Fixed S-VGA Linux version with sound enabled.
- The SPC700 ADC (X),(Y) instruction was broken - with all these SPC700 fixes
  now many more ROMs work with sound enabled.
- The SPC700 Pop PSW instruction was not resetting the direct page location.
- The SPC700 instruction MOV A,[DP+X] was incorrectly doing a MOV A,DP+X.
- Got the SPC700 SETx and CLRx instruction encoding swapped around.
- Fixed #define problem that was stopping DOS snapshot saving from working.
0.72 released
- Fixed the DOS filename handling - old Unix code was screwing up with ROM
  filenames that contained backslashes (\) - the ROM would load but S-RAM
  loading and saving would fail and the default filename for snapshots
  wouldn't work.
- This time really fixed Allegro library keyboard handling (DOS port); it
  was missing key some presses/releases (was stopping Chrono Trigger
  Left + Right + A button combo from working).
- Added code to automatically remove headers off S-RAM save files with
  512 byte headers.
- 32Mbit ROMs in interleaved format are now automatically detected and
  converted.
- Added -ss 3 sound skip method support to the asm version - now NBA Live '96
  works again.
- Added support for multi-part ROM images.
0.71 released
- Made libgz.so statically linked (again) on Linux port - sorry.
- Made writing to $4200 also clear any pending IRQs. This finially allows
  Battle Toads: Double Dragon, Spawn and Sieken 3 all the work with the same
  IRQ logic (but Sieken 3 still gets stuck in sound download code).
- Fixed a H-DMA wobble bug - some frames could randomly miss a line of
  H-DMA causing the F-Zero screen to wobble, and slight text character
  corruption on games like DKC3.
- Interleaved format ROM images are now swapped in-place, without the need
  for a temp 4Mb buffer (saves lots of disk swapping on a 16Mb Windows 95
  machine).
0.7 released
- Fixed Allegro library keyboard handling (DOS port); it was missing key
  some presses/releases.
- DOS port had a different MAX_PATH value which moved the location of the
  SRAM size variable when using the asm CPU emulation core. This, in turn,
  caused the SRAM emulation to fail on the DOS port. Donkey Kong County 2 & 3
  were reporting a ROM copier was connected to the SNES and refused to run.
- Fixed assembler version of XCE - it was always leaving the carry flag
  clear - caused Killer Instinct and Super Punchout to think a ROM
  copier was fitted to the SNES and they all refused to run.
- Fixed assembler versions of MVN/MVP - they weren't setting the data bank
  register to the destination bank of the instruction.
- Fixed joystick detection on MS-DOS port - a single 2 or 4 button joystick in
  port 1 was being ignored if a second joystick was not present in port 2.
- Fixed an uninitialized variable in graphics code - was causing random
  missing scan lines on Mode 7 screens.
- Joysticks now scanned every 3rd frame (joystick scanning is slow in the PC).
- Double-whoops, Metriod 3 had stopped working in v0.6 - fixed it 
  (memory map bug).
- Made bit 6 of $4211 set if v-counter == v-timer-position.
- Made reading of $4200 read $4212 instead.
- Adjusted DMA timing to always access ROM memory at slow speed - this seems
  to fix Battle Toads.
- Added code to automatically clear pending IRQs when the horizontal line
  is no longer equal to the horizontal timer line - this fixes Seiken 3, it
  now just gets stuck in the sound CPU wait code - oh well.
- Moved NMI back to its original pre-0.65 behaviour, now Puzzle Bobble works.
- More graphics speed ups - the code to render background tiles with their
  priority bits set is only called if there are actual priority-bit tiles.
- Changed default frame skip rate from 1 to 2 - its seems most people don't
  bother to read the docs, so I thought I'll help them out a bit!
- Speeded up Mode 7 graphics on games like F-Zero that rewrite the matrix
  registers on each scan line using H-DMA.
- Reorganised the graphics code and did a slight speed up - graphics code
  will be the next thing to rewrite in assembler.
- Rewrote CPU core in assembler for Intel platforms - gives a very noticeable
  speed increase.
- Fixed several problems with the APU sound CPU emulation - its now getting
  stable enough to try and implement sound.
- Fixed bug that caused 1 byte of S-RAM to be emulated when ROM didn't
  expect any - it was enough to stop Street Fighter 2 and others from
  working - thanks Lord ESNES.
- The TXS and TCS instructions shouldn't set the Z and N flags.
- Looks like MVP/MVN instructions should ignore accumulator size - change
  code to always use all 16 bits and exit with accumulator set to 0xffff.
- Whoops, accidently left some test code in which was causing the V-BLANK
  flag, bit 8 in register $4212, to be miss-calculated.
- Fixed palette in mode 0.
- Speeded up graphics drawing a little by skipping groups of 4 pixels that
  were all transparent.
0.65 released
- S-VGA and MS-DOS ports now have a VGA mode command line flag.
- Improved the fading code - should be much more smooth now.
- Fixed second joy-pad support and re-mapped keys and joysticks to actually
  make a match between what my docs said and a real SNES (SNES docs I'd
  seen were wrong!).
- Fixed a bug in Relative Long CPU addressing mode. 
- Ported Snes96 to MS-DOS.
- Snapshot loading and saving no longer uses external gzip binary.
- Added support for registers at $21c2 and $21c3.
- Made reading the software latch for the horizontal and vertical counters also
  clear any pending IRQ.
- Added sprite priority rotation.
- Rewrote parts of the graphics routines to fix a sprite-to-sprite priority 
  bug.
- NMI flag changed again - now back to being reset by reading $4210 but
  actual NMI is delayed.
- Made mode 7 background colour 0 transparent - this fixed several sprite
  priority problems a few games where having.
- Finally worked out how sprite "Object Name Select" works and emulated it -
  this fixes many (if not all) of the corrupted sprites some games 
  experienced.
- Delayed NMI activation for one instruction to give time for loops that
  wait for bit 7 of $4210 to go high.
- Special-cased line count of 128 on H-DMA to mean repeat previous data with
  a line count of 128 and not just terminate H-DMA on that channel.
- APU sound CPU emulation added - just need to debug the thing.
- Fixed Overflow flag setting in ADC and SBC instructions - it was never
  being set.
- Rewrote how CPU instructions are fetched and how values are pushed and pulled
  from the stack - it gave a very large increase in emulation speed.
- H-DMA was being started one scan-line too late.
- Added CG-RAM reading support.
- Added "Full Graphic" V-RAM reading.
- Speeded up C version of CPU emulation quite a bit - could speed it up a
  little more before rewriting in assembler.
- Fixed bugs in 16x16 tile drawing on 2bit and 8bit deep screens.
0.6 released
- Speeded up 16x16 tile background rendering by removing a temp tile buffer
  it was using. The speed up also fixed a vertical scroll bug.
- Fixed slight window clipping on 16x16 tile backgrounds.
- Added automatic PAL/NTSC mode switching.
- Fixed background and sprites so only visible if on main-screen or
  on sub-screen under correct circumstance.
- Fixed lockup bug in DMA.
- Stopped NMI flag from being reset by reading $4210 - was causing a couple
  of games to get stuck.
- Whoops, got horizontal and vertical Mode 7 flip bits around the wrong way!
- Fixed MIT shared memory pixmap support for X11 version (it was always turned
  off).
- Fixed minor bug - first sprite in priority group was drawn twice. Didn't
  cause any visual bugs, it just slowed down redrawing a little.
- Fixed DMA bug - transfer byte count should be 0 after DMA has finished.
- Fixed a scaling bug if width < height.
- Interleaved ROM image support added.
- 16bit and 24bit X11 server support added - with scaling.
- Added window scaling on X11 version.
- Partial clip windows added - the only window overlap option implemented at
  the moment is OR, it seems it good enough for all the ROMs I've tested
  it with.
- Partial Mosaic effect added (pixels only growing vertically).
- Missing Mode 7 "outside screen area" option added.
- Fixed mode 7 screen wrap "outside screen area" option.
- Used new event processing to finally fix H-IRQ so it triggers at the
  correct position on the scan line.
- New event processing added.
- Linux version now statically links libgz.so (sorry).
0.5 released
- Linux S-VGA version changed from using a 320x240 ModeX screen (slow) to a
  256x256 chunky screen (faster) - thanks to Phillip Ezolt (pe28+@andrew.cmu.edu)
  for information on how to do this.
- Mode 7 screen flipping added.
- Included Snes97's CPU emulation code into Snes96. Didn't fix any bugs but
  slowed down the emulation some what and I couldn't compile it optimised
  because it was so large - so I removed it again.
- Added a few extra features available via the keyboard.
- Fixed a H-DMA transfer mode - bad documentation.
- Fixed H-DMA indirect addressing (it was using the wrong CPU memory bank).
- The Linux slow down bug is my crappy laptop enabling battery saving features !
- Changed graphics code to perform true line-by-line screen updates.
- Fixed sprite drawing bugs.
- Ported Snes97's graphics code to Snes96.
- Fixed memory map for HiROM save RAM area.
- Fixed HiROM memory map - now Killer Instinct and Donkey Kong County work !
- OK the slow down bug is just actually my laptop trying to save battery
  power by slowing the CPU clock!
- The Linux slow down bug shows itself on DOS emulators running under DOSEMU
  so it must be a kernel problem (or feature).
- Fixed H-DMA (again) to be complete emulation - all I need now is line-by-line
  screen update...
- Fixed DMA to not copy too many bytes if byte count was not a multiple of
  the transfer mode quantity (caused corruption on Super Mario World map screen).
- Changed mapping of keyboard to joy-pad buttons and added additional
  direction keys for joy-pad one so player one's right hand doesn't have to
  obscure player two's keyboard joy-pad buttons.
- Changed joystick button layout to match SNES if using a 6 button joy-pad.
- Changed snapshot format so I can easily use libgz on Linux.
- Added few speed up tweaks that will be lost again when I add line-by-line
  screen update.
- First visible scan-line changed from 8 to 1 to match with new docs.
- New SNES information source found; fixed partial H-DMA emulation to include
  indirect addressing support.
- Snapshot files are now compressed.
- Compressed ROM images now supported on Linux.
- Snapshot loading and saving added.
- Joystick support for Linux added. One 2, 4 or 6 button joystick, or two 2
  button joysticks supported (PC hardware limitation).
- SVGA full screen support added for Linux. Still has the X11 slow down bug so
  can't blame the X11 server any more! Must be a kernel bug or a very odd
  emulator bug.
- Added emulation of two joy-pads on the PC/Sun keyboard.
- Removed -i command line flag as it is no longer used. -h value range has also
  changed: now 1 - 100 (percentage).
- Actuate cycle counting rather than instruction counting now added including
  fast and slow ROM timing - should give much better timing information when
  line-by-line screen update added.
- Bug fixed old-style joy-pad access used by some ROMs - Mario All Stars still
  gives problems if enabled and I don't know why; but at least Super Bomberman
  now works !
- Looks like if both horizontal and vertical IRQ are enabled then IRQ should
  only be triggered once per frame and not once per scan line - looking at the
  IRQ handler of a couple of ROMs seems to confirm this.
- Added initial cycle counting - not accurate enough for some ROMs though.
- Finally worked out how the odd VRAM address increments should work but only
  found one ROM, so far, that actually uses it.
- Debugged the odd slow down problem with the Linux port - it seems to be a
  bug in the X Window System server - starve the X server of keyboard presses
  or mouse clicks or movement and the X server slows down, slowing down the
  emulator with it ! 
0.4 released
- Fixed sprite vertical clipping at top of screen.
- No need to invert the Mode 7 transformation matrix before use - the
  ROM coder already had to!
- Fixed Mode 7 scrolling offset when using special effects.
- Added Mode 7 rotation, enlargement and reduction emulation.
- DMA shouldn't zero the byte count value after a DMA has completed.
- Added DMA reading (Addams Family was using it)
- Fixed V-RAM read function - returned data should lag behind the V-RAM
  address by one byte/word.
- Added mode 7 graphics only.
0.3 released
- Speeded up the main CPU loop a bit.
- Add more command line options:
  -f <frame skip> (default 1)
  -i <no instructions between polling X> (default 32768)
  -h <number instructions per scan line> (default 45, some games allow a lower
					  setting resulting in a increased
					  emulated frame rate)
  -t enable CPU tracing
  -ss <sound CPU skip wait method> (default 0, more methods to be added)
  -H disable H-DMA emulation
  -F Force Hi-ROM memory map
- Modified planar to chunky conversion to use look up tables.
- But now Mario All Stars won't start. Made emulation of $4016 optional with
  -o command line switch.
- Thanks to Carlos (calb) of ESNES fame, I've added correct $4016 & $4017
  joy-pad register processing - now several more ROMs will start once a
  button is pressed and can be controlled.
- DMA wasn't updating DMA registers with the final CPU address used after the
  DMA had completed (caused sprite and background corruption with some ROMs).
  Still suspect another DMA side effect isn't being emulated correctly though.
- Fixed setting of CPU overflow flag in ADC and SBC instructions in decimal
  mode.
- Fixed MVP/MVN CPU instructions to leave X and Y values correct at end of
  loop - several more ROMs now work. Still don't know if MVP/MVN instructions
  should ignore the accumulator size flag or not.
- Rewrote background drawing code - gives a large increase in speed.
- Flag to only update X Windows colour palette when necessary was missing a
  case - caused some ROMs to start with a black screen.
- Code to only update background tiles when changed wasn't working so I
  disabled it.
- CPU WAI instruction needed to trigger on hardware IRQ even when interrupt
  enable flag was false.
- DMA was not transferring 65536 bytes when byte count was 0.
- Fixed matrix 16bit x 8bit multiplication (old debug code was causing junk
  value to be returned).
- Fixed Makefile so version.h header file change recompiles file that shows
  version number in window title.
- Added more reporting of used but unimplemented missing hardware features to
  debug command.
- New ROM loading code from Jerremy included, can now cope with ROM images
  with no 512 byte header.
- Speeded up emulated memory access a little bit.
0.2 released
- Added matrix 16bit x 8bit multiplication for Super Off-Road Racer.
- Added initial H-DMA emulation - visual effects using it will not be seen
  correctly until screen is updated line-by-line rather than the whole screen
  at end-of-frame.
- Fixed horizontal sprite clipping (vertical clipping still has a problem).
- Integrated large sprite bug fixes and new background drawing code from
  Jerremy.
- Fixed large size per-sprite flag; always stayed true after sprite size was
  changed to large.
- Rewrote the planar to chunky pixel conversion routines (still need more
  work).
- Made registers $4016 & $4017 always return $ff - lots of ROMs that previously
  wouldn't go beyond the title screen thought old-style joy-pads were
  connected and were waiting for the user to press a button on them.
- Frame skip rate now set to 1 instead of 5 on my P166 laptop!
- Fixed NMI v-blank flag being incorrect set, caused some ROMs to lock.
- X keyboard autorepeat now switched off when emulator has keyboard focus.
- Added number key options to toggle backgrounds 1 to 4 and objs (sprites) on
  and off.
- Fixed sprite clipping problems at edge of left hand side of screen.
- Corrected Hi-ROM memory map (I think) (no I didn't)
- Fixed most of the sprite-to-sprite priority problems.
- Added sprite debug command, 'S'.
- Added a debug command to show what missing hardware features a ROM was using.
- Added horizontal and vertical beam position IRQ - horizontal always triggers
  at start of line at the moment.
- Fixed SBC instruction to set carry flag the correct way around.
Initial release 0.1
- Ported Windows 95 version of Snes96 to Linux on a PC and Solaris on a
  SparcStation.
- Corrected work RAM memory map.