CrabEmu 0.2.0 : Released February 27, 2013

Z80 Core:
- Fixed emulation of I/O Ports to actually behave as they do on a real Z80
  (placing a 16-bit value on the address bus, not an 8-bit one). This doesn't
  really affect SMS emulation at all (since I only pay attention to the low
  8-bits of the I/O Port number anyway), but it does make things more correct.
- Fixed an issue with the DD- and FD- prefixed opcodes that only operatated on
  half of the IX or IY register on big-endian machines.
- Fixed timing of DDCB- and FDCB- prefixed opcodes (all of them were using 4
  extra cycles beyond what they should have used).
- Fixed timing of LD (nn), IX and LD (nn), IY instrucitons.
- Clean up some duplicated code (the fetching macros, specifically).
- Move the result writing part of the DDCB/FDCB prefixed opcodes so as to remove
  GCC's fear that the _value variable would be used uninitialized.

6502 Core:
- Implemented most of a 6502 core, including undocumented instructions. The core
  currently does not handle decimal mode for the few opcodes that use it.
  Currently, nestest runs fully without producing any errors in the CPU core.
- Added a function to disassemble 6502 opcodes (including the undocumented
  opcodes).
- Tested the 6502 core versus various test roms (blargg_nes_cpu_test5-cpu.nes,
  nestest.nes, and NEStress.nes) and corrected any issues that came up.

