SnezziDS

From GameBrew

SnezziDS
Nds.png
General
Authorbubble2k, Gary Linscott
Last Updated2006/12/13
TypeConsole
Version0.28a
LicenseMixed
Links
Website
Source

SnezziDS is a port of Snezziboy, an SNES emulator for the GBA, to the Nintendo DS platform. Up to v0.25a, Snezziboy was originally coded by Bubble2k while the NDS port was made by Gladius. Starting with the WIP builds of v0.27 however, Bubble2k played a more active role in SnezziDS's development. The latest release of the DS version is a joint effort of both developers.

Note: Please check both discussion threads from GBAtemp and SceneBeta beforehand and use at your own risk should you choose to do so. Download link has been removed and it is recommended to use SNEmulDS instead.

Features

  • Larger screen size - less scaling necessary.
  • Better game speed.
  • Sound emulation possible.
  • More buttons available - "CTRL" key unnecessary.

Installation

Copy the SNES ROM file (.smc, .fig, .swc, etc) into the same folder as the snezzi.exe.

In the command line in a DOS box, issue the following command: snezzi SNESGAME.SMC (Alternatively, in Windows Explorer, drag the SNESGAME.SMC file onto the snezzi.exe file).

An output file SNESGAME.SMC.gba will be created in the same folder as the SNES ROM file.

Copy the SNESGAME.SMC.gba file into your flash cartridge as described in your flash cartridge manual, load it up into gameboy and run it (For Supercard users, please run the .gba file through the Supercard patcher before playing. It is recommended to turn all options off except Compress).

User guide

During the game, use (L+R+start) to access the configuration menu.

Compatibility list

As at 28 May 2006, the following games are known to be working fairly well:

Castlevania X
Super Castlevania 4 (no mode 7 graphics yet)
Gradius 3
Megaman X
Megaman 7
Darius Twin
Super Mario World (some garbled/missing graphics)
Super Mario All-Stars (Super Mario Bro, The Lost Worlds)
Kirby's Avalanche (some garbled graphics)
Tetris Attack

Screenshots

snezzids.png

Changelog

