Subject: CVS commit: wip/crabemu
From: othyro
Date: 2013-03-29 04:12:05
Message id:

Log Message:
Updated crabemu to 0.2.0. Binary is now all lowercase. Build uses cmake now
instead of qmake. pre-configure stage is no longer necessary. LICENSE was
greatly expanded. Package now uses the options framework for the bzip2, debug,
opengl, qt, sdl, vdp32, and zlib PKG_OPTIONS. OpenAL support was dropped.
pthread is now required. All package options test good. This package is
likely ready to import into HEAD after the freeze.

>From the CHANGELOG:

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

- 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 \ 
  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:
- 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
- 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

- 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.

- 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
- 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
- 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.

- Added an SDL port. Uses SDLAudio, SDL surfaces for rendering, and SDL for
- Added a file browsing menu.
- Added ColecoVision support.

- 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
- 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.