SMS/TMS9918A VDP Core:
- Fixed priority on sprites in the TMS9118A modes (fixes bug #2843241).
- Reset scrolling parameters in sms_vdp_reset (fixes bug #3052415).
- Fixed a palette loading bug for Game Gear state loading.
- Minor bugfix related to interrupts that probably doesn't actually affect any
  games or such.
- Don't set the sprite collision flag for collisions of transparent pixels.
- Added code to implement frameskip. Note: The Mac OS X and Linux ports will
  not currently ever skip frames. This is solely for the Dreamcast version at
  this point (and will probably stay that way).

NES PPU Core:
- Fixed an issue that would cause sprites that had a Y position of 255 to wrap
  around and appear on line 0.
- Added code to implement frameskip. The note above in the SMS VDP section
  applies here too.

SN76489 Core:
- Added a sn76489_reset() function.
- Added default settings for a "normal" discrete SN76489 (15 bit shift register,
  bits 0 and 1 tapped), and made SG1000 and SC3000 mode actually use them.

Sega Master System (and related consoles):
- Added PAR cheat support.
- Added support for the Pause button in the Dreamcast port (start while playing
  a SMS game).
- Added support for enabling/disabling PAR cheats in the Dreamcast port (Left
  trigger + X).
- Added core support for the SDSC Debug Console.
- Clean up some variables in sms_shutdown in case things get reinitialized at a
  later time.
- Added the functionality to save PAR cheats to a file.
- Added the ability to load gziped roms.
- Added the ability to load bzip2ed roms.
- Imported portions of the minizip code from zlib (in the contrib directory in
  zlib) by Gilles Vollant.
- Added the ability to load ZIPed roms.
- Added the MAME YM2413 core (by Jarek Burczynski) for FM unit emulation.
- Added support for the MSX-like mapper found in some Korean games (resolves
  feature request #3040603). My code is based on the implementation in MEKA, so
  thanks to Omar Cornut for MEKA.
- If there is no BIOS in use, default the SP to 0xDFF0 (in a more sane way than
  what was done in 0.1.7 and 0.1.8).
- Added support for the strange mapper in the 4 PAK All Action cartridge. Based
  on documentation here: http://www.smspower.org/forums/viewtopic.php?t=13548
- Allow the YM2413 to be enabled even if the SN76489 is disabled.
- Fixed an issue that caused games to show nothing but a black screen on startup
  when running on PowerPC.
- Mapped the Game Gear start button to the SMS pause button. That way, you can
  use it as one might actually expect in SMS mode.
- Save the memory control register value at address 0xC000 of the SMS' memory
  space (fixes games that blindly use that and end up disabling I/O sometimes).
- Fixed an issue where an empty cheats list would be written for every loaded
  game if you never used the cheats system with the game.
- Set the SMS' memory to 0xF0 on boot/reset, as MEKA does. This fixes a couple
  of games that seem to expect it (namely, Alibaba and 40 Thieves and Block
  Hole).
- Added a "no mapper" mapper. This will probably be used eventually for any rom
  that is less than 48KiB in size, but for now is only used for one Rom that I
  tested and seems to need it (namely, Xyzolog).
- Added support for the mapper in Janggun-ui Adeul. This is based on way that it
  is implemented in MEKA.
- Fixed Janggun-ui Adeul when using a BIOS.
- Added support for the strange Taiwan 8KB RAM adapters (which were used with
  some MSX ports).
- Detected the game Monaco GP as having no mapper (fixes bug #1868199).
- Cleaned up handling of a few mappers and how they initially map memory.
- Set up a sane default for the ioctl register. This fixes Bust-A-Move (GG) with
  save states, as well as other games, probably.
- Fixed use of semaphores in the Dreamcast port to use the new semaphore init.
- Only update the sound buffer once per frame, instead of every scanline.

CrabEmu BIOS:
- Clear RAM to 0xF0 instead of to 0x00. This fixes Alibaba and 40 Thieves as
  well as Block Hole when using the BIOS. Hopefully it doesn't break any other
  games!

ColecoVision:
- Added initial ColecoVision support (Hooray! SVN r100).
- Added initial ColecoVision support to the Dreamcast port.
- Added support for loading ZIPed, gziped, and bzip2ed ColecoVision roms.
- Only update the sound buffer once per frame, instead of every scanline.

NES:
- Added initial NES support, including iNES Mapper 0 (NROM).
- Added support for iNES Mapper 1 (MMC1/SxROM).
- Added initial NES support to the Dreamcast port.
- Added NES APU emulation using the APU code from Nofrendo/Nosefart.
- Added backend code for SRAM saves.
- Added support for loading ZIPed, gziped, and bzip2ed NES roms.
- Added support for save states.

GUI (Dreamcast):
- Allow browsing of directories (resolves feature request #2973501).
- If we can't get to the default rom directory (/cd/crabemu/roms), start the rom
  browser at /cd, failing that start at /.
- Make rom browser keep track of the last viewed directory, so when someone goes
  back after playing a game, they start in the last viewed directory.
- Show the current directory on the top of the rom list.
- Allow selecting ColecoVision roms (.col or .rom). You must have a ColecoVision
  BIOS to use them!
- Allow selecting ZIPed, bzip2ed, and gziped roms.
- Changed the filename used on the VMU for SRAM saves to be based on the rom's
  CRC32 rather than the product code, which wouldn't necessarily be there on all
  roms.
- Added support for Save States to the Dreamcast port.
- Pause sound in the Dreamcast port when reading/writing the VMU.
- Check the VMU for adequate free space before saving on the Dreamcast port.
- Present the user with an error message on screen if there's not enough space
  to save or a VMU is not found in A1 when CrabEmu tries to save.
- Allow selecting NES roms (.nes).
- Added support for NES SRAM saves.
- Fixed a slight issue where saving would throw up an error when it worked fine.
- Added a No-UI mode which can be switched at compile time. This is for testing
  purposes without having to have a CD handy with the UI graphics.
- Added support for loading ROMs off of an SD card. See the README for more
  information on that.
- Fixed an issue with the menu if a user were to try to use the page down
  function when there was less than one full page of entries in the menu.

GUI (Mac OS X):
- Added a menu option to enable/disable PAR cheats.
- Added a GUI dialog for editing PAR cheats.
- Added a color information dialog if a user clicks on a color in the Palette
  Viewer dialog.
- Hide the mouse cursor in fullscreen mode.
- Allow the user to set a joystick button to exit the emulator (but don't
  require it to be there).
- Added option to preserve the aspect ratio in fullscreen mode.
- Added option to select a directory to save SRAM, Save States, and Cheats to.
  This defaults to a few directories (SRAM Saves, Save States, Cheat Codes)
  rooted in ~/Library/Application Support/ljsdcdev/CrabEmu/ .
- Added display of the SDSC Debug Console.
- Continued adding to the Help file.
- Added option to display images filtered by HQ2x, HQ4x, and Scale2x
- Fixed Pattern and Palette viewer for RGB555 color.
- Allow use of the close button on the emulation window to stop the currently
  running rom.
- Split out Preferences related functionality from EmuController.
- Cleaned up some more small code issues.
- Fixed help indexing on Snow Leopard.
- Save PAR cheats when a rom is closed.
- Added GUI option to disable the YM2413.
- Fixed the BIOS enable checkboxes so they enable the right BIOS (they were
  reversed in some instances).
- Read the state of the PSG channels every time you start a rom, so that if you
  disable the channel while nothing is running it'll actually be disabled when
  you start a game.
- Saved a bunch of things in the preferences that weren't saved before and
  cleaned up a lot of the preferences related code.
- Cleaned up lots of warnings that Interface Builder was complaining about.
- Added/Reworked GUI stuff related to ColecoVision support.
- Fixed an issue related to running a ColecoVision rom then switching to a SMS
  rom.
- Refactored configuration of controls to try to abstract it from being
  compltely console specific.
- Added GUI/framework for setting up ColecoVision controls on a keyboard.
- Fixed a crash if you were to load a ColecoVision rom, close the window, then
  load another ColecoVision rom.
- Added GUI/framework for setting up NES controls on a keyboard.
- Fixed the layout and defaults for NES controls to be a bit more sane.
- Write SRAM saves when switching consoles by loading a new rom.
- Added support for SRAM saving for the NES.
- Start sound paused so as to fix the rather annoying lag between sound and
  video that I've noticed on the NES emulation.
- Rewrote the entire joystick/gamepad input code. Now with 50% less hackiness!
- Added gamepad input for the NES (including the configuration GUI stuff).
- Removed duplicated code between EmuController and CrabEmuPrefsController
  related to gamepad stuff.
- Added gamepad input for the ColecoVision (including GUI stuff).
- Added an option to allow keyboard input while using a gamepad. Mainly useful
  for the ColecoVision, since you probably don't want to be assigning all of
  those buttons to a gamepad...
- Fixed a lockup issue when loading a rom for a new system.
- Show an error dialog when loading a BIOS rom fails.

GUI (Qt):
- Fixed key repeat issue on X11.
- Added a menu option to enable/disable PAR cheats.
- Added a debugger comparable to the OS X version.
- Added support for save, state, and cheat directories
- Command line arguments can be used to pass in the filename of a ROM
- Code cleanups
- Fixed hang on exit and load when the emulator is paused.
- Actually load SRAM when a ROM is loaded.
- Save window geometry and positioning.
- Better support for VDP 32 bit support.
- Implemented reloading of rom from debugger.
- Implemented realtime palette viewer in debugger.
- Added GUI option to disable the YM2413.
- Added SDSC debug console.
- Added preferences tab for setting up ColecoVision controls on a keyboard.
- Fixed the timing to correctly use 60 for NTSC or 50 for PAL.
- Fix problem when the region or video system are updated when loading a new
  rom or resetting the currently loaded rom.
- Some UI elements are disabled depending upon the system (ColecoVision/SMS)
- Added Shutdown menu.
- Added support for Qt 5.
- Added support for OpenGL-based rendering. Enable by passing -DOpenGL=on to
  cmake at build-time.
- Don't allow ColecoVision roms to be loaded unless a BIOS is configured.
- Removed useless Enable checkbox on the ColecoVision BIOS config.
- Addded error messages when BIOS roms or game roms fail to load.
- Fixed an issue with Game Gear, SG-1000, and SC-3000 roms hanging when they
  were loaded.
- Added support for Scale2x, HQ2x, and HQ4x scaling when using OpenGL for
  rendering and the VDP32 is not enabled.
- Added support for OpenGL rendering with VDP32 enabled.

GUI (SDL):
- Added an SDL port. Uses SDLAudio, SDL surfaces for rendering, and SDL for
  input.
- Added a file browsing menu.
- Added ColecoVision support.

Other:
- Fixed filename check of variable to send to gui_set_title.
- Changed default rendering output on Mac OS X to RGB555 rather than RGB888 (the
  extra precision's not needed, and it makes HQ2x/HQ4x much easier).
- Imported Pixel Art Scaling Toolkit by WolfWings for HQ2x, and HQ4x support.
- Wrote a Scale2x filter.
- Imported Stéphane Dallongeville's CZ80 as a way to test it against zexall (for
  another project that isn't mine, oddly enough).
- Wrote a interface for CZ80, but probably won't ever complete it really.
- Readded the CoreAudio sound core for Mac OS X -- the OpenAL one is far too
  buggy for some odd reason. Some of the changes that were made to clean up the
  OpenAL one have been brought along with it though.
- Added CMake to build the Qt port (it integrates with various IDEs better)
- From the SDL port allows for the LeapFrog Didj to have native support with
  only minor tweaks.
- Fixed a silly bug with the Mac OS X joystick/gamepad code.
- Fixed a horrid sound bug with PowerPC.
- Fixed a bug with creating new preferences on Mac OS X (as well as with
  importing preferences for versions 0.1.8 and prior).
- Fixed sound buffering problem on Mac OS X 10.4 (at least on PowerPC).
- Reworked the save state format, significantly. CrabEmu will still load old
  save states, but will no longer write them.
- Added a new GAME block to the new save state format to give checksums of the
  rom that the save state is for.
- Moved console detection code out of sms_mem_load_rom and into its own
  function (that handles ColecoVision as well).
- Fixed compilation with some non-GCC compilers.
- Added in better frame-rate locking. Frame rate is now locked to the audio, so
  we shouldn't get ahead of ourselves anymore. This applies to both the Mac and
  SDL sound cores.
- Removed the OpenAL sound core entirely. The Qt version now uses the SDL sound
  core.
- Added internal crc32 and adler32 checksum functions. This way, we don't have
  to rely on zlib for them.
- Made zlib and bzlib optional in the CMake build.

CrabEmu 0.1.9 : Released February 27, 2009

Z80 Core:
- Fixed a bug with a bunch of the DDCB/FDCB-prefixed opcodes where they wouldn't
  actually burn any cycles.
- Fixed a bug with NMI/IRQ handling where handling the interrupt didn't burn
  any CPU cycles.
- Removed a pointless instruction counter in CrabZ80_execute.
- Fixed cycle counts of the following instructions (according to "The
  Undocumented Z80 Documented"):
    LD HL, (nn); LD (nn), HL; LD SP, HL; LD IxH, IxH; LD IxL, IxL; INC IxH;
    INC IxL; DEC IxH; DEC IxL; LD (Ix + d), n; LD Ix, (nn); LD r, IxH;
    LD r, IxL; LD IxH, IxL; LD IxL, IxH; LD IxH, r; LD IxL, r; LD SP, Ix
- Removed the Ecco hack from the CPU core. The bios handles this.

SN76489 Core:
- Allow adjustment of noise shift register size on init.

VDP Core:
- Removed pointless sms_vdp_hcnt_read function.
- Made sms_vdp_color_t use the uint32 typedef so that its actually always a
  32-bit type. This should make things work right on 64-bit systems. The
  Dreamcast-specific typedef uses a uint16 now.
- Return the number of cycles used before asserting the IRQ line in
  sms_vdp_execute so that it can be taken account for in the main loop.
- Added table of values for the H Counter (from SMSPlus-GX).
- Added sms_vdp_hcnt_latch and (new/working) sms_vdp_hcnt_read functions.

GUI (Qt):
- Save NTSC/PAL setting in the preferences.
- Allow arbitrary user-resizing of the window, limited to having the correct
  aspect ratio for the content rectangle.
- Added options for setting the BIOS Rom to be used.
- Added menu options for setting the region of the SMS emulated.
- Added ability to take a screenshot in PNG format.

GUI (Mac OS X):
- Save NTSC/PAL setting in the preferences.
- Allow arbitrary user-resizing of the window, limited to having the correct
  aspect ratio for the content rectangle.
- Fixed mouse event positioning for an arbitrarily sized view.
- Allow enabling the debugger before loading a rom.
- Added options for setting the BIOS Rom to be used.
- Added menu options for setting the region of the SMS emulated.
- Added ability to take a screenshot in PNG format.
- Added Fullscreen mode.
- Re-added a feature that was taken out sometime before CrabEmu 0.1.0 -- A VDP
  palette viewer (this feature was removed so long ago that I don't even have
  the code for the original version any more).
- Re-added another feature that was removed prior to CrabEmu 0.1.0 -- A VDP
  pattern viewer (once again, the old code I no longer have). This new version
  displays all tiles in VRAM with both the background and sprite palettes (the
  background palette is on top).
- Adjusted the fullscreen code so that it works with multiple displays. The
  display that is used in fullscreen mode is determined by which display the
  bottom left corner (the origin in Cocoa) of the window appears on. Any other
  displays are left un-captured.
- Added an Open Recent menu.

Other:
- Fixed button preferences saving on Mac OS X.
- Added support for Joysticks/Game Pads on Mac OS X (including preferences).
- Added support for the memory control port (port 3E).
- Added support for the I/O control port (port 3F).
- Added support for a SMS and/or Game Gear BIOS Rom to be used.
- Added support for specifying an export/domestic system on init.
- Added an unmapped read area to the memory code for when the memory control
  register maps out everything.
- Rewrote Mac OS X sound output code to use OpenAL rather than CoreAudio.
  Cleaner, more commented code is always better (this code is also used with
  the Qt/Linux version).
- Reorganized the source tree a little bit.
- Initial port of CrabEmu to Linux with Qt.
- Fix an odd bug that would make CrabEmu run 313 lines in NTSC mode.
- Corrected cycles-per-line to be 228, not 227.
- Moved a lot of code from smsmem.c into separate files, reducing the clutter in
  that file quite a bit.
- Changed all of the remaining code that used not size-specific types (unsigned
  long, unsigned short, unsigned char, etc) other than int to use the size-
  specific typedefs in CrabEmu.h.
- Take into account any extra cycles run on the previous line and dynamically
  adjust what number of cycles are run on the next line when calling on CrabZ80
  (this fixes bug #1865593, I think).
- Fix a bug related to the SG-1000 game The Castle and resetting the emulation.
- Fix a rather annoying bug in relation to Game Gear BIOS Support (in a couple
  of different places).
- Make the sound buffering code use a circular buffer rather than the ugly hack
  of a buffering system that was used before.

CrabEmu BIOS:
- Created a BIOS for use with CrabEmu. There's two different versions, one for
  the SMS and one for Game Gear. Its completely possible to use no BIOS still or
  to use no BIOS at all, but this way there's a default one (plus it was kind of
  interesting doing a bit of SMS programming).

CrabEmu 0.1.8 : Released November 15, 2008

Z80 Core:
- Made CrabZ80_init initialize the readmap to NULL.
- Made recursively calling CrabZ80_execute work a bit better (save old state
  and such things). This still isn't perfect somewhere along the line...
- Added a compile time option to make CrabZ80 act more like MAME's Z80 core.
  This is mainly useful if you want to use the Z80 core debugger. The flag is
  CRABZ80_MAMEZ80_COMPAT.
- Fixed cycle count on DEC (HL) and DEC BC.
- Simplified the EI instruction's code, getting rid of the useless conditional.
- Removed option of compiling CrabZ80 without using the big switches.
- Removed option of compiling CrabZ80 without 16-bit memory access functions.
  It is still possible to use only 8-bit memory access functions, as CrabZ80
  provides a default wrapper around the 8-bit versions for the 16-bit versions.
- Massive reduction in compiled code in CrabZ80. This version compiles to less
  than half the size of the one in 0.1.7.
- Rewrote the DAA instruction without a lookup table (further reducing code
  size here, since the table was 4KB, and the code to implement it is much less
  than 4KB).
- Cleaned out the macros file after the massive rewrite.
- Fixed a bug in the default 16-bit memory write function that would cause data
  to only be written to one byte (and the wrong data at that).
- Fixed a potential bug in the default 16-bit memory read function where it
  would not wrap around to 0 if a 16-bit write on 0xFFFF was done.
- Fixed a timing issue with all of the CB opcodes.
- Fixed an issue on big-endian machines with accessing 8-bit registers.
- Added support for interrupt mode 2.

VDP Core:
- Changed how control port writes are handled, not a big change, but it removes
  a couple of conditionals from the code.
- Removed the H and V Counters from the VDP structure. They aren't used, so
  storing them in memory is kinda pointless.
- Changed drawing handlers to accept a pointer to the current line in the
  framebuffer.
- Modified the code for blanking whole scanlines and for blanking column 0 to
  store the color, rather than going at the palette array every iteration.
- Changed the type of the smsvdp.framebuffer to sms_vdp_color_t for cleanliness.
- Changed the sms_vdp_update_cache function to use a lookup table for converting
  pixels from planar to a usable format. This had the nice side effect of
  fixing the speed issues in the Dreamcast port.
- Moved the TMS9918A-specific drawing code out of smsvdp.c into its own file,
  tms9918a.c

SN76489 Core:
- Doubled the volume of output.

Other:
- Fixed the Z80 core debugger to actually work again.
- Added instruction disassembly to the Z80 core debugger when there is an error.
- Fixed the count of "special" roms (should've been 7 with the addition of Pro
  Yakyuu GG League).
- Fixed 16-bit memory support for The Castle.
- Detected the Terebi Oekaki rom in the special mapper code.
- Added support for the Terebi Oekaki drawing board.
- Updated the version of the MAME Z80 core used in the Z80 core debugger.
- Enabled stereo sound by default in the Dreamcast port, now that it runs fast
  enough (sometimes too fast...).
- Fixed stupid saving bug in the Dreamcast port (Why hadn't anyone ever reported
  this one to me? Saving pretty much hasn't ever worked in the Dreamcast port!).
- Added a 50/60Hz selector menu to the Dreamcast port, if a European console is
  detected and it is not hooked up to a VGA box.
- Fixed PAL support on the Dreamcast port. PAL mode on the Dreamcast is only
  operational when the Dreamcast itself is running in 50Hz mode, as selected by
  the menu that was added, so it only really works on PAL Dreamcasts.
- Added icon files to the Mac OS X version for .sc, .sg, .ces, and .cestate
  files.
- Added slightly better looking icons to the Mac OS X version for .gg and .sms
  files.
- Added a much better looking SMS controller to the preferences dialog in the
  Mac OS X version (Thanks to Jean-Paul Van Gorder for that).
- Removed old, broken, non-working smsz80-mame.c file.
- Fixed an issue that made SRAM files get saved twice.
- [Hopefully] Fixed an issue that could cause SRAM files to get corrupted on the
  Dreamcast port.
- Changed Save + Exit functionality to be Y + trigger rather than just one of
  the triggers so that it is less likely to happen accidentally.

CrabEmu 0.1.7 : Released June 3, 2008

Z80 Core:
- Made the SP register default to 0xDFF0 (Fixes bug #1864866). This is
  technically a bit of a hack, since Ecco seems to assume that this is the value
  in the SP register when the game is booted. Hopefully it won't break anything
  else.
- Fixed an issue with recursively calling CrabZ80_execute which would cause the
  parent calls to crash when a child call returned.
- Corrected opcode ED7E (Was a IM 1, supposed to be IM 2).
- Minor cleanups of some instructions' code.
- Made CrabZ80 use read maps similar to how memory is handled internally in the
  rest of the emulation (only for fetching opcodes though, memory reads
  triggered by Z80 opcodes are still handled through the appropriate function).
- Added compile-time option for CrabZ80 not to fall back on a normal memory read
  function call if an area does not have a mapping in the read map (note,
  CrabEmu does use this option). The flag is CRABZ80_NO_READMAP_FALLBACK.
- Rearranged operations in a couple of instructions to get rid of 16-bit
  constant operands (SuperH can only deal with 8-bit immediates without
  actually storing them in memory, so this might help with speed on the
  Dreamcast port).
- Got rid of conditional branches in a couple of instructions (notably DAA).
- Added support for 16-bit memory functions (read 16 bits, write 16 bits).
  These are enabled by using the compile-time flag CRABZ80_USE_16_BIT_MEMORY.
- Made read map functionality also handle most immediate operands.
- NMIs are handled in the same manner as IRQs now.

VDP Core:
- Removed the useless offset in the sms_vdp_pattern_t structure.
- Fixed calculation of the fifth sprite number in the TMS9918 modes. The fifth
  sprite number was originally overwritten each line, even though that should
  not happen. It should be set to the first illegal sprite number encountered
  since the fifth sprite bit was reset.
- Modified the way that the V-Counter works so that it uses tables of
  precomputed values, rather than actually updating it each line. This looks
  cleaner in the code, but doesn't really have any impact on the speed sadly.
- Fixed an issue that caused problems on the Dreamcast port when a sprite was
  to be drawn where there was a high-priority background tile or a collision
  with another sprite (Fixes bug #1863690).
- Fixed an issue where a game could set the first pattern in a double-length
  sprite to be an odd numbered pattern (Fixes bugs #1864348 and #1864349).
- Fixed scrolling high priority backgrounds (Fixes bug #1864350).
- Execute one instruction before asserting the IRQ line when a vblank interrupt
  occurs (Fixes bug #1864693).
- Fix an issue where CRAM entries 8 and 24 would end up being listed as
  transparent in Game Gear mode (Fixes bug #1864712).
- Support double sized sprites in Mode 4 (Fixes bug #1864858).
- Add a VDP reset function and call it in the sms_reset function (Fixes bug
  #1864875).
- Made it so the VDP core actually has 16 registers (Fixes bugs #1864854 and
  #1864337).
- Optimized the part of the background drawing code that actually draws pixels.
- Merged the Dreamcast and Mac OS X versions of the drawing code together.
- Modified the sms_vdp_update_cache() function to improve efficiency.
- Fixed sprite positioning in TMS9918 modes (Fixes bug #1868206).
- Fixed TMS9918 multicolor mode detection (mode bits = 0x04, not 0x03).

SN76489 Core:
- Changed how stereo sound output is generated. Less branches = good.
- Added non-interleaved output functionality for the Dreamcast port.

GUI (Dreamcast):
- Fixed an issue where CrabEmu would crash after loading about 7 roms if you
  went back to the menu (Fixes bug #1863688).
- Added page up/page down functionality to the rom selection menu.
- Made it so that Game Gear games only show the part of the screen that would
  be visible on the actual system. I may make this a configurable option later
  on, since in some games the area outside the screen is actually used for
  something useful (yes, this is just copy/pasted from the Mac OS X GUI updates
  for 0.1.6).

GUI (Mac OS X):
- Added a VDP Debugger (currently, just a listing of registers).
- Pause from the Emulation menu while playing a Master System game does the same
  thing that pushing the pause button on the system does (raises a NMI). The old
  way of pausing with that menu option is used for Game Gear games still.

Other:
- Modified the mapper detection code to make it so that Ernie Els Golf is
  detected as using a Codemasters mapper (Partially fixes bug #1864868).
- Added support for the On-Cartridge RAM of Ernie Els Golf (Finalizes fixing bug
  #1864868).
- Support of the 93c46 EEPROM that was used by a bunch of baseball games for the
  Game Gear.
- Added code to detect if we're loading Pop Breaker, since it has an issue with
  running on a non-Japanese Game Gear (Fixes bug #1866732).
- Fixed an issue where a game might fail to read memory correctly if it read
  from a paged area before setting up the paging registers.
- Supported the byte-write "mode" of the 93c46 (or rather whatever feeds it)
  that is used by Nomo's World Series Baseball.
- Added a VMU Icon to the Dreamcast port's save files (Thanks to Cyle Terry for
  the icon image).
- Changed how mapping is done so that the writing function doesn't have to
  check the mapper for each write.
- Added support for the extra RAM that the SG-1000 game The Castle had on board.
  (Fixes bug #1868185).
- Added a function to use checksums (Adler-32 and CRC32) to classify roms with
  their mappers (when it cannot easily be detected otherwise).
- Changed how memory writes are handled to make it more like how memory reads
  are.
- Enabled sound output support on the Dreamcast port. Note, sound on the
  Dreamcast port is currently only Mono. Stereo sound has a much more dramatic
  effect on the framerate, so until other parts of CrabEmu speed up, this will
  stay as a stopgap measure.
- Changed the Dreamcast port to use non-blocking DMA for transfers of the video
  data.
- Removed conditional branches in controller code for the Dreamcast.
- Implemented 16-bit memory functions required for 16-bit memory access in
  CrabZ80.
- Cleaned up code for handling the Ernie Els Golf-specific cartridge RAM,
  merging it back into the main Codemasters mapper code.
- Changed all 8-bit memory write functions so that when a program writes to the
  paging registers the memory mapping only gets modified if the paging register
  will actually change values.

CrabEmu 0.1.6 : Released December 31, 2007

Z80 Core:
- Changed how CrabZ80 handles interrupts to more closely match how the actual
  Z80 does it. This change fixed the bug that caused Shining Force 2: Sword of
  Hajya to go into an infinite loop.
- Fixed a bug in CPIR that was added way back in CrabEmu 0.1.4. Basically, when
  I added the undocumented flag (XF and YF) calculation, I broke the repeating
  mechanism of CPIR. With this change, CrabEmu once again passes all the zexall
  tests.
- Made it so that one can compile CrabZ80 to use a bunch of big switches rather
  than the table of function pointers that it used to use. This mode can be
  switched on at compile time by defining CRABZ80_BIG_SWITCHES. Note, this is
  now the default mode of operation for CrabZ80 in CrabEmu.

VDP Core:
- Made the tile caching actually work. Previously, sms_vdp_update_cache didn't
  reset the dirty bit for the pattern that it updated. Now it does, as I
  originally intended it to. In my timing test code (removing the frame limiter
  as well as a few other minor changes) adding the one line of code that this
  change entailed increased the speed from around 260 FPS to about 760 FPS, an
  almost 3x increase in speed! (If you're interested in the timing test code,
  open up the Xcode project, and add TIMING_TEST to the Preprocessor Macros
  section of the Build tab of the project info. Also, note this timing info
  was done with Mac OS X 10.4 on a 2.0GHz Core Duo MacBook Pro and before many
  of the other changes in this version of CrabEmu, so YMMV)
- Added support for TMS9918 Mode 1 (Text mode).
- Added support for TMS9918 Mode 0 (Graphics I) backgrounds.
- Added support for TMS9918 Mode 3 (Multicolor) backgrounds.
- Added support for TMS9918 sprites (Modes 0, 2, 3).
- Added support for TMS9918 Mode 2 (Graphics II) backgrounds.
- Changed how the VDP handles asserting and clearing the IRQ line to be more
  like how it is actually done on the console.
- Fixed a buffer overflow in writing to the framebuffer (I can't believe that
  I didn't catch this one long ago).

GUI:
- Made it so that Game Gear games only show the part of the screen that would
  be visible on the actual system. I may make this a configurable option later
  on, since in some games the area outside the screen is actually used for
  something useful.
- Fixed a small glitch where the GUI would double its size a second time for a
  split second if you open a rom, set double size mode, and opened a new rom
  after that.
- When a Game Gear rom is loaded, the GUI now resizes to match the Game Gear's
  resolution, getting rid of a black border that would be displayed around the
  picture (since I made it only draw the part of the screen that is displayed).

Other:
- Started a testsuite of programs for CrabEmu (in the testsuite directory).
- Added test program for TMS9918 Mode 1.
- Added initial port of CrabEmu to the Dreamcast.
- When CrabEmu is paused from the GUI, sound is now stopped as well.
- When CrabEmu is reset from the GUI (or a new rom is loaded), the sound is
  reset now as well.
- Added support for the Korean mapper.

CrabEmu 0.1.5 : Released April 8, 2007

VDP Core:
- Fixed column 0 masking - random junk no longer shows up in the first column
  of the graphics.
- Added support for non-192 line modes. I've only tested 224 line mode, if
  someone knows of some game that uses 240 line mode, I'll test that as well.
- Fixed handling of Register 9 set during a frame. Register 9 isn't allowed to
  be changed in the middle of a frame, so now I correctly implement that
  behavior.
- Added support for vertical scroll disable on columns 24-31.
- Fixed handling of the display not being enabled. Now when the display is
  disabled, the screen will be completely the backdrop color, as it should be.

SN76489 Core:
- Added support for stereo sound. By default Master System games will output
  all channels on both the left and right speakers, whereas Game Gear games
  will control the output themselves (as they normally do on the hardware).

GUI:
- Associated CrabEmu with .sms and .gg files, allowing a user to double-click
  to open them, as well as dragging them onto CrabEmu's icon in the dock or
  in Finder.
- Split shared functionality from the three separate loading implementations
  (which all had almost identical code) into two separate methods that each
  one now calls, reducing a bit of clutter.
- Added an option to run in 50Hz PAL mode, which makes certain games that were
  actually optimized to run in PAL mode work correctly. Note that PAL mode must
  currently be selected BEFORE you run any games. To revert to NTSC mode you
  have to restart CrabEmu after you've started a game. If you haven't started a
  game yet, you can go back to the menu and change it again.
- Fixed an issue with setting CrabEmu to be double sized, and then reverting it
  to normal size.

Other:
- Added support for the Codemasters mapper.
- SRAM saving now occurs either when a new rom is loaded or when CrabEmu is
  closed. You can still save it at a different time by using the option in the
  menu though.

CrabEmu 0.1.4 : Released February 22, 2007

Z80 Core:
- Added a Z80 Disassembly function to help with debugging
- Fixed the LD A, I opcode to behave correctly.
- Fixed several opcodes so that they calculate the undocumented
  flags in the F register.
- Added a function to release the current cycles, stopping execution at the end
  of the current iteration of the main loop (Requested by Donald Haase, for a
  project he was using CrabZ80 as a part of).

GUI:
- Added a Z80 debugger.
- Added option to render at double size.
- Fixed bug with rendering at double size, then loading a new rom.

SN76489 Core:
- The SN76489 doesn't change output states from 1 to -1 if the tone is less than
  7. Correcting this behavior fixed the "Sega" at the beginning of Sonic the
  Hedgehog 2 for the Game Gear, and probably other games too.
- Implemented the noise channel of the SN76489, once again, thanks to Maxim's
  documentation on the chip.

Other:
- Vastly improved synchronization. Now CrabEmu will not run at more than 60FPS,
  no matter how much it wants to.
- Added SRAM saving support. These get stored in the same directory as your
  roms.
- Added Save States. You get up to 6 per game, and they are stored in the same
  directory as your roms.

CrabEmu 0.1.3 : Released February 22, 2006

Z80 Core:
- Split the opcodes out of the main file to reduce clutter.

GUI:
- The "black bar" at the bottom of the screen is gone.
- Rendering is now done with OpenGL rather than Quartz.

Other:
- Fixed sound on x86 macs.
- Fixed project files so that the ppc version of CrabEmu compiles
  with GCC 3.3 rather than 4.0.
- Cleaned up the code considerably (-Wall -W -Wno-import (and for
  some files -Wno-unused-parameter)) is used to compile with no
  warnings at all.

CrabEmu 0.1.2 : Released January 15, 2006

Z80 Core:
- Officially adopted the name of CrabZ80, renamed several functions,
  flags, and structures to represent the change.
- Fixed an issue with the RLD instruction where it was dead wrong.
- Rewrote the Z80 core using function pointers. It may mean a larger
  compiled object, but it also makes maintenance much easier.
- Fixed the C flag calculation for RLA.
- Added in emulation of MANY DDCB/FDCB instructions.
- Fixed the fact that undefined DD and FD instructions should do
  the same thing as if the prefix was not there.
- Fixed the timing of CP A, IXh/IYh and CP A, IXl/IXh.
- Fixed P/V flag calculation for CPI and CPD.
- Fixed C flag calculation for RLD.
- Cleaned up the RLCA, RRCA, RLA, and RRA instructions, fixing a
  bug in the process.

GUI:
- Changed ROM loading to fix loading one after another.
- Changed ROM loading to start the emulated system automatically.
- Removed the Start Master System option, as it is not needed.
- Gave the Preferences dialog some editable preferences :).

Other:
- Added support for loading a rom after one has been loaded and
  is running.
- Added support for two players (at one keyboard).

CrabEmu 0.1.1 : Released December 31, 2005

Z80 Core:
- Added Emulation of previously non-functioning DD and FD prefixed
  opcodes.
- Added emulation of the DDCB and FDCB-prefixed SLL instructions.
- Fixed a bug in INC IXh/INC IYh that caused the carry flag to be
  calculated incorrectly.

VDP Core:
- Added support for the flag that disables horizontal scrolling on
  rows 0 and 1 of the background layer.
- Added support for the Game Gear palette system.

SN76489 Core:
- Added a SN76489 core based on Maxim's documentation on the chip.

GUI:
- Added options relating to sound (Disabling it all together,
  disabling certain channels).

Other:
- Added support for the Game Gear Start button, and somewhat
  support for Game Gear-specific port registers.
