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.