initial fce ultra 0.81 import
[fceu.git] / Documentation / ChangeLog
1 .81:
2 ----
3
4         More SDL goodies.
5
6         Renamed "Makefile.olinuxsdl" to "Makefile.unixsdl"
7
8         More SDL fixes and cleanups.
9
10         BeOS port is now compiled with the "-no-fpic" flag, which allows
11         me to use my inline assembly.  The executable work fine as far as
12         I can tell.
13
14         Added "Makefile.beos".  gcc doesn't like my inline assembly
15         used in RefreshLine(),so this port will likely be slightly slower than
16         other x86 ports.
17
18         Added a check to make sure SIGBUS is not equal to SIGSEGV in
19         drivers/cli/main.c.  Needed for compiling under BeOS.
20
21         Renamed the "PI" member of the X6502 structure due to conflicts with
22         a defined symbol with some math header files.
23
24         Merged fcelineasm.h into fceline.h
25
26         Fixed(possibly) a possible problem in fcelineasm.h with input register
27         clobbering.
28
29         More SDL changes.
30
31         Added speed throttling code to the CLI code, and added a command
32         line switch "-nothrottle".
33
34         Lots of restructuring/rewriting/merging of the MMC3 code.
35
36         Updated DOS code to use the generic CLI wrapper.
37
38         Reads from $4090 and $4092 now return the current envelope setting
39         in FDS sound emulation.  I'm not sure if this is correct...  Affects
40         "Ai Senshi Nicole" and "Bio Miracle Bokutte Upa".
41
42         Added native SDL sound support to the SDL code.  the "olinuxsdl"
43         now uses this code by default instead of the unixdsp sound code.
44
45         Modified MMC3 IRQ counter emulation.  I'll need to watch out to see
46         if it breaks any games.  Fixes:  MegaMan 3, Gun Nac, Klax(Japanese).
47
48         Changed a few memory reads in x6502.c to use RdRAM instead of RdMem,
49         resulting in a slight speed increase.
50
51         Cleaned up mapper 250 emulation code.
52
53         Added support for iNES mapper 51(thanks to Kevin Horton for the
54         information).
55
56         Merged some iNES mappers corresponding to bootleg multicarts
57         based on MMC3s with mbshare/mmc3.c.
58
59         Added support for iNES mapper 52(thanks to Kevin Horton for the
60         information).
61
62         Made some hacks to the MMC3 emulation code so that I can add support
63         for pirate MMC3 multicarts more easily.  I should clean it up later.
64         Moved mapper 44 emulation code to mbshare/mmc3.c.
65
66         Saving screen snapshots will no longer corrupt the frame buffer
67         for one frame(unless memory couldn't be allocated).
68
69         Fixed screen snapshot saving(it was sort of broken due to the
70         changes made to the driver<->emulator interface code; status
71         messages were being saved to the image).  FCEUI_SaveSnapshot()
72         no longer returns a value(the request to save a screen snapshot is
73         serviced before status information would be written in the next frame).
74
75         nosprites is now set to 0 before RefreshSprite() returns, to prevent
76         problems if a game turns off the bg and sprites when FetchSpriteData()
77         for the next scanline is called but then turns on sprites when
78         the actual scanline is drawn.
79
80         PPU_hook() is now called more often if PPU_hook is non-null.
81         Made changes to mappers 118, 95, 9, and 10 to compensate.
82         No games seem to be broken, and I added support for mapper 96
83         (though the games aren't very playable because the special controller
84         isn't emulated).
85
86         Romance of the 3 Kingdoms is now recognized to use 16KB ex-WRAM.
87
88         Added support for mapper 185...sort of.  I think this is another
89         instance of incompatible hardware being lumped onto one mapper number.
90         Sigh.
91
92         Added support for "Famicom Jump 2" as iNES mapper 153.
93         If a good(as far as I can tell) dump is loaded, FCE Ultra will
94         automatically fix the mapper number.
95         I also made some changes to the mapper 16 IRQ emulation code.
96
97         BRK now sets the I flag.
98
99         Reads from $4015 no longer reset DPCM IRQ.
100
101         Changed emulation of RTI instruction slightly.
102
103         X.IRQlow is now set to 0 in PowerNES().
104
105         The VS Unisystem bit in the iNES header is no longer looked at(
106         I was having too many problems with this bit being set when it
107         shouldn't have been).  Now, VS Unisystem emulation is enabled
108         when a known VS Unisystem game is loaded.  I also rewrote the VS 
109         Unisystem detection function.
110
111         iNES mapper 1 now supports pageable CHR RAM if no CHR ROM is present.
112         Fixes "Family School".
113
114         Mapper 70 no longer has a mirroring control emulated, and I extended
115         the number of 8KB CHR pages supported to 16.
116
117         Cleaned up iNES MMC5 save RAM loading/saving code and added
118         support for MMC1 games with 16KB of RAM(the second 8KB are saved),
119         via CRC32s(currently only Genghis Khan(USA) and Nobunaga's Ambition(
120         USA and Japan) are recognized).
121
122         Added support for the MMC5 Koei game "Ishin no Arashi", in the iNES
123         format(I added an entry with its CRC32 value and the number of 8KB
124         WRAM banks it needs). 
125
126         Better iNES mapper 33/48 IRQ counter emulation.
127
128         Added the game "Uchuusen - Cosmo Carrier" to this list.  I'm
129         beginning to hate the iNES format more and more...or maybe
130         just Fanwen. :)
131
132         Added the mapper 32 game "Major League" to the list of games
133         that usually need iNES header correction...but in this case, the
134         iNES header cannot specify that this game needs to have one-screen
135         mirroring.
136
137         iNES header information is now printed before any header corrections
138         are made based on a database.
139
140         Fixed a bug in mapper 32 emulation.  "Ai Sensei no Oshiete"
141         works now.
142
143         Tried to add support for iNES mappers 245 and 249.
144
145         Fixed the MMC5 read handler to return the data last on the data
146         bus instead of 0xFF when a read was made to an unmapped address.
147         This seems to fix the lockup problems in "Bandit Kings of Ancient
148         China".
149
150         Reversed "Modified the time at which the "y scroll" register is updated
151         during hblank."  The changes broke Klax.
152
153         Added an unsigned 64-bit base timestamp variable "timestampbase".
154         Adding this to the 32-bit variable "timestamp" will return
155         the number of cycles executed since emulation started(in the future
156         I'll probably change it to since reset or power toggle).
157         This allowed me to replace "lastn" hack in the MMC1 code with
158         something better.
159
160         Changed my mind and undid the removal of support for old save states.
161
162         Removed support for old save states and in general I won't
163         try to support save states made with previous versions.
164
165         MMC1:  Writes to $8000-$FFFF with D7 set will now cause
166         the first MMC1 register to be OR'ed with 0x0C.  I'm not sure
167         if this is correct, but it doesn't seem to break anything
168         and it fixes Robocop 3.  I'll see if anyone reports games
169         not working in .81 that worked in .80.
170         
171         Worked on a generic driver interface wrapper very similar
172         to the driver interface FCE Ultra used to use(I'm getting
173         tired of all of the duplicated driver code).  Eventually,
174         the DOS, SVGAlib, and SDL ports will use this wrapper.
175
176         Similar change to the argument parsing code.
177
178         Changed configuration file saving-loading routines and the
179         configuration structure to allow for linking config structures
180         to each other).
181
182         Small fix to the emulation of the MMC5 split screen mode.
183
184         Made Linux SDL code compilable again.
185
186         Changes to MMC5 EXRAM emulation(read/write).
187
188         Fixes to the emulation of the MMC5's split screen mode, based on
189         observations while using CastleVania 3 and a Game Genie(on a real
190         NES).
191
192         Fixed a bug in ines.c that caused any calls to AddExState() from
193         a mapper initialization function to be effectively "erased"(ResetExState()
194         was called after the mapper was initialized).  Fixes the VRC7 sound 
195         state saving/loading stuff.
196
197         Finished adding support for the MMC5's split screen mode(this does
198         not mean that the support is complete, but at least the intro in
199         "Uchuu Keibitai SDF" works correctly now).
200
201         Worked on adding support for the MMC5's split screen mode.  Not
202         completed.
203
204         Reverted to .80's FDS sound code.
205
206         Modified the time at which the "y scroll" register is updated
207         during hblank.
208
209         NSF playing code will now disable FDS sound output on song init
210         (fixes some problems with the Zelda no Densetsu NSF rip).
211
212         Increased the emulated clock speed of the FDS sound emulation code
213         to give better quality output.
214
215         Modified NMI to occur a few cycles later.  Fixes BattleToads...but
216         it may have broken other games.  Also modified the way NMI's are
217         handled in x6502.c.
218
219         Modified ines.c to memset() GameMemBlock to 0 on virtual power toggle.
220         Also, trainers are now loaded into their own buffer instead of
221         directly into emulated WRAM and copied into emulated WRAM on
222         power toggle; I've been meaning to do this for quite some time.
223
224         Changes to the way the zapper cursor is drawn on the screen.
225
226         FCEUD_WriteSoundData(), FCEUD_BlitScreen(), and FCEUD_UpdateInput()
227         have been combined into one function: FCEUD_Update().
228
229         More fixes to the network play code, and a fix to the Windows network
230         play driver code that fixes(hopefully) a rather evil bug that caused
231         lockups when the remote stopped network play.
232
233         Added code to set the battery-backed bit in RAM if a game needs it,
234         based on CRC32.
235
236         Added more games to the list of games that commonly have bad iNES
237         headers, in ines.c
238
239         Updated docs and usage.h for DOS and Linux regarding the new video
240         mode and the new refresh rates.
241
242         Linux:  Fixed a bug with video mode 6(a few upper scanlines were being
243         cut off).  Increased the refresh rate of video mode 3 to 120hz.
244
245         Increased the refresh rate of video mode 2 to 65 hz in the Linux port.
246
247         Screen snapshots can now be taken while playing an NSF.
248         
249         Added a new sexy tweaked vga mode that I created to the Linux svgalib 
250         port.  It's 256x224 at a refresh rate of 103hz.  Hopefully it won't
251         blow up anyone's monitor. ;)
252         DOS port will follow eventually.
253
254         Modified Makefile.base to produce an executable named "fceu" instead
255         of "fce".
256
257         The plans(cycle-accurate ppu emulation) for .90 were a bit ambitious, 
258         and I still need to make other fixes before then.
259
260         Fixed some minor(usually) bugs with setting 256x240 tweaked VGA mode
261         in DOS and Linux ports.
262
263 .80:
264 ----
265
266         Cleaned/fixed a few things in the mapper 19 emulation code.
267         Family Circuit '91 still doesn't work quite right...  I wonder if
268         it's a bad dump.
269
270         Added input override code to Windows port.
271
272         Added code to fix iNES header information in RAM and suggest
273         changes to the user.
274
275         Added support for iNES mapper 152(to be used with games set to 
276         mapper 70, that use one-screen mirroring instead of h/v mirroring).
277
278         Blits using the DirectX blitting function(method?) to the primary
279         surface are now done with the asynchronous flag set(if that
280         fails, a "normal" blit is tried).
281         
282         The DirectX blit buffer(secondary surface that FCE Ultra writes to
283         directly and then uses the DirectDraw blit function on to blit
284         to the primary buffer) is now created without specifying it
285         should be in system memory or video memory, except in the case
286         when no hardware blitting is available, and then DDraw is explicitly
287         told to create the surface in system memory.
288
289         Added Family Keyboard support to the DOS port.
290
291         Cleaned up the VRC7 sound emulation code.  I need to find a way
292         to save the current sound state in a save state.
293
294         Found out the real name of the "Space Shadow" gun; it's
295         called the "Hyper Shot".  I'm still not sure who made it, though.
296         Possibly Bandai did.  The interesting thing is that Konami
297         also made a Famicom accessory(dual square boxy things with two buttons
298         on each) with the same name(though there might not be a space in the
299         name).
300
301         Only the upper two bits read from $4016/$4017 are undefined.
302         Bit5 is always 0, though.  Fixed the bug in "input.c".
303         Silly kevtris' old documents.  New kevtris' brain is always good.
304
305         Family Keyboard support for the Windows port.
306
307         Added support for the Family Basic Keyboard to the Linux port, other
308         ports todo.
309         Might want to add support for the tape recorder at some time.
310         Also mapped the "Scroll Lock" key to disable/enable command keys
311         so that the FBK is more useable.  It doesn't disable CTRL C, 
312         though...
313
314         Changed a lot of inlined functions in x6502.c to macros so that
315         I could test out some optimization ideas.
316
317         DOS code updates for game input override support.
318
319         Small optimzation to opcode $4c, and relative jumps.
320
321         Added some code to ines.c to set controller information in 
322         FCEUGameInfo(returned by FCEUI_LoadGame()) based on crc32 values.
323
324         Updated user documentation and usage.h for DOS and SVGAlib input 
325         command-line changes.
326
327         Added an option to disable the four-score(to Windows and Linux ports
328         so far).
329
330         Updated Windows interface to support the new Famicom expansion
331         devices.
332
333         (Re)Added support for the Famicom 4-player device.
334
335         Improved Zapper emulation...sort of.  It still needs a lot of work. :/
336
337         Added *partial* support for the "Space Shadow" gun.
338
339         Added support for the Arkanoid controller(both NES and Famicom style).  
340
341         Added code to support the extension Famicom input devices.
342
343         Added PAL scanline start/end drawing settings to Windows port.
344
345         Added pause emulation key(F2) to Windows port.
346         
347         In the process of rewriting/fixing up input code stuff.
348
349         Minor bug fix to Power Pad emulation code.
350
351         VS Hogan's Alley and VS Duck Hunt automatically select the zapper
352         now(though it only works on the SVGAlib port).
353
354         Undid some FDS sound code changes introduced in 0.76 that totally
355         screwed up sound.  Oops.
356
357         Added code to allow different settings for first/last scanline
358         drawn while in PAL emulation mode, to the Linux and DOS ports.
359
360         Added convenience(it's not necessary, but it reduces redundant and
361         confusing code in the driver code) function 
362         FCEUI_GetCurrentVidSystem(int *slstart, int *slend).
363
364         Updated file "TODO".
365
366         Changed #include <unzip.h> to #include "zlib/unzip.h"
367         in file.c.
368
369         NSF 6502 player now initialized the stack pointer on reset.
370
371         Worked on de-emphasis emulation code quite a bit.  
372         The deemphasized palette calculated at the end of the frame is now
373         based on what deemphasis bits were set for the longest during
374         the screen(sampling interval is a scanline) update loop.
375         Added a "static" deemphasized palette at $40-$7F in the palette table.
376         This corresponds to the colors when all of the deemphasis bits are set.
377         I did this to fix the PAL game "Noah's Ark", without breaking
378         anything else.  The only downside is a slight speed loss(~2% on
379         my system when sound is disabled), but this is acceptable to me,
380         at least.
381         Maybe it's time to write hi/true-color ppu drawing code...
382
383
384         Fixed an out of bounds array access in svga.c in SetNESDeemph().
385         The variable "lastd" in svga.c was being initialized to the wrong value.
386         Thanks to "Jarod CANAL" for pointing this out.
387
388         Removed FCEUI_SetFirstRenderedLine or whatever it was called and
389         the function to set the last line.  Replaced with:
390          void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall);
391
392         Changed SetVidSys(int w) to ResetVidSys() in fce.c.  Reenabled
393         PAL/NTSC emulation overrides based on game loaded(really only useful
394         for NSFs and UNIFs now).  
395
396         UNIF loading code now recognizes the chunk "CTRL" and tries
397         to use it.  Only the svgalib code supports overriding of input
398         settings based on game loaded, now, though...
399         The user is still going to have to configure powerpad settings
400         on his/her own.
401
402         Fixed return values of FCEU_fseek() and fixed a problem in unif.c
403         related to it.
404
405         Changed mechanism for how FCE Ultra tells the driver
406         code what type of system is being emulated.  A structure of
407         type "FCEUGI" is returned from FCEUI_LoadGame().
408
409         Fixed a major mapper 64 emulation bug introduced in 0.76.
410
411         Modified BlitVidHi() in drivers/win/video.c to speed it up.
412
413         Added support for loading the iNES-format Game Genie ROM image.
414
415         Removed ggrom.h and added code to load the Game Genie ROM
416         image from a file.
417
418         Added Windows netplay.c.  (new: the user exiting the emulator
419         while stuck in a blocking recv() or send() loop now works.)
420
421         Fixed a vram address register bug in fce.c that I created when I got 
422         rid of the pair/dpair data types.
423
424         Added new mappers/92.c
425
426         Removed mappers/92.c until I can contact LULU or rewrite it.
427
428         drivers/win changes.  Removed netplay.c until I can rewrite it.
429
430         Got rid of pair/dpair data types.
431
432         Got rid of silly "TempArray" thing.
433
434         Began adding GPL headers to files.  FCE Ultra is going to be in
435         a state of legal limbo for the next few days...
436
437         Replaced crc32.c and crc32.h, and added some #ifdef's and #defines
438         to use the crc32 code in zlib instead if zlib is linked with
439         FCE Ultra.
440
441         More fixes to sb.c.
442
443         Cleaned up drawing.h and ggrom.h(even though ggrom.h will *probably*
444         be removed before the next release).
445
446         Redid frameskip code.
447
448         Rewrote necessary pieces of sb.c and sb.h and fixed quite a few
449         bugs.  I still need to test it on various other sound cards, though.
450
451         Rewrote(more like "recreated in my own image") DOS keyboard driver.
452         Removed unused "keyscan.h" from drivers/svgalib
453
454         Rewrote part of(the parts that Marat wrote - the connection and
455         closing parts) the Linux TCP/IP network play code.  I guess it works, 
456         but I haven't tested it very much.  In any case, it's still dangerous
457         to use network play in FCE Ultra with SVGAlib, since recv() or send() 
458         might block and since the keyboard is in raw mode, you have a problem.
459         Maybe a future SVGAlib will fix the general problem of lockups if
460         keyboard_update() isn't called, though it is only partly SVGAlib's 
461         problem...
462
463         Fixed FCEU_fseek() when used with a compressed file in the PKZIP
464         format that has been loaded.  Fixes a UNIF loading problem.
465         Also added a check to the return value of FCEU_fseek() in unif.c.
466
467         Replaced Marat's 6502 emulation core with my own.  
468         It should be fully functional, but as always, I don't know if
469         I implemented the undocumented instructions correctly.
470         Several things are correct in this new core that were not in
471         Marat's(D flag is no longer cleared by interrupts, for example).
472
473         Altered mapper 16 irq counter emulation slightly.
474
475         Fixed the behavior of the SXA, SYA, and XAS opcodes based on the
476         documentation I have.  I'm not sure what happens when page crossing
477         occurs with those instructions on a real NES, though.
478         Also CHANGED(not fixed) emulation of opcode $8B("XAA").
479
480         Changed some of the M* functions(absolute indexed and maybe some others)
481         to perform dummy reads.
482
483         Changed some of the macros in m6502.c to inlined functions so
484         that I can modify and examine them more easily.
485
486 .77:
487 ----
488
489         Fixed a silly network play bug(in the global network play code)
490         that caused excessive lag.
491
492         Added a "niceness" setting to the sound configuration dialog.
493         Removed obsolete information from the dialog.
494
495         Fixed speed throttling code in Windows port when PAL emulation is
496         disabled/enabled and a new game hasn't been loaded yet.
497
498         Commented out a printf() to debug stuff in fds.c(oops).
499
500         Applied PK's joystick patch to the osdl code.  It allows the user
501         to map axes and it fixes a joystick button mapping configuration saving
502         bug.
503
504         Added two command line options new to Linux port to DOS port.
505         Just need to test them...
506
507         Added some stuff to unif.c to allow for boards that can support
508         CHR RAM instead of CHR ROM(darn Sachen boards...).  Fixes UNIF
509         version of "Q-Boy". 
510
511         Added command line option "-snapname" to Linux port.  I'll add it
512         to the Windows port as well, but probably not to the DOS port.
513
514         Added clip option to Linux port.
515
516         Fixed sound logging(in Windows port) so that multiple recording
517         sessions now work.
518
519         Added an option to clip the leftmost and rightmost 8 columns
520         of graphics in the Windows port.
521
522         Added a submenu that lists recently opened files, in the Windows
523         port.
524                 
525 .76:
526 ----    
527
528         Updated porting.txt.
529
530         Added speed throttling code to Windows port that's used when sound is
531         disabled(and an option in the "Miscellaneous" 
532         configuration window to disable it).
533
534         Added cheat interface to DOS build.  
535
536         A few tweaks to the text cheat interface code in the cheat listing code.
537         Added a command to quickly toggle the status of the cheat(though a 
538         cheat can still be disabled/enabled by (M)odifying the cheat).
539
540         Support for UNIF UNL-TC-U01-1.5M board added. Same credits as below.
541
542         Rewrote mapper 228 code just for the heck of it(actually, I couldn't
543         figure out why some(about two) of the games in the Action 52 cart 
544         weren't working in .75(and .76).  I traced it back to .71, where an apparent bug in
545         the undocumented 6502 opcode emulation allowed it to work, which
546         was later fixed for the .72 release(opcode 0x7C)).  I'm thinking        
547         that the dump is bad...
548
549         Added a few crc32 checks to ines.c to check for and report when
550         a known(by me) bad(hacked or bad dump) game is loaded.
551
552         Added support for the following UNIF boards.  Thanks to Quietust
553         and Kevin Horton for the information.  Some problems still exist
554         with a few games that use these boards, though...
555
556                 UNL-Sachen-8259B
557                 UNL-Sachen-8259A
558                 UNL-Sachen-74LS374N
559                 UNL-SA-016-1M
560                 UNL-SA-72007
561                 UNL-SA-72008
562                 UNL-SA-0036
563                 UNL-SA-0037
564
565         Fixes to some stuff in cart.c(for example, calling setprg32() when 
566         only 16kb of prg data is present now works).
567
568         Added support for iNES mapper 189.
569
570         Tried to add support for the UNIF board "UNL-H2288".  Failed.
571
572         Updated "cheat.txt" to fix a few typos and added an example of finding
573         and adding a cheat using the Linux port's text interface.  The actual
574         section on the Linux cheat interface still needs to be written, however.
575
576         Changed network play code in the Windows port and fixed a bug.
577         Fixed a similar bug in the Linux netplay code....sort of.
578
579         A few cosmetic changes to the dialogs in the Windows port.
580
581         Fixed sound initialization on the Windows port(it was being initialized
582         when FCE Ultra started even if it was disabled by the user.  Oops.).
583
584         Joystick button configuration code in Windows port changed slightly
585         to be more useable.
586
587         Changed reference to video mode 5 in the linux port to "1 per 4".
588         It may not be very meaningful, but it is certainly better
589         than "TV Emulation".  I'll change the Windows port reference later.
590
591         Documented video mode 7(320x240) for the Linux port.  Also added
592         a check for the FBDev driver in order to use this mode instead
593         of a tweaked vga mode if that driver is being used.
594
595         Added/Fixed cheat interface for Linux port.  It's still not perfect,
596         though.  The code is ugly...
597
598         Callback function for FCEUI_ListCheats() now receives
599         status information(enabled/disabled).
600
601         Callback functions for cheat functions now must return 0 to
602         stop listing cheats or 1 to continue.  
603
604         Fixed a problem(the cheat code was reading in cheats
605         for address $0000 from cheat files if any blank lines were present).
606
607         SDL port zlib changes(linked dynamically to zlib now).
608
609         More changes to envelope decay + looping on code.  No longer
610         depends on value @ $4017.  It now sounds correct based on some
611         tests I did with SMB3 and a GG, but Goonies 2 doesn't sound right(
612         based on a sound file sent to me by another person).
613
614         Added support for iNES mapper 140.  Thanks to Quietust for the
615         information.
616
617         I need to figure out how to deal with the problem of so many
618         bad NSFs that most people consider good...
619
620         Changed envelope decays a bit.  Their behavior now depends on bit
621         7 of $4017.  I don't know if this is right...
622
623         Addition of debug.c for some debugging stuff.
624
625         Updated zlib to 1.1.4.
626
627         Modified code in various files to allow UNIF games to override
628         current selected video system emulation(NTSC or PAL).  Need to
629         make sure this really works.
630
631         Changed sound.c to prevent desynchronization during network play.
632         This might slow down sound emulation slightly, especially when
633         sound emulation is disabled.  I really don't care...
634
635         Updating network play code.  More info later...
636
637         Moved the sound/video/etc output code in EmLoop() to the top of the
638         for(;;) loop so that initialization prior to calling EmLoop() will
639         be the same as initialization done during a call to a FCEUD_* function.
640
641         A few very small changes to sound emulation in fds.c.
642
643         Changed unlink() to remove() in cheat.c and removed the including
644         of the header file unistd.h.
645
646         Split up the cc=... statement in RefreshLine() to make it easier
647         to read and not ambiguous(to Borland's C compiler).
648
649         Changed a lot of the function declarations in cheat.c.  I'll need
650         to verify that cheat searching still works ok and that cheats still work
651         ok.  I'll also need to update the Windows(and Linux console) cheat code
652         to prevent compiler warnings.
653
654         Fixed various minor code problems(not minor if you want to use a
655         compiler besides gcc).   This is an ongoing process...  
656
657         Removed bit fields after reading about and thinking about possible
658         portability problems, though I kept some optimizations in fceline.h
659
660         Minor code simplification in drivers/win/joystick.c(replaced
661         "case 200 ... 207" and "case 208 ... 215".
662
663         Modified some code to use bit-fields in the graphics rendering code 
664         in fce.c and fceline.h.  gcc seems to be able to optimize the new
665         code to run faster.
666
667         Fixed m6502.c and fce.c to initialize variables on virtual power
668         toggle.  This should fix network play on the Windows port.
669         I'm also in the process of cleaning up fce.c. 
670
671 .75:
672 ----
673         Fixed directories configuration stuff in Windows port(corresponds
674         to .75r2).
675
676         More changes to square wave channel envelope/volume emulation...
677         Changes described in the large paragraph some lines down have been
678         abandoned.
679
680         Added a command line switch to set the volume in the dos port.
681
682         Changed Windows sound configuration dialog.  Now buffer length is
683         specified in time, not samples.  I also added a volume control.
684
685         Reduced the volume on 8-bit sound output on all ports by 1/2.
686
687         Added a function FCEUI_SetSoundVolume().  Added support for setting
688         the volume via the command line in the Linux port, other ports coming
689         soon.
690
691         Changed FCEUD_WriteSoundData() again.  No longer has a "Check"
692         argument.  All clipping(ugh) is done internally now.
693
694         Added a directories configuration dialog to the Windows port.  I worked
695         on it too long and I became a zombie, so it might have a few bugs.
696         That's what guine...err...users are for. ;)  Don't expect me to do
697         anything like this for any other port, though.  I don't feel like
698         doing it on the DOS port, and the Linux and other UNIXy ports shouldn't
699         really need it.
700
701         Made some changes to the rectangle/square wave channel emulation to
702         fix the pops in SMB.  I have no idea if what I did is correct.  To
703         be honest, I'm not sure I know EXACTLY what I did, but it's something
704         like this:  Writes to $4003/$4007 now reset the duty cycle count
705         and reload the cycle counter with the current wavelength.  Writes to
706         $4003/$4007 now do not update the amplitude output of the channels; they
707         will be updated after the cycle counter hits 0(or below).
708
709         More information in iNES informational output.
710         
711         Minor changes to mappers/16.c.
712
713         Increased the volume of the VRC6's sawtooth wave channel.
714
715         Added more information to the RAM cheat guide.
716
717         Changed the triangle wave generation code slightly.  I decided
718         to remove support for the higher-frequency triangle waves, as they
719         are too cpu-costly to create and are probably not very audible on a 
720         real NES anyway.
721
722         Major changes to how sound is mixed.  This necessitated a high pass
723         DC-offset removing filter, and a low-pass filter just to make things
724         sound better. ^_^ 
725         Note:  FCEUD_WriteSoundData() no longer needs to clear the waveform
726         data referenced by the passed pointer; it's done internally now.
727
728         Fixed JMP ($xxxx) - now handles wrapping like it occurs on a real 6502
729         (hopefully; I'm assuming that the same holds true for the NES' cpu).
730
731         Added the ability to load a custom global palette in the DOS port.
732
733         Fixed bug in drivers/common/unixdsp.c(wrong return value if sample
734         rate was out of range).
735
736         Many sound fixes...     - Frequency sweeps, length counter stuff,...
737
738         Changed Windows port to use IDirectInput7 and IDirectInputDevice7
739         interfaces.
740
741         Fixed a Game Genie bug in the core emulation code.  It only appeared 
742         in the Windows port, though.  (Enabling gg emulation, loading a game,
743         and then disabling gg emulation and loading a new game while in the
744         gg code entry screen would cause the new loaded game to not work
745         correctly).
746
747         Modified windows port to use the config saving/loading stuff in
748         drivers/common/config.c
749
750         Mapper 45 cleanups/fixes.
751
752         Added the ability to load a custom global palette in the Linux port.
753         Yay.
754
755         Fixed a large number of overcomplicated code and silly bugs in
756         drivers/common/config.c.  This changes the format of the configuration
757         structure, too.  Also added support for saving/loading strings with
758         automatic memory allocation when strings are loaded.
759
760         Minor change in InitNetplay().
761
762         Fixed bad type conversions for pointers to functions and fixed
763         some bad declarations of functions.
764
765         Reenabled zlib support for the sdl build.  I need to pay attention
766         to patches that modify lines than don't fit on my screen.
767
768         Fixed vidblit.c to not emit so many warnings when compiling.
769
770 .74:
771 ----
772
773         Stop sound in Windows port when user clicks l/m/r mouse buttons
774         in the non-client area of the window.
775
776         Added "Drag and drop" file open support to Windows port.
777
778         Various code cleanups.
779
780         mappers/33.c optimization.
781
782         Rewrote the function "FCEU_MakeFName()".
783
784         Removed crc32.h from mappers directory.
785
786         Modified some of the window resizing code in the Windows port.
787
788         Added support for waiting for vblank/double buffering to the Windows
789         port.
790
791         Added/Fixed support for iNES mapper 248.
792
793         After an NSF file is loaded, information about its header is now
794         displayed.
795
796         Fixed a typo in the Namco 106 extra ram handling code. 
797
798         Improved the quality of the Namco 106's extra sound channels. 
799         - Thank Mamiya and Applepie(real name?) for info.
800
801         When an NSF file is being played, FCE Ultra will no longer go through
802         its scanline rendering loop.  This speeds up NSF playback considerably. 
803
804         Updated "porting.txt".
805
806         Moved some stuff from DriverInterface() to their own functions.
807
808         Fixed some iNES mapper 18 IRQ counter emulation bugs.  "Ninja Jajamaru -
809         Ginga Dai Sakusen" now works.
810
811         Rewrote large pieces of the mapper 64 code.  "Skull and Crossbones" 
812         still doesn't work, though.
813
814         Changed format of iNES header information output, added "ROM CRC32" info.       
815
816         Modified the way cycle timing is done slightly.  No change
817         for NTSC emulation, but PAL emulation is a little more accurate.
818
819         Changed the behavior of indirect indexed(I hope I got that right ;))
820         instructions to behave more like a real 6502(junk reads are now 
821         performed).
822
823         A few optimizations/cleanups in m6502.c.