v0.28 DS
DS-specific Fixes and Features:

  • Overhauled the graphics engine to make use of the DS VRAM (most games have less graphical glitches now).
  • Implemented Mosaic effect.
  • Aligned the SNES ROM to 64KB boundary (Chrono Trigger now works like Snezziboy on the DS).
  • Modified Snezzi builder to allow building of 32Kbyte ROMs (32Kbyte Demos seem to work fine noW).
  • Reallocated memory to various parts of the ITCM/DTCM/VRAM.
  • Implemented line-by-line mechanism for the following graphic registers:
    • Horizontal/Vertical scroll offsets.
    • Background disable/enable (hide/show).
    • Tilemap address.
    • Screen brightness.
    • Screen transparency.
    • Screen mode (allows mid-frame switch between screen mode 1-6 to screen mode 7 and back).
      • (Does not support mid-frame switch between modes 1-6 to modes 1-6).
      • (Chrono Trigger works fairly well aside from backgruond priority issues, which causes any game screen that has a warp zone to fill up with white/blue circles, 16x16 tiles are still not supported).
    • Mode 7 rotate/scaling registers (F-Zero is playable!).
  • Fixed Megaman7/XMen speed problems by protecting the ROM region, and allowing only Read access. (Previous it was allowing Read/Write access).
  • Implemented delayed NMI/IRQ triggered. NMI/IRQs are now triggered 4 SNES clock cycles after the point in which they are fired. (Chrono Trigger intro now gets past the Courtroom Trial Scene, and possibly some other lock ups).
  • Fixed a bug with the writing to register $211A (Contra 3 title screen/Castlevania 4's bridge now works again).
  • Fixed a bug when reading from $2137 register that causes the horizontal and vertical counters to latch incorrectly.
  • Fixed a critical bug with the MVP instruction to load the source and destination banks in the correct order.
  • Fixed a critical bug with the MVP instruction to decrement the X and Y registers per move (previously it was incrementing the X and Y registers.
  • Revised the per scanline timing downwards:
    • FastROM: 227 cycles.
    • SlowROM: 200 cycles.
  • Fixed the 16-bit decimal mode SBC to subtract correctly; operand was previously incorrectly set up (Knights of the Round no longer gets stuck at the score countdown screen).
  • Fixed computation of the Mode 7 registers to the GBA's/DS's rotation modes (Super Soccer's intro where the ball flies toward the screen shows up correctly now).

v0.26

Fixes and Features:

  • Fixed a small bug in the debug version, as the horizontal cycles was not showing up correctly.
  • Fixed transparency so that it is disabled if the register $2130 disables all color math (Fixes the screw up in Aladdin).
  • Fix code skip for WAI/STP/WDM instructions so that if the player does not enable HDMA through the Snezziboy configuration, then the code skip selects the fastest skipping mode.
  • Fixed a critical bug in the mechanism that supports the intra-frame update of background scroll position. The bug, which crashes the emulator at worst, or screws up some layers at best, only occurs after about 65535 SNES frames have been completely rendered, or roughly 18 minutes into gameplay, assuming the game runs at full 60 fps without slowdown.

v0.25

Fixes and Features:

  • Fixed a bug with the reading of registers $2137/$213C/$213D(Final Fantasy Mystic Quest is able to proceed to the title screen).
  • Fixed a critical bug with the MVN/MVP instructions to handle the A register correctly in 8-bit mode.
  • Fixed a DMA bug so that the incrementing of the source address does not affect the address bank (Final Fantasy Mystic no longer crashes and now seems playable).
  • Fixed a bug with the DMA transfer to correctly increment the source address depending on the DMA increment mode (Secret of Mana no longer crashes before the first dungeon).
  • Fixed a bug with the RESET function that causes backgrounds remain stationary after using the configuration's RESET option.
  • Fixed the SBC instruction to take care of decimal mode subtraction (uses modified code from SNES Advance)(Zombies ate my Neighbors is now playable).
  • Fixed Mode 7 where there was once a band appearing at the top of the screen.
  • Fixed (partially) SNES additive transparencies.
  • Implemented Mode 7 wraparound based on register $211A.

HDMA:

  • Implemented partial HDMA for background scrolling positions.
    • (Donkey Kong 3, first level moves as expected).
    • (Street Fighter 2 background moves as expected).
    • (Castlevania X first level background effects visible).
    • (HDMA is slow on the GBA and is expected).
  • Implemented new option to enable/disable HDMA (for games that don't necessarily require it).

Optimizations:

  • Made slight optimizations to instructions that operate on the A register,and certain jump instructions.
  • Made major optimizations to all instructions to remove instruction to add to SnesPC register (Credit to Gladius for the suggestion; most games should experience a slight but notable increase in speed).

v0.24 (Quick Fix Release)

Fixes and Features:

  • Quick fixed a minor problem in the header detection algorithm in the Snezziboy builder (This may require a more proper fix later).
  • Fixed a bug with the XCE code that was emulated wrongly.
  • Fixed the VRAM allocation so that Illusion of Gaia works correctly again.
  • Remove the wraparound bug that causes clones of Samus' ship during the Super Metroid demo.

v0.23

Fixes and Features:

  • Fixed a critical bug with the register reads and writes (might be slower).
  • Improved cycle counting (again) for block move and DMA operations.
  • Added feature to handle mid-frame change of background offsets (Able to see water in Super Mario World, Able to see scrolling clouds in Super Mario All Stars: Super Mario Bros, Able to see fixed status panel in Super Mario All Stars: Super Mario Bros 3, Able to see scrolling name entry in Zelda: A Link to the Past).
  • Fixed reading register $4212 to indicate auto-joypad read status.
  • Fixed writing register $4016 to reset only when the correct bit is set.
  • Fixed joypad registers to send joypad input only from the first controller.
  • Fixed HiROM mapping.
  • Added Mode 20/21 ROM Access Speed.
  • Fixed a bug with the INC/DEC opcode that was previously returning the wrong flags (This fixes Super Mario Bros 2's glitch where the character suddenly warps to the top of the screen).
  • Fixed messed up colors when in 256-color palettes.
  • Fixed fading to use always the brightest fade color per frame.
  • Slightly improved VRAM allocation for background graphics.
  • Implemented Mode 7 Graphics.
  • Added more configuration options:
    • FORCED BG MODE.
      • AUTO, MODE 1, MODE 2,... MODE 7.
    • VRAM BG ALLOC.
      • SMART - Don't allocate for disabled BGs may see less garbled graphics,slow refresh on every enabling/disabling/flicker of BGs.
      • FAST - Allocate for disabled BGs may see more garbled graphics fast flickering of BGs (needed by games like Megaman 7).
    • VRAM OBJ ALLOC.
      • SHARED - Shared with BGs (may result in less space for BG graphics).
      • EXCLUSIVE - Not shared with BGs (allows more space for BG graphics).
  • Added Quick Configuration Feature:
    • L+R+SELECT+UP: Cycle through the following BG Priority Sets.
      • set 1 = (P1, P2, P0, P3)
      • set 2 = (P2, P1, P0, P3)
      • set 3 = (P0, P1, P2, P3)
      • set 4 = (P1, P0, P2, P3)
    • L+R+SELECT+DOWN: Cycle through the FORCED BG MODEs.
      • opt 0 = as required by game.
      • opt 1-7 = the respective modes.

v0.22

Bug Fixes:

  • Fixed the JMP ($xxxx) and the JML [$xxxx] instruction to read the indirect addresses from bank zero instead of the current data bank (Aero fighters now work).
  • Shifted the horizontal offset by 8 pixels to the right so games now look generally centralized.
  • Modified the IO for WRAM write at IO addresses $2180-3 to behave as Snes9x.
  • Fixed the interrupts to push the correct program counter onto the stack, and the RTI instruction to pop the correct program counter from the stack (Earthworm Jim now works).
  • Fixed the $213C/D registers to generate the H/V counters correctly (Zelda-A Link to the Past now works, though in the name entry screen, the name selection still does not move, and in-game text is invisible).
  • Fixed the COP instruction to fire a COP interrupt (Illusion of Gaia now intros correctly).
  • Fixed the MVP/MVN instruction to increment the cycle counter correctly.
  • Fixed the DMA such that source DMA address is incremented and the DMA size is set to 0, after each DMA channel read/write is complete (Contra's intro and in-game background tiles display correctly now) (FF2 non-mode 7 backgrounds now displays correctly) (Illusion of Gaia title screens appear).
  • Added rendering for Modes 4 and 5 (Secret of Mana name entry screen requires mode 5, and now appears better. Due to double horizontal resolution though, the text appears but remains unreadable).
  • Added the $2139/A registers to read the VRAM (Illusion of Gaia seems to works perfectly) (MegamanX, Megaman7 screens get restored after pressing start).
  • Added option for enabling backdrop(With this option set to Yes, Super Mario World backgrounds will not appear black).

Others:

  • Provided additional SnezziDebugger.exe that can be used to debug SNES games to search for speed hacks, SPC patches and other patches.

v0.21

Bug Fixes:

  • Fixed the TSC instruction so that the C register is updated regardless if M bit.
  • Fixed the TDC instruction so that the C register is updated regardless if M bit.
  • Fixed the RTL/RTS/RTI instructions so that it can properly return from the subroutine that had been JSL/JSR-ed from $xx:8000.
  • Made fixes in the memory map for games with no SRAM size, so that ROMs that try to detect for absence of SRAM (protection against copying) will get what they expect. (Bust-a-move makes it to the main screen, but the game itself is unplayable due to the use of HDMA).
  • Made fixes to the $DB (modified STP instruction) to jump correctly (Tetris Attack now works).
  • Fixed the PEI instruction; it was previously pushing $0000 always onto the stack.
  • Fixed BIT instruction to update the N/Z flags correctly when BIT-ing in a non-immediate mode (Super Mario World fades correctly after each stage) (Megaman7's collision detection is now accurate).
  • Fixed register $4016 for joypad auto-reading and latching (Donkey Kong Country now recognizes joypad input).
  • Reworked SRAM reading and writing routines (Donkey Kong Country seems playable; some screens are remain garbled).
  • Fixed bug with VRAM writing (Darius Twin's in-game screen no longer garbles-up randomly).

Known Issues:

  • Breath of Fire I keeps flickering, and runs very slowly.
  • For some reason, sprites seem to be 'flickering' on many games.

v0.2

Bug Fixes:

  • Fixed the TXS instruction so that processor flags are not updated.
  • Fixed the IO for WRAM write at IO addresses $2180-3 (Megaman7 sprites now appear).
  • Incorporated SNES Advance's SBC/ADC accurate implementations (Super Mario World now works).
  • Used a jump table to implement scanline skipping for $42 and $DB opcodes.
  • Fixed scanline skipping to proceed to the next immediate interrupt when NMI, V+H IRQ is enabled (MegamanX, Megaman7 runs faster).
  • Fixed 256 color background update (for mode 3) (Super Mario All-Stars title and menu selection now visible, Super Mario Bros, The Lost Worlds subgames entirely playable with appropriate speed patch).
  • Fixed VRAM allocation for modes 2 and above (able to see blobs that have been dropped on the field).

Known Issues:

  • VRAM writing sometime still screws up (Kirby's avalanche: can be worked around by pressing L+R+start to go to the config, and exiting the config screen again).

v0.1a

  • Included snezzi.gba emulator core into the v0.1 package.

v0.1

  • First release, no changes.

Credits

Flubba, Loopy - For their bold attempt in SNES emulation on the GBA.

anomie - For the SNES documentation on IO registers and timings.

ZSNES Team - For the ZSNES emulator.

Snes9x Team - For the Snes9x emulator.

External links