Notes:
The SNES emulator with the extra e's...
SSSSS NN NN EEEEEE SSSSS
SS SS NNN NN EE SS SS
SS NNNN NN EE eeee SS eeee
SSS NN NN NN EEEEE ee ee SSS ee ee
SS NN NNNN EE eeeeee SS eeeeee
SS SS NN NNN EE ee SS SS ee
SSSSS NN NN EEEEEE eeee SSSSS eeee
v0.80 (Public BETA)
16 May 2003
Please read the license (LICENSE file) before using or distributing
SNEeSe in any way!
This release is dedicated to the memory of the departed Scape, a young
Korat kitty with a sense of fairness, who showed love to all, and
malice to none, even to cats who showed aggression towards him...
you will be missed...
NOTE:
This release has SPC emulation, it may get some ROMs to work that would
not with APU skipper.
This release also has sound, but the sound may be unstable.
Send critical bug reports (this is, report only the ROMs that crash the
emulator) to: esaelon@users.sourceforge.net
Please list the ROM, ROM filename, the settings you were using in the
emulator, when it crashed, etc. Thanks for the help!
Credits
"""""""
New development
Core & DOS/Win32 Port Developer/Maintainer
Charles Bilyue' (TRAC) esaelon@users.sourceforge.net
Unix/Linux/BeOS Port Developer/Maintainer
Daniel Horchner dbjh@gmx.net
Assistant Developer (Sound system emulation)
Brad Martin bmartin@umr.edu
http://home.gvi.net/~martin
New logo
stainless
Old logo
neptron http://ciot.pair.com/neptron/
Allegro library http://alleg.sf.net/
Former SNEeSe team
Project founder
Lee Hammerton (Savoury SnaX)
Original logo
Windwalker
GUI improvements, testing
Santeri Saarimaa (Gridle)
Assistant developer
Charles Bilyue' (TRAC)
Sound system emulation
Lee Hammerton (Savoury Snax)
Brad Martin
archeide
Shawn Hargreaves & Co. - Allegro library!
- Thanks, Greets, and News moved to end of file
Also try:
FakeNES, a CVS open-source portable NES emulator in POSIX C with builds
available for DOS, Win32-DirectX and Linux, by stainless, RobotBebop,
TRAC, and Lord_Nightmare. http://fakenes.sourceforge.net/
System Requirements
"""""""""""""""""""
Here is a rough guide to the things you need to run this emulator:
- A 486 or better CPU. Preferably better, as SNES emulation is
computationally intensive, involving at least two CPUs, a
complex audio DSP and complex video hardware.
- Roughly 4-8 MB of memory free, dependant on ROM size.
- Some SNES ROM images to try out. I will NOT give images due to ethics
and copyright laws. Don't waste our time asking.
-- DOS --
- A PC running MS-DOS or Win9x (95/98/ME).
- VGA-compatible graphics card capable of mode 13h for the following
8-bit display modes:
320x200
320x240 Mode-X - 256x239
- SVGA graphics card (either with native VESA 2 support, or with a driver
providing VESA 2 support, such as UniVBE or Scitech Display Doctor)
for the following display modes:
8-bit using linear framebuffer
320x240
16-bit using linear framebuffer
320x200 - 320x240
640x480
Note that the 16-bit modes are slower and there is currently no
advantage to using them!
- A reasonable monitor (if you want to use the 256x239 or Mode-X modes!).
- A sound card from the following list for sound output (compatible cards
may work):
Ensoniq Soundscape;
ESS AudioDrive;
Sound Blaster (SB1.0, SB1.5, SB2.0, SB Pro, SB Pro 2.0, SB16);
Windows Sound System.
-- Win32 --
- A PC running 32-bit Windows (Win9X/ME/NT/2K/XP, etc.), with
DirectX 5 or above.
- A video adapter with DirectX-compatible drivers.
- A sound output device with DirectX-compatible drivers, for sound output.
-- Linux/Unix --
- A PC running X (windowing system), with Allegro 4.0 or above.
- A video adapter compatible with X; improved performance may be achieved
by having DGA(2) support and the necessary privileges to access it.
- A sound output device compatible with OSS, ESD, or ALSA, for sound
output.
-- BeOS --
- A PC running BeOS R5 PE, with Allegro 4.1 or above. Other versions of BeOS
might also work.
- A video adapter supported by BeOS.
- A sound output device supported by BeOS.
The config file
"""""""""""""""
A config file is used so SNEeSe remembers what state it was in when the
user quit. It can be edited with a text editor for those interested, but
most options can be changed inside the GUI, with less hassle...
If you want to change the standard .SRM extension for Save RAM files
(perhaps to prevent corruption of saved files, in case of bugs) simply
edit the SNEeSe.CFG file with a text editor and change the line:
saveextension=SRM
to
saveextension=RAM
to use the .RAM extension, for example.
If you want to use a fixed save directory for your Save RAM files instead
of the same directory of the ROM (to keep all your ROM directories from
getting cluttered, and to be able to use Save RAM with ROMs on read-only
media such as CD-ROM), edit the SNEeSe.CFG file and add the line:
savedirectory=D:\SRAMDIR\
replacing 'D:\SRAMDIR\' with the save directory you wish to use.
The directory specified MUST exist - if not, it will not be created,
and SRAM loads and saves will simply fail without warning.
(note: the trailing slash is not required and may be omitted)
The GUI
"""""""
The GUI can be opened by pressing ESC during emulation. From here you
can RESUME emulation, RESET the emulation, LOAD a new SNES ROM into
the emulator, setup some CONFIGURATION options (see below), get various
infos about the loaded ROM and current emulated hardware state, and EXIT
the emulator. Pressing ESC while in the GUI closes the current window,
if the last window is closed, emulation resumes. To move the bar use the
cursor UP/DOWN controls, to choose an option press ENTER (either one
will do).
In the file loading window:
PAGE UP and PAGE DOWN allow you to travel through the listing a window
at a time;
HOME will go to the top of the list;
and END to the bottom of the files/directories (first press),
then to the bottom of the drives (second press).
There is no exclusion by extension, and no jump-to-pressed-letter in
the file loader yet, and LFNs are truncated... sorry, but will fix
all of these soon!
The CONFIGURATION menu allows you to change some features of the
emulation as follows:
???x???x??? - The first option in the list will
show the current emulation resolution.
When you press ENTER a window will open
allowing you to choose a new resolution.
If the resolution cannot be set, it will
revert to standard 320x200x256 mode.
Configure Controllers - Brings up the CONTROLLER CONFIGURATION menu.
Configure Sound - Brings up the SOUND CONFIGURATION menu.
Min Frameskip: ? - You can modify the amount of frames to
Max Frameskip: ? skip by pressing left or right arrow.
Default is 4 for maxframeskip (show at least
every 4th frame), 0 for minframeskip.
Max Frameskip sets the maximum number of frames that will be skipped
before a frame is drawn.
Min Frameskip sets the number of frames that will always be skipped before
a frame is drawn. a min skip of 0 tells SNEeSe to wait for at least one
timer tick (50/60Hz) to have passed before emulating a frame (to slow
down machines that are running too fast)
Min Frameskip will never be above Max Frameskip. In the config file,
'maxframeskip' has precedence over 'minframeskip'.
Setting Min Frameskip and Max Frameskip to the same number effectively
disables all speed-throttling.
Emulate SPC - Toggle SPC emulation/skipper. SPC emulation
Skip SPC must be enabled with below option for sound.
FPS counter: on or off - Toggles the on-screen FPS counter in the
top-right corner of the screen (note:
this counter is sometimes difficult
or impossible to see).
The CONTROLLER CONFIGURATION menu allows you to change some features of
the controller emulation as follows:
Joypad on player 1 - This option toggles emulation of joypad
Joypad on player 2 - or mouse for the respective controller
port.
Define keys for player 1 - These option lets you redefine the keys
Define keys for player 2 - for the joypad on the respective controller
port. It shows a nice picture of the SNES
joypad and asks the keys. You can press
ESC anytime to stop redefining.
If you have a joystick/joypad connected to
your computer, and it is currently
supported by Allegro and SNEeSe under
your platform, you can press directions or
buttons on the controller to map to it
instead of the keyboard.
Key mappings are shown as a name for the
key. Joystick mappings are a bit more
complicated, few examples follow.
'J1S1A2-' would eb the negative direction
of axis 2 on joystick 1, stick 1; typically,
the vertical axis of the main stick.
'J2B4' would be button 4 on joystick 2.
The SOUND CONFIGURATION menu allows you to change some features of
the sound emulation as follows:
Sound Enabled - Enable/disable sound output when
emulating the SPC. Also used to select
mono or stereo emulation.
Sample Size - Select sample size of samples output by
audio emulation (8- or 16-bit).
Echo/FIR filter - Toggles emulation of the SNES audio echo
and its corresponding FIR filter.
Gaussian filter - Toggles emulation of the 4-point pitch-
regulated gaussian interpolation of
sample data.
ENVX reading - Toggles reporting of current ADSR/GAIN
volume envelope heights to sound CPU,
in case some ROM has a problem with it.
Readme or don't bother e-mailing me
"""""""""""""""""""""""""""""""""""
When you attempt to use a ROM you should take note of any information
displayed on the screen. For instance, if a ROM just bombs back to DOS,
and all the information displayed looked like rubbish, the ROM image
format may not be supported by the emulator (split ROMs, certain
interleaved ROMs, certain memory maps), the ROM may be corrupted,
or the ROM may have hit a bug in the emulator.
To start the emulation, type SNEESE and then the file name of the ROM to
load, or with no filename to go straight into GUI (you can load a ROM from
the GUI, but it's painful!)
SNEESE thisrom.smc
You may also try any combination of the following switches:
Memory map:
-fl Force LoROM memory map
-fh Force HiROM memory map
ROM format:
-fi Force interleaved ROM (only supported for HiROM)
-fn Force non-interleaved ROM
Copier header:
-h Force ROM copier header
-n Force no ROM copier header
Video standard:
-fvp Force PAL video standard
-fvn Force NTSC video standard
Audio output:
-ds Disable sound
-s Enable sound (stereo)
-sm Enable sound (mono)
Video output:
-m# Set screen mode
Available screen modes:
DOS:
0:320x200x256 VGA 1:320x240x256 VESA2 2:320x240x256 MODE-X
3:256x239x256 VGA 4:320x200x16b VESA2 5:320x240x16b VESA2
6:640x480x16b VESA2
Win32, Unix & BeOS:
0:320x200x256 WIN 1:320x240x256 WIN 2:320x240x256 FS
3:256x239x256 WIN 4:320x200x16b WIN 5:320x240x16b WIN
6:640x480x16b WIN 7:640x480x16b FS
Paths and files:
-saveext RAM Set extension for save RAM files
-savedir .\saves Set save directory
Performance:
-pt Disable cache preloads -pt2 Disable cache preloads (alt)
-pb Enable cache preloads -pb2 Enable cache preloads (alt)
-pm Enable MMX support -pf Enable FPU copies
-pd Disable MMX/FPU support
Options:
-fps Start with frames-per-second (FPS) counter enabled
-gui Enable GUI
-cli Disable GUI
If two or more switches conflict, the last switch takes priority.
Once the ROM title is displayed, press a key to start the emulation.
If the GUI is enabled (default):
To pause the emulation and enter the GUI, press ESC. The GUI will pop up
and allow you to return to the emulation, reset the emulation, load
another ROM, reconfigure the emulator, display information about the
ROM, or exit the emulator. Use the cursor and ENTER keys to navigate
through the menus.
If the GUI is NOT enabled:
To exit the emulation, press ESC.
Regardless of whether GUI is enabled or not:
To break out of the emulator (quick-exit) press Ctrl-Alt-End.
Use this if the emulator stops responding to input (including ESC).
If you have any helpful information on DSP, SuperFX, sound, bug fixes,
or any other emulation or general improvements, and would like to
send me some constructive comments or help (NOT - are you gonna have
DSP/FX/better sound/better graphics/more speed/etc., when for the same)
feel free to e-mail me at:
esaelon@users.sourceforge.net
Or you can visit the SNEeSe homepage at:
http://sneese.n3.net/
http://www.emuunlim.com/sneese/
http://skyscraper.fortunecity.com/online/312/sneese.html
The source code for this release of SNEeSe should be available at the
homepage.
Any email about obtaining copyright ROMs will likely be forwarded to the
appropriate authorities, so don't waste our time!
About the performance switches
""""""""""""""""""""""""""""""
Switches -pt (preload_cache=0 in the config file) and -pb
(preload_cache=1) control if data areas that are expected to be written
to will be preloaded into the host CPU's internal cache before they are
used. This is likely to help performance on CPUs with a 64-bit data bus,
a write-back internal cache and no write-allocation. Such CPUs include
original '586' Intel Pentiums, both with and without MMX, and possibly
other CPUs for similar mainboards, such as AMD K5s.
Switches -pt2 (preload_cache_2=0) and -pb2 (preload_cache_2=1) control
a limited form of the above, that should help performance on most or all
CPUs with a write-back internal cache and no write-allocation. Such CPUs
include 486DX4s, write-back enhanced 486DX2s, Pentium Overdrive CPUs for
486 systems, AMD 5x86s, and similar CPUs.
'preload_cache' and 'preload_cache_2' both default to enabled if the
detected CPU family is 5, representing Intel Pentium and similar CPUs.
Switches -pm (use_mmx=1), -pf (use_fpu_copies=1), and -pd (use_mmx=0,
use_fpu_copies=0) control usage of MMX instructions, and usage of the
FPU for copying data.
MMX instructions will be used if MMX support is detected and 'use_mmx' is
enabled. 'use_mmx' defaults to enabled if MMX support is detected.
The FPU will be used for copying data if an FPU is detected and
'use_fpu_copies' is enabled. This is faster on original '586' Intel
Pentiums without MMX. 'use_fpu_copies' defaults to enabled if an FPU
is detected, if MMX is NOT detected, and if the detected CPU family is 5,
representing Intel Pentium and similar CPUs.
What can SNEeSe do in this version?
"""""""""""""""""""""""""""""""""""
Emulation details:
- 65c816-alike 5A22 main CPU with 254/256 opcodes implemented.
The last two (WDM and STP) remain unimplemented since they
do nothing important and can help detect runaway ROMs!
- NMI/IRQ interrupts running (timings are a little out).
- Hblank/Vblank CPU timing.
- Partial SlowROM/FastROM support (fixed-cycle, buggy).
- DMA and HDMA, all 8 channels, modes 0-4 (5-7 supported but possibly
incorrect), HDMA may have some bugs. DMA timing is not implemented.
- SPC700 sound CPU with 250/256 opcodes implemented, running with
on-demand execution.
BRK/RETI, BCD (DAS/DAA), SLEEP/STOP remain unimplemented.
- Partial sound DSP support and sound generation, including accurate
emulation of the 4-point pitch-regulated gaussian interpolation of
sample data, OUTX/ENVX registers, pitch modulation, and the echo
effect and its corresponding FIR filter.
- LoROM and HiROM memory maps (up to 32Mbit).
- ROM loader supporting whole and split (*.1) ROM images, LoROM,
HiROM, and interleaved HiROM, with or without 512-byte copier header(s)
- Most hardware registers emulated.
- SNES joypads 1 and 2 and mouse are supported.
- BG modes 0-7, 8x8 and 16x16 tiles, X/Y flip, palette mapping,
scrolling, tile priorities.
- Full offset change support in modes 2, 4, and 6 (mode 6 support
not properly tested).
- Partial wide-tile support in modes 5 and 6 (odd pixels are skipped).
- Partial priority-per-pixel support in mode 7 (may still have bugs).
- Dual window clipping with all logic modes in BG modes 0-6.
- Full mosaic effect in BG modes 0-7.
- Screen sizes 32x32, 64x32, 32x64, and 64x64 supported.
- Sprites are supported in all sizes (8x8, 16x16, 32x32, 64x64), with
name and base select, priority rotation, correct sprite-to-sprite
priorities, and correct time/range limitation.
Extras:
- Independent optional stretching of screen in horizontal and vertical
directions.
- Speed-throttling with speed-capping, and minimum/maximum frameskip
control.
- GUI and config file.
- Keyboard working as follows:
The following settings are fixed:
ESC - Open GUI
F1-F8 - Toggle sound channels
F11 - Toggle FPS (frames-per-second) counter
F12 - Toggle 'rendering break' counter
tells how many times the delayed renderer is forced to
synchronize rendering in the last frame
~ - Fast-forward (lock to the configured max frameskip)
1-4 - Toggle BG layers 1-4
5 - Toggle sprites
6 - Reset BG layers/layering order/sprites/sound channels
7 - Toggle offset change
8 - cycle between 3 layering orders
0 - Save PCX of current display (IMAGE###.PCX)
The following settings are reconfigurable:
Keypad cursor keys - joypad direction
Q,A - L/R buttons
W,S - X/Y buttons
E,D - A/B buttons
[,] - Select/Start buttons
- A joystick/joypad may be supported in place of the keyboard,
depending on your controller and platform. Details are listed
under the 'CONTROLLER CONFIGURATION' menu in the GUI documentation
earlier in this document.
What is left to do in this emulator?
""""""""""""""""""""""""""""""""""""
The following list contains a sampling of changes that are planned,
in a order vaguely similar to when they can be expected...
it may not be complete!
TO DO:
~~~~~~
Screen rendering
OBJ limitations: Time/range over flag emulation
Performance: Improve tile-based rendering + more
Window clipping: Used to cut holes in layers; not yet supported on OBJ
and BG mode 7; support limited in other BG modes
Color window: Used for color arithmetic, allows overlaying BGs like the
rain in Zelda
Direct color mode: Used in ActRaiser 2, Secret of Mana, others
Priority per pixel in mode 7: May have priority problems
Plenty of other missing stuff...
Source : More source cleanup/clarity/commentation
Keyboard : Replace or extend keyboard handler to help with interface
Joypad : Better interface for mapping of controls
Multiple mappings for each control
Better joypad hardware emulation
Command-line interface: More control, especially over configuration
CPU : Variable bus timing, DMA timing
SPC : Needs better communication with sound DSP
Skipper : Fails to work on MANY ROMs, need at least an alternate skipper
Sound DSP: Correct noise, etc.
GUI: interface cleanup/rewrite/ease-of-use/versatility/mouse
ROM loader: More memory maps
Savestates: ...
Thanks go out to...
"""""""""""""""""""
Nintendo, for making the SNES...
and the SNES software developers, who suffered through the SNES design,
showing what it could do, and making it what it is today!
Pastor M. M. Angel: you know what you're doing with code...
Y0SHi and Marat Fayzullin: Nintendo emulation wouldn't have come nearly
this far without you...
Lord ESNES: For supporting SNES emulation so much, and giving so much
help to the authors of the more primitive SNES emulators...
SNES '9X team, past and present: for putting so much effort into making
it what it is today... fix those quirks!
ZSNES team, past and present: zsKnight, _Demo_, Pharos, pagefault,
stainless, ...: For ZSNES. Need I say more?
Lee Hammerton: for bringing this so far and giving me the opportunity
to make it live on...
archeide, Brad Martin: for getting the SPC and sound DSP and generation
working in the first place...
Brad Martin: for all the help with the sound core!
zsKnight: for always being so helpful!
archeide: hope you get that tile editor figured out...
Richard Ferreira (general code and optimization ideas and support)
Richard Mitton of the New Zealand Story Emulator (speed-throttling ideas)
zsKnight (for providing so much help and info... HDMA, memory maps, timing,
and the list goes on...)
SNES9X team (for spending so much time on trying to make such an exact
emulator, and releasing the source to it!)
zsKnight, for the 5x5 font for the GUI!
Lanice, for finding the LFN bug in the GUI!
KnucklesD, for getting on my case to put in save dir support!
Windwalker, neptron, and stainless, for the logos!
stainless: for putting up with me, and being the friend you are
MKendora, Lord_Nightmare: for all the support, and always reaffirming
my belief that there's a reason to continue.
Beta testing:
RibOnIzEr, QbProgger, AC/DC, Malenko, Richard Ferreira, rOss, stainless,
MKendora, akito
Y0ssarian, PoleStar, Steve, Vilmar, Enternal, [E|YSiUM], Goku-X, JaguarPaw,
JJJJ, KnucklesD, dps, Cowering, Lanice, EddyB43 from EFnet-#snesromz and
#classicgames, never coulda done it without you!
Greets
""""""
TCF, Borson, neptron, Avarice, KnucklesD, Richard Ferreira, AC/DC
Goku-X, Lanice, Azimer, TNSe, dps, polarz, rOss, Neill Corlett,
Richard Mitton, illus, Slaik, StCreator, RibOnIzEr, Thane, QbProgger,
krial, pagefault, stainless, Zero-X, MrGrim, kode54, akito, MKendora,
Lord_Nightmare, anomie, ipher, amit, Diablo-D3, Neviksti, slow, SamB
Everyone from EFnet IRC #snesromz, #classicgames, #snesdev, #zsnes, #mugen,
Newnet IRC #snesromz, and Openprojects IRC #fakenes, #zsnes, #assembler
Savoury SnaX and Gridle
archeide, Tim Riemann, Brad Martin, Qwertie, Martijn Kersbergen, B. Walker,
Paul Robson, Aquarius-1, D.Kieselhof, zsKnight, _Demo_, Pastor M. M. Angel,
Y0SHi, Albert Lloyd Sawyers, Zachary Williams, Lord ESNES, Jonathan Turner,
W/\re\/\/0lf, Malenko, James Cartrette, Duncanthrax, rRNA, Dark Claw,
Poiple Shadow, Flash, Windwalker, Chris Lacey, MaJiC, Dark Elf, Shade,
+ any I forgot.
Changes:
Changes
"""""""
The following describes the layout of this changelog.
In releases with contributions from multiple developers:
---
Version number
Area of project changed: Description of change [developer]
---
In releases with contributions from a single developer:
---
Version number [developer]
Area of project changed: Description of change
---
Changes from older releases may not classify changes by area of project.
Developer abbreviations:
TRAC Charles Bilyue'
DBJH Daniel Horchner
0.80
Misc: Fixed a flaw where divide result registers were not changed
by division-by-zero [TRAC]
Input: Fixed a flaw in JOYC1 which caused SMB in Mario All-Stars to
not acknowledge the start button [TRAC]
Source: Seperated the makefile for the multiple ports [TRAC]
Documentation: Cleaned up and clarified the history, and moved it
to another file [TRAC]
Ports: Added Linux/Unix build support [DBJH]
Source: Contributed to the removal of some non-portable code and
more source clean-up [DBJH]
ROM loader: Reduced some problems with loading ROMs in non-absolute
paths [DBJH]
Ports: Added BeOS build support [DBJH]
Configuration: Improved the portability of code which handled
configuration file regeneration [DBJH]
Source: Fixed a few problems in variable declarations [DBJH]
GUI: Made ".." come first in the file list [DBJH]
GUI: Fixed some problems where text would be displayed outside a
window [DBJH]
Source: Reorganized the source tree [TRAC]
65c816: Fixed a serious design flaw in ADC/SBC emulation which caused
the overflow flag to be set to an unexpected state [TRAC]
Sound: Removed some extraneous and problematic compile-time directives
[TRAC]
Sound: Added clipping and saturation to gaussian interpolation filter,
thanks to Jonathan Gevaryahu (Lord_Nightmare) and Brad Martin for the
fixes [TRAC]
Timing: Moved display period to the start of scanlines [TRAC]
DMA: Fixed a bug where the B-bus address could not be changed to a value
equal to the DMA parameter for the same channel [TRAC]
Timing: Corrected normal display to 224 lines [TRAC]
Timing: Added support for latching 213C/213D counter registers via
register 4201 [TRAC]
Misc: Added support for reading .zip and .gz files [DBJH]
Render: Fixed a bug where dual-window AND logic would result in
an entire line being clipped if either window covered the
whole display [TRAC]
GUI: Cleaned up some usage of constants in the source [TRAC]
GUI: Moved some input-related code out of the GUI source [TRAC]
Input: Added support for using joysticks/joypads to emulate
controllers; must be set up in controller configuration in GUI
similar to keyboard input [TRAC]
Configuration: Changed format of scancodes for input mappings to
decimal [TRAC]
Timing: Improved PPU counter latch accuracy [TRAC]
Render: Restructured windowing code [TRAC]
Render: Added preliminary window clipping to mode 7 background [TRAC]
Render: Improved layering order in mode 7, helps Final Fantasy 6
world map [TRAC]
SRAM: Corrected LoROM SRAM address ranges, per a theory shared by
myself and MKendora [TRAC]
Memory map: Corrected ROM mirroring [TRAC]
ROM loader: Reduced some problems with starting the emulator in a path
other than the one where it is located [TRAC]
Render: Added preliminary window clipping in mode 7 [TRAC]
Render: Fixed some mode 7-related problems in Y's III and Illusion of
Gaia; it appears that the intermediate values (BG1HOFS - M7X) and
(BG1VOFS - M7Y) produce 10-bit signed results; thanks to SNES'9X
for help [TRAC]
0.776 [TRAC]
Render: Added support for dual window clipping with all logic
modes of backgrounds in modes 5 and 6
Render: Added full mosaic effect to modes 5 and 6
Render: Added support for offset change in mode 6
Render: Fixed an offset map addressing bug in all offset-change
renderers
SPC700: Improved CPU cycle count conversion accuracy in PAL emulation
Configuration: Removed support for old (pre-0.60) format .cfg files
to help simplify the code and solve a few bugs
0.774 [TRAC]
SRAM: Added support for mirrored SRAM at banks F0 and above in LoROM
memory map, helps Big Sky Troopers and others, thanks to MKendora
for the information
Render: Fixed a screen map addressing bug in 16x16-tile background with
mosaic renderer
Render: Fixed a pixel count computation bug in 16x16-tile background with
mosaic renderer
Render: Fixed a screen map addressing bug in 16x16-tile background with
offset-change and mosaic renderer
Render: Added support for dual window clipping with all logic
modes of 8x8-tile backgrounds with offset change and mosaic in
modes 2 and 4
Render: Added support for dual window clipping with all logic
modes of 16x16-tile backgrounds with offset change and mosaic in
modes 2 and 4
Interface: Changed filename prefix for screenshots
SPC700: Fixed a flaw in SPC700 timers that could cause fractional ticks
to be lost on timer startup
SPC700: Fixed a bug which caused the POP PSW opcode to not restore the
negative flag properly, thanks to Brad Martin for help with this
0.77 [TRAC]
SPC700: Fixed the SPC700 timer bug that was supposed to be fixed in
0.75; not certain how it didn't make it into the release
Sound: Fixed a serious bug which caused the sound to never be updated
on DSP register changes; allows the correct attack 15 timing to
work with FF4, thanks to MKendora and Brad Martin for getting me
to go back to it
Sound: Changed behavior of key on and key off registers, should
be more accurate
Render: Added support for dual window clipping with all logic
modes of 8x8-tile backgrounds with offset change and no mosaic in
modes 2 and 4
Render: Added support for dual window clipping with all logic
modes of 16x16-tile backgrounds with offset change and no mosaic in
modes 2 and 4
65c816: Fixed a bug in which caused the timing position of an IRQ on
a new scanline to be incorrectly computed; fixes a problem in
Tetris Attack
0.751 [TRAC]
Render: Disabled some debugging code that caused mosaic to be forced
on in background rendering, thanks to Andr‚s Tangir for pointing
this out!
0.75 [TRAC]
65c816: Corrected address wrapping in direct and stack addressing
modes, thanks to MKendora for pointing out these problems
65c816: Altered register allocation
SPC700: Altered register allocation
SPC700: Fixed a bug in the timers which caused them to be reset
to random values when turned on, thanks to Brad Martin for pointing
this out
Source: Removed some obsolete code and dependencies
Source: Started cleaning up many of the C label references in the asm
code
Render: Added support for dual window clipping with XOR or XNOR logic
modes of 8x8-tile backgrounds with no offset change or mosaic
Render: Fixed a bug where window clipping was not updated correctly
when changing layering order
Render: Added support for dual window clipping with all logic
modes of 16x16-tile backgrounds with no offset change or mosaic in
modes 0-4
Render: Added support for dual window clipping with all logic
modes of 8x8-tile backgrounds with mosaic and no offset change
Render: Added support for dual window clipping with all logic
modes of 16x16-tile backgrounds with mosaic and no offset change in
modes 0-4
0.74 [TRAC]
Render: Altered clip window setup code
Sound: Corrected behavior of invalid range values in BRR header byte,
thanks to Brad Martin for the information
Sound: Corrected bug in ADSR/GAIN switching; when switching from GAIN
to ADSR, envelope update time was not set based on current ADSR state
Sound: Restructed BRR decoding
Render: Changed the back area color addition hack to actually add to
color 0 instead of replacing it, helps many games
Render: Added support for dual window clipping with OR or AND logic
modes of 8x8-tile backgrounds with no offset change or mosaic
Sound: Corrected sample loop behavior, erroneously changed it in 0.73,
fixes Sidmania
Sound: Added emulation of 4-point pitch-regulated gaussian
interpolation of sample data
Sound: Added emulation of SNES echo effect and its corresponding FIR
filter
0.735 [TRAC]
PPU: Fixed some register corruption issues in VRAM write handlers
PPU: Altered VRAM writes; when VRAM writes are attempted during the
display period, update addresses but do not save data, fixes Mega
Man X status screen glitch
Sound: Modified the envelope update values
Sound: Altered timing of attack rate 15, thanks to Brad Martin for
the correction
Sound: Altered behavior of ADSR envelope decay with the maximum
sustain level, thanks to Brad Martin for the correction
Sound: Altered ADSR/GAIN switching; when switching from GAIN to
ADSR, use the last ADSR state used by the channel since key on,
fixes Mega Man X music looping bug, thanks to Brad Martin for help
with this
Source: Fixed a bug in the makefile where some flags weren't being
properly passed for building the CPU cores
0.73 [TRAC]
Timing: Changed Korea region to South Korea, and its video standard
default to NTSC, fixes Dragon Ball Z - Super Butoden 3 (K), thanks
to MKendora for the information!
Sound: Changed envelope behavior: when voices already on are keyed on,
reset volume to zero, thanks to Brad Martin for setting me straight
on this
Sound: Fixed envelope behavior: no longer allowing envelope mode
changes for voices that are releasing
0.725 [TRAC]
Render: Added support for single window clipping of 8x8-tile
backgrounds with no offset change or mosaic
Timing: Fixed the Final Fantasy 6 timing hack
Render: Fixed a minor bug in offset change screen map address
calculation
Render: Corrected address wrapping for wide and tall screen maps
at the end of VRAM
0.721 [TRAC]
Render: Removed some unused masking code for performance
0.72 [TRAC]
Memory map: Added a hack for Batman: Revenge of the Joker, an odd
ROM with LoROM memory map and ROM info block in the 2nd 32k bank
Memory map: Fixed behavior of command-line options -fi (Force
interleaved) and -fn (Force non-interleaved) on non-split ROMs when
-fl or -fh also used
Memory map: Fixed behavior of command-line options -fl (Force LoROM)
and -fh (Force HiROM)
Timing: Added a hack to eliminate the world map flicker on Final
Fantasy 6 until timing is improved
Source: Cleaned up some parts of the source and altered makefile to
help portability
Sound: Reevaluated and adjusted sample ranges to increase output
volume
GUI: Added options for independently stretching the emulation
display output in the horizontal and vertical directions
Other: Added blitter support for the stretch options in 16-bit
screen modes
Render: Added full mosaic effect to modes 2 and 4, 16x16-tile
backgrounds with offset change
Sound: Re-enabled pitch-modulation
Sound: Changed the BRR sample decoding to a new method based on
information from Brad Martin, helps sounds in several games
(Final Fantasy 6, Chrono Trigger, Mega Man 7, Mega Man X, others)
Render: Improved performance of background rendering in modes 5 and 6
Configuration: Reordered screen modes due to new stretch options
0.706 [TRAC]
65c816: Added support for the inability to acknowledge an IRQ in the
instruction immediately after one that clears the I flag, fixes
Marko's Magic Football, thanks to anomie for information on the
problem
0.705 [TRAC]
65c816: Optimized portions of the main execution loop
SPC700: Optimized portions of the main execution loop, cycle
conversions, and timer calculations
Memory map: Removed the hack for Mega Man X/Rock Man X, it was
mistakenly commented out some time ago, but is no longer needed
Memory map: Added support for ROM mirroring, fixes
Mega Man X/Rock Man X
SRAM: Corrected addressing in 512kbit and 1Mbit SRAMs, fixes
Dezaemon and Thoroughbred Breeder 3
0.702 [TRAC]
Other: Added code to use the FPU or MMX to clear the framebuffer,
and to allow disabling of cache preloading
Config: Added options control usage of FPU/MMX and cache preloading
Source: Fixed a few minor issues which prevented compilation with
NASM 0.98.34
SRAM: Added support for SRAMs larger than 512kbit - unfortunately,
something must be off as nothing requiring it seems to work yet
SRAM: Fixed a serious bug in support for HiROM SRAM larger than 64kbit
Render: Fixed a bug which caused 8x8-tile offset change layers without
mosaic to not display correctly in mode 4
Render: Fixed a bug where tile priority was unlikely to behave
properly in 8x8-tile offset change layers with mosaic
0.701 [TRAC]
Sound: Fixed some issues in GAIN register emulation
Sound: Fixed some issues related to envelope updates
65c816: Fixed a bug in 16-bit ADC/SBC where invalid values could
sometimes be stored in the accumulator, fixes a crash in Terranigma
0.70 [TRAC]
Sound: Fixed a serious bug in ENVX reading, fixes samples being cut
short in Super Offroad: The Baja
Sound: Fixed a serious bug in mixing epilog, fixes freezes in
Terranigma
0.694 [TRAC]
Render: Fixed a bug which caused char 0 repeat outside the screen
area to not work
Render: Added full mosaic effect to modes 2 and 4, 8x8-tile backgrounds
with offset change
0.692 [TRAC]
Render: Fixed a bug in modes 5-6 where screen map selection was
sometimes incorrect when 64-tile screen width was used (fixes
Seiken Densetsu 3 menu screens)
Timing: Fixed a bug where IRQs could be set for non-existant H-timer
positions
Render: Added full mosaic effect to modes 0-4, 16x16-tile backgrounds
without offset change
0.69 [TRAC]
SPC700: Eliminated some self-modifying code
Timing: Fixed an IRQ-related bug in register 37 (SLHV) (thanks to
SNES'9X)
Render: Added full mosaic effect to mode 7
Render: Added full mosaic effect to modes 0-4, 8x8-tile backgrounds
without offset change
Timing: Changed timing of RDNMI/HVBJOY vblank start closer to NMI
like it was before 0.68 - fixes ActRaiser title
PPU: Eliminated some self-modifying code
PPU: Fixed a bug in VRAM access (fixes some issues on Earthworm Jim 2
copyright screen)
0.68 [TRAC]
Input: Fixed a bug in the input code
GUI: Added the ability to configure shift keys for controllers
Source: Fixed a makefile issue where non-profiling builds were
linked with profiling enabled - it is safe to delete the
gmon.out files that were being produced (thanks to stainless
for reporting)
Render: Overhauled 8x8 tile background plotters
65c816: Fixed several address wrapping bugs
65c816: Optimized 16-bit loads
SPC700: Fixed a bug in POP PSW where the 'direct page' offset was
sometimes incorrectly set, fixes Super Punch-Out!!
SPC700: Various minor bug fixes and optimizations
SPC700: Optimized 16-bit loads
0.666 [TRAC]
Render: Fixed a bug which was causing BG3 high priority tiles to not
be drawn in mode 1 when BG3 highest priority was disabled
Render: Restructured the 16x16 tile background plotters
Render: Added support for offset change in modes 2 and 4,
16x16-tile layers
Render: Fixed a bug in the offset-change elimination speed hack
(was causing it to sometimes disable offset-change despite it
being used)
Render: Corrected address wrapping for the vertical offset table in
mode 2, fixes WWF Wrestlemania Arcade
PPU: Altered background offset register behavior, fixes Theme Park
(thanks to anomie and Matthew Kendora)
Sound: Changed the behavior of the BRR decoding rate for noise-enabled
channels
Render: Fixed an OBJ setup bug for large OBJ partially off the left
edge
GUI: Fixed a bug where the logo wasn't always displayed
Logo: Thanks to stainless for providing a new logo!
0.665 [TRAC]
Render: Corrected OBJ range limitations (thanks to anomie and Neviksti)
Render: Removed BG3 highest priority from mode 0 since it doesn't
actually exist (thanks to anomie)
Render: Readded mode 7 rendering for the sub-screen
SPC700/APU skipper: Added APUI00-APUI03 port mirroring
0.662 [TRAC]
Render: Corrected mode 7 EXTBG (priority-per-pixel) emulation
(thanks to anomie and Neviksti)
PPU: Corrected OAM register emulation (thanks to anomie and Neviksti)
0.66 [TRAC]
Sound: Fixed sound DSP key-on behavior
Sound: Fixed a memory leak when sound was disabled
Sound: Fixed crashes when switching sample sizes
Sound: Fixed some issues with 8-bit sound
Sound: Overhauled portions of the mixing code
Render: Enabled some portions of the tile cache code which should have
been already
Source: Overhauled the makefile
Source: Reorganized background rendering code
Render: Added support for offset change in mode 4, 8x8-tile layers
Render: Added code to eliminate emulation of offset-change when it
is unused
0.653 [TRAC]
Sound: Fixed sound<>SPC timing speed, the conditional-compile directive
was placed a few lines too late
0.652 [TRAC]
Sound: Fixed a sound DSP behavior issue - DSP address bit 7 is
significant (was ignored since 0.625), fixes Donkey Kong Country
series, others
0.651 [TRAC]
Render: Fixed a few cases where a segment register was not properly
restored
Render: Cache-related optimizations in mode 7
0.65 [TRAC]
65c816: Optimizations in flag handling and memory access
SPC700: Optimizations in memory access
Render: Altered method of decoding 4- and 8-bitplane tiles
Render: Altered method of clearing framebuffer
0.641 [TRAC]
Source: Removed some debugging code that was no longer needed
Source: Removed errors and warnings when compiling under GCC 3
0.64 [TRAC]
Render: Simplified/reoptimized mode 7 rendering
Render: Corrected depth of low priority sprites in mode 7
Timing: Fixed a bug which caused some events to occur one instruction
too late
Render: Overhauled sprite limitations and priority rotation,
fixes Final Fantasy: Mystic Quest, perhaps others
SPC700: Optimizations in flag handling
0.63 [TRAC]
Render: Reimplemented priority-per-pixel in mode 7
Render: Fixed a bug that caused some calculations to be done too
often in mode 7
0.625 [TRAC]
Sound: Removed some debugging code that was breaking Secret of
Evermore
Sound: Altered some of the envelope update timings
Render: Fixed a mode 7 off-by-one-line bug
0.62 [TRAC]
Sound: Fixed severe slowdown when sustain was set to infinite
Sound: Fixed severe slowdown with noise
65c816: Fixed a crash bug related to WAI instruction
Render: Fixed a bug where sprites were not recomputed when highest
priority sprite was changed (fixes star sprite test in test ROM)
Timing: Changed first non-vblank scanline to 0
0.61 [TRAC]
Frameskip: Fixed two bugs in the speed-throttle code: one when speed
limiter was disabled (min frameskip > 0), one when fast-forward was
used
Render: Added code to eliminate emulation of unneeded priorities
Render: Reoptimized and overhauled the general structure of mode 2
offset change emulation
Render: Fixed a bug in mode 7 outside-screen-area clip mode
GUI: Fixed the behavior of the FPS counter for FPS > 99
GUI: Added a 'rendering break' counter - tells how many times the
delayed renderer is forced to synchronize rendering in the last frame
GUI: Modified the keyboard handling to solve stability issues caused
by a problem in the DJGPP/Allegro code - GUI is again enabled by
default
Sound: Fixed the register behavior of disabled voices
Sound: Fixed sample looping when loop position changed
Sound: Improved performance of sound generation
Sound: Added option to allow generation of 8-bit output samples,
and a GUI option to toggle sample size
Sound: Added a config file option to select the Allegro mixer mode
Configuration: Added 320x240x256 VESA2 screen mode as mode 8
0.60 [TRAC]
Render: Fixed a bug in mode 7 vertical-flip
Render: Rewrote sprite rendering again - improves speed
Configuration: Restructured config file
Render: Added independent horizontal/vertical stretch options
Source: Now linking with Allegro 3.9.34
DMA: No longer preventing HDMA register from being written to during
display - fixes some graphics glitches in Chrono Trigger
PPU: No longer allowing writes to VRAM and OAM outside v-blank,
force-blank
PPU: No longer allowing writes to CGRAM outside v-blank, h-blank,
force-blank
65c816: Modified cycle counter and wait-for-interrupt emulation
Timing: Improved 65c816<>SPC700 timing slightly
GUI: GUI is now by default DISABLED because of instability - those who
still wish to bear with it can enable it via a commandline switch
Commandline: Added several new configuration switches
0.55 [TRAC]
Sound: Many changes to volume envelope timing
Sound: Corrected synchronization of sound mixing and volume envelope
generation
Sound: Implemented noise generation
Sound: Changed sound to use a double-buffering method - sound may
skip on slower systems
0.53 [TRAC]
65c816: Fixed a bug in the MVP/MVN opcodes that could seriously
disrupt timing (fixes Final Fantasy: Mystic Quest)
0.52 [TRAC]
Stability: Fixed a serious bug in the tile decoder that has caused
crashes since the decoder was rewritten in 0.40
Timing: Corrected an error in the CPU timing
Interface: Added a fast-forward key (tilde)
0.51 [TRAC]
Render: Fixed a bug that caused some sprites to be corrupted
0.50 [TRAC]
65c816: Completed the memory mapper changes started in 0.49
Source: Moved some debugging-related code into its own file
Source: More source cleanup
Stability: Fixed bugs in SRAM loading/saving (files opened weren't
being closed) - appears to have fixed the last of the exit crashes
Config: Changed the default save RAM file extension to SRM, and
removed support for the old 'frameskip' setting in the config
file
0.49 [TRAC]
Render: Implemented BG3 highest priority in mode 0
Render: Corrected wrapping from end of tilesets
GUI: Now uses standard keyboard controller auto-repeat
Interface: Emulation no longer pauses when pressing certain keys
(ESC to go to GUI, F1-F8 to toggle sound channels, 1-8 to change
render options, 0 for screenshot)
65c816: More changes to the memory mapper, for speed, accuracy, and
allowing execution of code from SRAM (does anything use this?)
0.48 [TRAC]
Source: Ported the sprite decoder/plotters to NASM
Source: Ported the background layer decoder/plotters to NASM
Source: Ported the hardware port handlers to NASM
Render: Removed a sprite 'fix' I put in back in 0.47 - did nothing
except slow things down
Display: Removed an unnecessary part of the screen mode setup code
Render: Fixed a bug that caused sprites to be disabled when mode 7
layer was disabled
Memory map: Added support for the special memory map used by
Rock Man X and Mega Man X (allows uncracked ROMs to work properly)
0.472 [TRAC]
Source: Ported the tile decoder/plotters to NASM
Startup: Pulled out some debug code that caused the emulator to
silently wait for a keypress at startup
0.47 [TRAC]
GUI: Extended the width of the Load ROM window (per request)
Source: Ported the mode 7 emulation to NASM
Display: Tweaked with the 256x239x256 setup code - appears to have
been causing problems under some conditions
Config: if it can be detected that a full path was supplied to start
the emulator, it will now force the current directory to that path
(temporary fix for Windows Explorer drag-and-drop startup until I
do it a more elegant way) - ensures SNEeSe can find its .cfg and .dat
files
Config: Fixed some of the defaults used when a config file isn't
present
0.46 [TRAC]
GUI: Fixed a few bugs that didn't allow the mouse to be enabled/used
Source: Ported the DMA emulation to NASM
Timing: Fixed a source inconsistency bug which could cause
unpredictable SPC timing
CPU: Altered the main memory mapper, should be faster than before
Source: Ported the SPC700 CPU core to NASM
65c816: Went back to more accurate stack operations in native mode
Source: More cleaning up under the hood
Render: Now clearing lines between actual end of display and maximum
end of display
Stability: Changed the way the internal render surface is transferred
to the display - appears to have fixed the crashes during exiting
that have been around since 0.43
0.45 [TRAC]
Sprite: Fixed sprite intermediate render buffer clearing -
fixes garbage sprites in Bill Laimbeer's Combat Basketball, probably
others
Source: Fixed source to compile with and now compiling with
GCC 2.95.2, Allegro 3.9.32 WIP
NOTE: All keymaps set in cfg files from previous versions are
incompatible, and must be reset!
Stability: No longer using GCC asm labels, as GCC doesn't seem to be
handling them correctly causing stability problems
Stability: Wasn't always setting es register up for string instructions,
fixed
DMA: Now updating DMA transfer size after PPU->CPU DMA
Timing: Made several changes to improve IRQ function - fixes SF2
Turbo, New Ninja Warriors, probably others
Source: Ported the 65c816 CPU core to NASM
Stability: Noticed I wasn't locking a var used in interrupt context,
fixed
Allegro: Disabled Ctrl-Alt-End/Ctrl-Break exiting until I can figure
out why they sometimes restart my computer under Win95
Timing: Changed the way CPU cycle counts are translated into SPC
cycles - should allow for closer CPU<>SPC synchronization
0.441 [TRAC]
APU skipper: Fixed a nasty bug that caused the emulator to crash
upon entering the GUI if the APU skipper was enabled
0.44 [TRAC]
Render: Implemented correct sprite priorities (helps MANY ROMs:
Chrono Trigger, Super Mario Allstars, Terranigma to name a few)
0.43
Logo: Thanks to neptron (http://ciot.pair.com/neptron/) for providing
a new logo! [neptron]
Disclaimer: Updated the disclaimer with more information on how
SNEeSe may and may not be distributed [TRAC]
Render: Wasn't resetting deinterleaved VRAM during Reset, now doing so
(combined with resetting VRAM to 0, fixes missing tile on ActRaiser
mode7 logo) [TRAC]
PPU: Implemented delay-by-one-word read, from SNES'9X
(was hoping it would fix Captain America... no luck) [TRAC]
ROM loader: Added support for split ROMs (*.1) [TRAC]
GUI: Fixed the controller configuration window (joypad pic was missing)
[TRAC]
Render: Fixed an offset change map address computation bug;
helps vertical offset change in mode 2 (Tetris Attack looks much better)
[TRAC]
Render: Added tile priorities to offset change enabled mode 2
(helps Art of Fighting) [TRAC]
Render: Implemented priority per pixel in mode 7 (helps F1 Grand Prix)
[TRAC]
Render: Fixed a possible offset change map address wrap bug [TRAC]
Render: Added horizontal scrolling support to mode 2 offset change
renderer [TRAC]
Render: Added screen size support to offset change map in mode 2
offset change renderer (fixes Chrono Trigger menus!) [TRAC]
Render: Added horizontal offset change to mode 2 offset change renderer
[TRAC]
Sound: Implemented custom mixer - improves sound greatly in most cases
[Brad Martin]
HDMA: Implemented HDMA-start-within-frame (fixes Killer Instinct)
[TRAC]
Render: Changed the way the internal bitmap is stored/handled
(helps mode-X speed, allows screenshots in linear VGA modes) [TRAC]
GUI: Worked on the Load ROM interface a bit - '.' dir is now excluded,
directories are updated in their entirety (not one window at a time),
sorting is done (both in names, and in types - files are at the top,
followed by dirs, then drives) you can use the HOME and END keys now,
and drive switching can be done (A:-Z: are listed at the far bottom)
-note: for directories larger than 998 entries, only the first 998
entries will be read! [TRAC]
Sound: Now allowing ENVX (envelope height) reading to be disabled in
the GUI (helps Bomberman series) [TRAC]
Sound: Fixed a bug that allowed the sound code to be used when the
SPC was disabled [TRAC]
Sound: Hacked in a fix to prevent some ROMs (Bill Laimbeer's Combat
Basketball) from crashing the emulator [TRAC]
0.41
Render: Added 3-way layering order cycle, press 8 key [TRAC]
Timing: Made a few tweaks that may improve IRQ timing [TRAC]
Sound: Implemented cycle-exact ADSR calculation, this fixes or improves
sound on some things (Rampart), worsens on others [Brad Martin]
0.40 [TRAC]
65c816: Fixed a bug that could cause WAI to miss a waiting IRQ
Source: Many changes to reduce repetition in 65c816/SPC opcodes
65c816: Made a few improvements to the register allocation
Sound: Fixed a possible buffer underrun bug
PPU: Went back to the old VRAM read method - 'VRAM read buffering'
might make more sense, but it doesn't work well with ActRaiser...
PPU: Fixed a bug in VRAM full address increment (untested...)
Render: Completely changed the tile caching method
DMA: Made a few slight changes to the DMA/HDMA emulation
Timing: Rewrote event handling, now using more correct timing for
rendering and HDMA
Timing: Implemented pre-NMI delay (fixes Chrono Trigger intro freeze)
Timing: Fixed controller ready bit in HVBJOY (fixes Chrono Trigger
combat slowdown and combat menu flickering)
Thanks to Neill Corlett for info!
Timing: Implemented much more correct H-IRQ timing, should also allow
multiple H-IRQ's on a scanline
Source: Ported some of the source from GNU-AS (GAS) to NASM
(memory mapper, APU skipper, special screenmode setup)
Joypad: No longer reporting parodoxical inputs - up and down can
no longer be pressed at the same time, nor can left and right
(fixes a potential problem in Zelda 3 name entry)
SPC700: Now updating SPC timers at least once every Vblank
SPC700: Fixed a major bug that caused the SPC to freeze after about
17.5 minutes of virtual execution
0.371 [TRAC]
Config: Added save directory support (must be set manually in cfg file,
read the config file section of the readme for info)
0.37
PPU: Modified the way VRAM read is done - now uses 'VRAM read
buffering' which makes MUCH more sense, thanks to Ben Parnell
of FCE Ultra (NES emulator) for info! [TRAC]
Sound: Made a few improvements to the sample decompression routines
[TRAC]
Sound: Figured out why Soundscape cards weren't getting any sound
and told Allegro to put the drivers in [TRAC]
Sound: GUI should now be quiet on more cards [TRAC]
CPU: Completely redid CPU opcode timing tables - thanks to Neill
Corlett for better timing info! [TRAC]
CPU: More improvements to the execution loop [TRAC]
HDMA: Removed some unnecessary code that was in since the last rewrite
Source: Removed an erroneous extra line in one file [TNSe]
Source: Added a kludge in many files to work around the DJGPP linker's
lack of object file alignment [TRAC]
SPC700: Changed flag format conversion to use lookup tables [TRAC]
65c816: Fixed a few bugs related to the Break flag in emulation mode
(allowing Break flag to be cleared, Break flag set on stack after NMI)
[TRAC]
65c816: Simplified stack operations [TRAC]
PPU: Fixed a bug that caused CGDATAREAD to be disabled [TRAC]
Commandline: Added support for video standard forcing (-fvp to force PAL,
-fvn to force NTSC) [TRAC]
0.36 [TRAC]
CPU: Timing base changed
CPU: Redid the FastROM support, improving speed in cycle counting
IRQ: Improved IRQ support (IRQs were being ignored in Vblank before,
fixed)
PPU: Improved joypad hardware emulation ('automatic read' timing)
SPC: Improved speed in opcode fetcher, some source changes
SPC: Now only resync'ing on CPU-SPC communication and on the start
of Vblank (when sound update is done), doesn't appear to worsen
anything and improves speed
Other: Redid some of the debug dump from when the emulator exits
0.35 [TRAC]
SPC: Many more optimizations and some source cleanup
SPC: Fixed yet another bug in the CPU-SPC cycle calculation code -
caused Reset to cause 'unpredictable behavior' when the SPC was enabled
0.34 [TRAC]
Render: Slight tweaks inside the renderer, including a modification
to the back area color addition hack
Render: Implemented mosaic effect (vertical direction only)
Render: Major tweaks to the vertical offset change support in mode 2 -
still not correct but appears better
0.33 [TRAC]
SPC: Fixed a very stupid, nasty bug that showed up in 0.26, that
caused the DIV YA,X opcode to corrupt the stack pointer
Sound: Fixed a bug that caused the sound driver not to be installed
if a ROM filename was not specified on the command line
0.32
Sound: Fixed some problems that caused sound generation to be used
when sound was disabled [TRAC]
SPC: Fixed a bug that caused SPC timers to lose cycles in conditional
branches [Brad Martin]
SPC: Now allowing SPC timer targets to be set when timer is enabled
as it seems to fix other timing problems [Brad Martin]
Render: Fixed some problems with layers using 16x16 tiles having
small virtual screens [TRAC]
0.30
GUI: Fixed yet another small GUI bug [TRAC]
Joypad: Tore out the old joypad code [TRAC]
Allegro: Now linking with Allegro 3.11, should fix some sound card
incompatibilities [TRAC]
SPC: Bug fixes in 4 SPC opcodes, and a serious bug in the SPC CTRL
register fixed, AND a new sound DSP/sound generation core
(Compatibility noticably improved!) [Brad Martin]
0.277 [TRAC]
SPC: Fixed timer 2 to be a 64kHz timer - had mistakenly made it 8kHz
in the rewrite
SPC: Fixed some bugs in the sound DSP, that could have potentially
caused memory overwrite
0.276 [TRAC]
APU skipper: fixed a nasty bug that showed up in (and went unnoticed
since) 0.27, caused severe SNES timing problems
GUI: Fixed a bug causing the CPU Reset to freeze up when the SPC is
enabled after it having been disabled during execution
0.275 [TRAC]
SPC: Many more optimizations to opcode fetcher
SPC: Implemented TCALL instruction
0.27 [TRAC]
SPC: More optimizations
SPC: Completely rewrote SPC timers - fixes some SPC problems and sound
playing too fast or slow
SPC: Forcing SPC to 'catch up' once per 65816 'scanline' time period,
may clear up more sound quirks (until sound generation code can be
rewritten)
Timing: Vblank timing adjusted slightly
0.26 [TRAC]
HDMA: Fixed a bug where the transfer size for the first line of a set
was corrupted
HDMA: No longer repeats write to register for continue mode
IRQ: Put in a better H-IRQ hack, until I do the timing
Render: Palette is set for highest brightness in the frame (helps
Chrono Trigger, SF2 series, others), thanks to an anonymous
contributor for help
Timing: Hblank timing code simplified
0.251 [TRAC]
Render: Fixed the back color add hack (Mario World blue sky, others)
that got broke somewhere along the way.
Source: Fixed some problems in the makefile that gave some users
trouble rebuilding.
0.25 [TRAC]
CLI: Implemented a basic commandline interface, providing a means to
override ROM loader autodetection
Released to the public!
0.25b17 [TRAC]
Timing: Reworked how Hblank is handled
SPC: Now forced to 'catch up' once a frame, solves the 'lags' and
improves sound overall
0.25b16 [TRAC]
SPC: Source cleanup, general optimization (register allocation needs
more improvement), a few more fixes
DMA: Fixed a bug where DASL/DASH was not being reset to 0 after general
DMA transfer (thanks to ESNES and Trepalium for pointing me to DMA -
F-Zero is fixed!!!)
Render: Fixed a stupid, nasty, bug in the new sprite code
0.25b15 [TRAC]
GUI: Fixed another bug with changing SPC enable (menu item wasn't changed)
Render: More changes to sprite render code
PPU: Slight change to 16x8 multiply
PPU: Fixed the emulation of the RDNMI register/timing - thanks to
archeide of SNEmul for pointing me in the right direction!)
65816: Fixed the write order of some instructions
SPC: Now treating SLEEP and STOP as invalid opcodes for debugging purposes
(is there any point in emulating these, similar to the 65816's STP?)
SPC: Fixed part of the SPC register dump
SPC: Implemented hidden 64 bytes of RAM at top of SPC address space
0.25b14 [TRAC]
Fixed a bug in the GUI with changing SPC/sound enable
Added a FPS counter - it works, unfortunately you can't always see it...
must be enabled in the GUI
0.25b13 [TRAC]
Reversed plot order back to the way it used to be before 0.16 - another
speed increase (doh!)
0.25b12 (unreleased) [TRAC]
Implemented deinterleaved VRAM storage and a new mode 7 renderer:
VRAM is now also stored as 32k low bytes and 32k high bytes. This has
minimal effect overall but may provide a mode 7 speed increase, in
particular for low-end systems (486)
Fixed a bug where disabling mode 7 also disabled sprites
More layering priority fixes in modes 2-6
Altered the 256x240 mode to get rid of a lot of the excess border
Reduced the 256x240 mode to 256x239
Modified the way screen modes are handled with the GUI
More tweaking with DMA/HDMA emulation
0.25b11 [TRAC]
Tweaked with the screen core a bit, removing a lot of redundant code
Improved the header detection in the ROM loader (thanks to Gridle for the
suggestion)
Modified the way frameskipping is handled
0.25b10 [TRAC]
Tweaked with the controller code a bit - now DKC and Mario All Stars
work as expected
0.25b9 [TRAC]
Fixed a bug in VRAM read ports - they were suggested by zsKnight as a
likely cause of gfx corruption, and making a change to match a noticed
difference in the '9X source, gfx corruption went away in the following
ROMs, and likely others: ActRaiser, FF2, Super Metroid, Wario's Woods...
Fixed a stupid bug that showed up in 0.25b8 that stopped FF2 from starting
Several layering priority fixes
0.25b8 [TRAC]
Removed H-IRQ hack as it was causing more problems than it helped
Implemented partial support for delayed IRQ
Implemented a hack in WAI which causes the CPU timing to skip ahead to the
next event
Some SPC optimizations
Another doc was wrong: increased SPC RAM back to 64k, sound is back to
being reasonable (timing is still terrible)
0.25b7 [TRAC]
More CPU speed-ups
Hooked SPC back up with on-demand execution, however sound is not
considered a 'demand', and SPC is slow and buggy still.
0.25b6 [TRAC]
Layering priority fix: BG3 highest priority in mode 1 - BG3 high priority
tiles now drawn over highest priority sprites, not under (helps Mario
World map)
0.25b5 [TRAC]
Fixed a bug in full VRAM address increment
Fixed a bug that sometimes caused Reset to freeze emulator
Fixed mode 7 outside-screen-area clip/char 0 repeat - it appears that
two docs were wrong on this...
Native mode XCE no longer forces M/X bits set
Now always keeping 65c816 flags in a register during opcode execution
More source reorganization
0.25b4 [TRAC]
Fixed a bug in scrolling hardware ports
Rewrote more opcodes to take better advantage of new opcode fetcher
0.25b3 [TRAC]
Implemented alternate 65c816 opcode fetcher (should be considerably
faster - original one likely to be removed in the future)
Implemented interleaved HiROM support in ROM loader
0.25b2 [TRAC]
Finished hooking in last of new horizontal calc code
Slight speed-up tweak in 65c816 emulation
Fixed a nasty bug that showed up in 0.25b1 that caused severe gfx
corruption in at least one ROM (ActRaiser)
0.25b1 (doh! date in readme said 4-3, should have said 23-3) [TRAC]
Rewrote horizontal scrolling calc code to reuse data
Reworked some of the tile cache invalidate tables/recaching code to
store information on certain special cases of tiles to limit some
unnecessary checks
Implemented OAM decode caching - this increases sprite rendering speed
noticably - more optimizations possible here...
0.17b7 [TRAC]
Fixed data store method of double write registers (BG scroll, M7 matrix)
More speed up tweaks in memory mapper and screen core
Fixed a bug in HDMA code - fixes GPFs after fights in FF5, extra
sprites in TMNT4 and missing sprites in Killer Instinct
Disabled DJGPP LFN support (was causing problems in the Load ROM file
selector in the GUI, because it's still expecting 8.3 filenames)
Thanks to Lanice for pointing out the crashing! (doh)
Rewrote a lot more bits of the GUI to use OOP and allow more advanced
features to be implemented in the future
Compiling in two new fonts: the font from ZSNES (thanks zsKnight!),
and a slightly cosmetically modified version of the same
(only the modified font is available in the GUI at this time)
0.17b6 [TRAC]
More internal work on GUI
Fixed a bug in mode 1 background priorities with BG3 high priority
enabled - helps intro in FF5
Oops! Removed some code that shouldn't have been in b5 - was causing
the ROM loader to create a test file the size of the loaded ROM
Fixed a bug that caused the color subtraction in back area hack to
kick in sometimes when it shouldn't
0.17b5 [TRAC]
Fixed a bug in the ROM loader that caused it to get in an endless loop
on ROMs that weren't an even multiple of 32k (excluding header)
Fixed a bug that prevented HiROM SRAM from working AND allowed it to
overwrite other memory
Implemented SRAM mirroring in HiROM
Reduced SRAM allocated to 64k and SRAM supported in HiROM to 64k
Changed the value certain areas of RAM were initialized to to closer
match SNES '9X
Changed memory mapper so LoROM/HiROM shared more code/data
ROM loader: replaced the fstream code with stdio code - this seems to
fix the problem with 32k ROMs not loading correctly
0.17b4 [TRAC]
More work on background plotting speed, hw port emulation speed/accuracy
SPC disabled - stopped working sometime between b2/b3 and needs to be
rewritten anyway
More CPU speed
Fixed many non-emulation related bugs that caused crashes in pure DOS,
and forced the switch to WDOSX before
Reverted to standard DJGPP stub now that WDOSX is no longer necessary
More fixes to LoROM SRAM mapping - SNES '9X source and one problematic
ROM provided insight into the workings of SRAM mirroring
Improved emulation of CGDATA/CGDATAREAD:
now use seperate vars for odd byte reads
DMA modes 2+ had been disabled for some strange reason (doh!) - fixed
0.17b3 [TRAC]
Now using WDOSX, because of having too many problems with the standard
DJGPP stub
Moved plenty of code around in gfx engine for potential speed increase
and code size reduction
Most data moved around in hw port emulation
Most hw ports now reset in Reset (used in 'Reset Emulation' and
'Load ROM' in GUI) - some still remain (especially in SPC)
More work on ROM loader
Can now go in GUI without specifying ROM on command line, however trying
to load a ROM in GUI is still painful!
0.17b2 [TRAC]
Simplified hardware ports in memory mapper
Improved emulation of OPHCT/OPVCT
Statically allocating SRAM, WRAM, VRAM, SPC address space, OAM now
Improved emulation of OAMDATA/OAMDATAREAD:
now use seperate vars for odd byte reads
Fixed a bug where 8 bytes too few were being allocated for OAM
SRAM allocation halved (only 128k now)
LoROM: SRAM supported reduced to 64k, writes prevented if ROM says less
exists (allows Puzzle Bobble to start)
0.17b1 [TRAC]
Implemented speed throttling (thanks to Richard Mitton of the New
Zealand Story Emulator for help with this!)
GUI overhaul begun ('3D' appearance added, code is becoming more object
oriented)
CFG handler rewrite begun
Source cleanup/overhaul begun
LoROM 16+Mbit and HiROM memory maps fixed (thanks to zsKnight for help!)
Implemented Hblank emulation/CPU timing (thanks to zsKnight and the '9X
source for help and info!)
Fixed emulation of SLHV register (thanks to '9X source for info!)
Fixed SPC memory map to only have 32k of RAM
Fixed a few CPU opcodes
Fixed a memory overwrite bug in a few CPU opcodes which caused the
emulator to deconfigure controller keymaps
0.16f: Various bug fixes and speed-ups.
Copyright © 2010 Geeknet, Inc. All rights reserved. Terms of Use