2013-03-01

CrabEmu v0.2.0

EmuCR: CrabEmuCrabEmu v0.2.0 is released. CrabEmu is primarily a Sega Master System emulator for Mac OS X, Linux and Sega Dreamcast. Several other related platforms are emulated with varying degrees of accuracy (Game Gear and SG-1000 currently) as well as some not-so-related consoles (NES and ColecoVision). The eventual goal of the CrabEmu project is to emulate many different systems, and do it not only quickly, but also accurately.

CrabEmu is designed with portability in mind. The base of CrabEmu is written in C (specifically C99, if you're actually interested in that kind of stuff). The user interface of CrabEmu is the only part that would actually need much porting to put CrabEmu on a platform other that Mac OS X. In fact, CrabEmu also has been ported to the Sega Dreamcast as well as Linux (with Qt for the GUI).

CrabEmu v0.2.0 Changelog:
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 haveto rely on zlib for them.
- Made zlib and bzlib optional in the CMake build.

EmuCR: CrabEmu

Download: CrabEmu v0.2.0
Source: Here


0 Comments

Post a Comment