CrabEmu v0.2.0 - 模擬器

Faithe avatar
By Faithe
at 2013-03-01T21:11

Table of Contents

http://crabemu.sourceforge.net/

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


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.


--

All Comments

Donna avatar
By Donna
at 2013-03-02T19:41
有SMS必推

梭哈

Robert avatar
By Robert
at 2013-02-27T18:37
請問在以往的PC或家用電玩 有無大畫面的梭哈遊戲? 想問一下單機類型不要連上網的 求遊戲名稱就好 我自行搜尋即可 印象中有款歡樂梭哈 但已找不到檔 如有人持有 方便的話請提供一下 感謝 - ...

看遊戲GAME OVER來學A~Z(爆雷注意?)

Poppy avatar
By Poppy
at 2013-02-27T15:29
A是被一刀捅死的Aerith... http://images.gamme.com.tw/news/2013/02/4/q56TpKCbkaeVp6U.jpg B是沒事在家蓋座吊橋幹嘛呢的庫巴Bowser http://images.gamme.com.tw/news/2013/02/4/q56TpKCek ...

(WinUAE) AMI.G.U.LA. v1.6 final

Michael avatar
By Michael
at 2013-02-27T14:58
2013.02.26 AMI.G.U.LA. (Amiga Games UAE Launcher) is a WinUAE frontend. -- This update introduces a new feature and a performance improve ...

你看過沒用OR無人性考量的遊戲設計?

Thomas avatar
By Thomas
at 2013-02-27T01:38
小學的時候玩魔獸爭霸2劇情。 有一關的條件是要到搭船去離島蓋兩座以上的指定建築… 因為都是英文看不懂過關要求,反正覺得就是把敵人全滅麻。 結果整地圖的連金礦木頭石油都被我採光光還是過不了。 於是我拿起書房裡的英文字典開始了我對字典的第一次。 但是因為任務說明裡面的建築都是玻璃渣自己獨有的單字根本 ...

Pocket 掌上機連動後的創意巧思

Valerie avatar
By Valerie
at 2013-02-26T19:42
本文本來是PO在Pocket與Old-Game板,但應PTT板友私信之邀也PO來模擬器板。 若是不適合PO在模擬器板還請告訴我,再自行刪除之,謝謝! 一、前言   上個世紀末90年代後期,可說是日本各大廠掌機戰國年代,紛紛推出掌機與類掌機。 各家掌機大廠的訴求,無不是想用最低的資源發揮到最大創意。 掌 ...