________ __ __ __________ ________
_/########\_ {##\_ {##} {##########} _/########\_
__ __ {##/ŻŻŻŻŻŻ\##} {####\_ {##} {##}ŻŻŻŻŻŻŻ {##/ŻŻŻŻŻŻ\##}
{##} {##} {##\___ ŻŻ {##}\##} {##} {##}_______ {##\___ ŻŻ
{##\_ _/##} Ż\####\___ {##}{##\_ {##} {##########} Ż\####\___
Ż\##}{##/Ż ŻŻŻ\####\_ {##} Ż\##}{##} {##}ŻŻŻŻŻŻŻ ŻŻŻ\####\_
{##\/##} __ ŻŻŻ\##} {##} {##\{##} {##} __ ŻŻŻ\##}
Ż\##/Ż {##\______/##} {##} Ż\####} {##}_______ {##\______/##}
{##} Ż\########/Ż {##} Ż\##} {##########} Ż\########/Ż
ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
version 2.91
created by: |
creaothceann aka illegal eagle |
last update: |
2006-06-12 15:19 |
|
|
zLib library: |
Copyright (C) 1995-1998 Jean-loup Gailly and Mark
Adler |
zLib Pascal translation: |
Copyright (C) 1998 by Jacques Nomssi Nzali |
MemCheck unit: |
Copyright (C) Vincent Mahon and Jean-Marc Eber |
tPNGImage
/ PNGDelphi: |
Copyright (C) Gustavo
Daud |
vSNES uses countless technical SNES info from various sources
all around the web (see romhacking.net
for a nice selection of documents). For example, the code for
analyzing HDMA tables is an almost literal translation from
anomie's register doc into code. And of course the emulator
sources of ZSNES and SNES9x helped a lot, too.
1. CONTENT
2. Disclaimer
I'm not responsible for any damages that result in using this
software. It's free, and it is NOT n00b-proof. Give it
invalid data, and it will screw up itself, maybe even the OS
you're running it on, and maybe the hard drives it has access to
- although I don't intent this, I cannot guarantee anything. Just
in case you missed the point: USE
AT YOUR OWN RISK.
If you don't understand vSNES, or don't like it, then it just
isn't made for you. Consider yourself out of the target group.
And even if you like it, you should try other tools too.
3. Preface
Now that this is out of the way, some general info.
vSNES represents a SNES console, like an emulator. It simply
consists of some memory that holds the status of the hardware.
Unlike an emulator, it lacks the ability to execute the code in
the RAM or ROM chips, allowing the components to interact. So
what good is it?
Well, emulators like Genecyst or MEKA let you view the hardware
at work, for example the color palette or the video RAM. ZSNES
lacks such features, but the savestates contain all the info. A
savestate is like a SNES frozen in time.
vSNES comes with several tools:
- The Preview Window shows
you the picture that is included in the ZSNES or Super Sleuth savestate
file.
- The MemViewer allows you to view
the content of VRAM, WRAM and the cartridge using the
colors selected in the PalViewer.
- The SceneViewer shows you the
current screen of the SNES and the parts it consists of
(i.e. regular backgrounds, sprites, Mode7 backgrounds,
HDMA and offset-per-tile info).
- The HexEditor shows the content
of the larger RAM or ROM arrays as bytes and as text, and
allows you to edit them.
- The List Editor allows you to
edit the values in the main list.
- The SPCViewer shows the header,
the ID666 tag and the extended ID666 tags of a SPC file. It also loads the data into
vSNES, so you can view the variables in the main window's
APU list and the arrays in the HexViewer.
- The Movie Editor allows the loading, viewing, editing and saving of SMV
and ZMV movies. (ZMV support still incomplete.)
- With the CHT Editor you can change the binary cheat code files of ZSNES
and SNES9x.
- The CartViewer has a second page that shows the content
of the internal ROM header, just as it is stored in the
ROM. It also allows selecting the correct ROM type if the
automatic detection fails; this might be required to get
correct HDMA table info.
There's lots of potential in vSNES, even an emulator would be
possible - but that would be a bit more difficult.
4. Requirements
You need a PC that can run Windows 95, or a compatible OS. The
program uses toolbars, so it won't work with Windows NT 3.51 or
older versions of Windows NT. The toolbars are designed to be
flat, so the version number of your COMCTL32.DLL file should be
4.70 or higher. (Only very few Windows systems have an older
version.) The color depth should be at least 16 bits per pixel,
and the resolution at least 800x600 pixels. A mouse is required
to access most buttons.
Note: The program is designed for the default font and colors.
Savestate files are quite small - only the cartridges, which are
loaded entirely into memory so that they can be edited, may take
up some space in RAM. (vSNES won't reject any file, even though
the largest commercial ROMs are 6 MB.) The internal structures take the most
memory - a bit more than 48 MB of free RAM should be enough.
Of course you should have a clue what you're playing with. ;) I
won't explain the internals of the SNES in this file.
5. Installation
Install vSNES just by extracting the files into their own
directory. The INI and TXT files of the different versions may be
incompatible, so using a previous vSNES directory is NOT
recommended!
6.
De-Installation
Just delete "vSNES.exe" and the files that came with
it. No changes to the registry are made, and only the file
"vSNES.ini" is created automatically.
7. Interface
You may drop a savestate file onto the "vSNES.exe" file
to load it immediately. vSNES won't complain about files that are
too small or too big. If the file isn't a compatible savestate
file, you'll see only garbage - if you're not lucky and the file
contains invalid data, vSNES will crash.
The interface is build of the standard controls that are included
in Delphi 5.0, so you shouldn't have problems with the basic
usage. Most toolbar buttons are switches and control the
visibility of their corresponding window. ESC closes the active
window.
 |
1 |
2 |
3 |
4 |
5 |
6 |
The toolbar consists of six parts:
- loading, reloading, saving and launching (i.e. executing) savestate files
- loading, reloading, saving and launching cartridges
- SPC viewer, Movie Editor and CHT Editor
- the tool window buttons: Preview, PalViewer, MemViewer,
SceneViewer, HexEditor and ListEditor
- Options window and Help button
- Quit button
The 5th button is for inserting cartridges, i.e. you can link
to any file you want, preferably SNES or GB ROMs. Note that only
the first file in a ZIP archive is loaded.

In the statusbar you can see:
- the slot of the savestate
- the savestate name
- the cartridge file name
- the cartridge ROM size
- the cartridge SRAM size, if a SRM file or structure was
found
Between the toolbar and the statusbar there's an area with six
lists. Basically it's the content of a savestate file minus the
arrays, and some comments. It relies on the file
"SNES.txt" which must be in the same directory as
"vSNES.exe".
ZSNES movie files contain a savestate followed by the keystrokes,
so you can use them as well.
The custom "savestate" and "cartridge"
dialogs update their lists when vSNES gets the focus. Note that
the CartViewer displays only the info in the internal ROM header
- it doesn't check them. Use NSRT to detect bad checksums and/or ROMs.
7.01 Global
shortcuts
F1 |
= |
clicks the help button, which launches the
default browser |
F2 |
= |
clicks the save button |
F3 |
= |
clicks the open button |
F4 |
= |
clicks the HexEditor button |
F5 |
= |
clicks the reload button |
F6 |
= |
clicks the cartridge button |
F8 |
= |
toggles "update MemViewer and PalViewer" in
options |
F9 |
= |
clicks the "update the INI file now" button
in options |
ESC |
= |
closes the topmost window |
Alt + F4 |
= |
clicks the quit button |
7.02 Preview
window
 This
window shows the picture that is stored in the last 7 KB
of a ZSNES savestate file, or in a Super Sleuth savestate file. You can increase or decrease
the zoom level from 1x up to 8x, and save the bitmap via
the "middle mouse button" function.
Older ZSNES savestate files may have missing or invalid
previews. ZSNES movie files don't have a preview. Files that
were saved via the ZSNES GUI show a picture of the GUI
instead of the game.
NOTE: The ZSNES preview detection will fail if a ZSNES
savestate file contains no preview, but at least 7168
bytes of "custom chip" info. This should be
very rare though.
|
7.03 PalViewer
 The
PalViewer shows the 256-color table that is used by the
SNES graphics system. You can select a color to view the
RGB attributes, the HTML string, the group it belongs to
and the index.
You can change the color by double-clicking a color or by
clicking the panel at the bottom. A color selection
dialog will appear, with the 16 colors of the currently
selected row as custom colors.
The topmost button inverts all RGB values. This is useful
for screens that use the "color subtraction"
feature, e.g. in the level "Torchlight Trouble"
of DKC.
The two lower buttons allow loading and saving the
palettes from and to a palette file. See the options for the format of the files.
|
7.04 MemViewer
 The
MemViewer shows the decoded tiles of the VRAM, WRAM or
cartridge ROM. You can choose the bit depth, source
offset and size of the viewing window. You can also save
the window content to a BMP or PNG file (with the used palette
part) or copy it to the clipboard (without palette), and
set the zoom level of the window.
The colors in the window depend on the selected bit depth
and the selected color in the PalViewer.
For example, when the MemViewer is in "2-bit"
mode, the window has a maximum of 4 colors. Dividing the
256 colors of the palette by 4, you get 64 color groups.
The group selected by the PalViewer's selected color is
used for coloring the pixels in the window.
Just try it, it should become clear then.
|
7.05 SceneViewer
This window shows the current screen and the parts it consists
of, i.e. the four regular backgrounds, the sprites, the Mode7
backgrounds, the HDMA tables and the offset-per-tile tables. You
can use the buttons at the top to switch between the sections.
The info page shows some values from the main window's PPU list
in a more readable format.
7.05.1 Screen
rendering
The screen rendering
is still incomplete, especially the 16-bit mode. I don't
know all details of how the SNES renders the screen and
there may be bugs in the current implementation, so don't
expect the output to be perfect. Anyway, vSNES' primary
purpose is to show the raw layers.
On the right side you can toggle the visibility of the
layers for the MainScreen and the SubScreen. The first
item of the checklist ('sprites priority 3') is the
topmost layer in the screen - unless the "BG3 p1 on
top" checkbox is checked and BG Mode 1 is selected.
Naturally, the screen rendering time will increase with
the number of visible layers.
The "show entire screen" feature from vSNES 1.37 will probably never be
implemented into the newer versions.
For the 8-bit screen you can select with the "main
and sub" checkbox if you want to see just the
MainScreen or the SubScreen, or both. Use the two buttons
at the top to select the source when the box is
unchecked.
In the "screen configuration" box there's a
panel with four buttons. You can use them to quickly
activate all backgrounds or sprites, to invert the
layering or to reload the original setting.
There're always three buttons in the lower right corner.
The left one controls if your mouse buttons will zoom or
move the images. You can use the middle mouse button (and
the right mouse button in "move" mode) to
switch between the modes. (Your middle mouse button must
be configured to use the "middle mouse button"
function. Some mouse drivers (e.g. Logitech's) allow you
to assign a special function to this button, which won't
be detected by vSNES.)
If the "update" button (in the center) is down,
then the current image will be updated when a new
savestate has been loaded. The "save" button
(right) allows you to save the current image to a file or
to the clipboard. |
7.05.2
Regular backgrounds
 The four regular
backgrounds of the SNES and their attributes can be
viewed in the first part of the "layers"
section. Each BG display is build on-the-fly, so on
ancient systems (such as mine) there may be noticeable
delays when you switch to a huge BG. Each tile can have
priority 0 or priority 1, and you can select which tiles
you want to see. On the right side you can see the
currently selected tile and its attributes.
When the "DirectColor" feature is enabled then
each tile of the 256-color BGs can select from up to 2048
colors.
The transparency setting controls how the transparent
colors of the backgrounds will be treated: "no
transparency" shows them, and the other options will
set them to palette color 0, the "color
constant" or a color of your choice. The color
dialog that appears after you clicked the "custom
color" panel will have the leftmost palette column
as custom colors.
Note: Only the "no transparency" setting will
use an unmodified palette for the image. The other
settings set the first palette entry of each sub-palette
to the selected color.
|
7.05.3 Sprites
 The second page of
the "layers" part shows the 128 hardware
sprites and their attributes. You can focus the sprite
list (e.g. with the TAB key) and use the mouse and the
spacebar to hide sprites. Hidden sprites won't react to
mouse movements.
If two sprites overlap, then the sprite with the lower
index is on top.
The PPU chips of the SNES (PPU = picture processing unit)
are not fast enough to handle all possible situations. If
the number of sprites on a line exceeds 32, then the
sprites with higher indices will disappear. Sprites
consist of small 8x8 tiles, and when the number of these
tiles per line exceeds 33, then some of them won't be
displayed.
Some games rely on these "features" to hide
sprites.
|
7.05.4 Mode7
Backgrounds
 The third page of
the "layers" part shows the 128x128 8-bit tiles
of Mode7. The tiles cannot be mirrored, have no priority
of their own and are always 8x8 pixels in size.
BG1 always uses the entire palette. If EXTBG mode is
enabled then BG2 can be used, and the palette index of
each of its pixel controls if it has priority 1 (index
>= 128) or priority 0 (index < 128). You can use
the buttons at the bottom to select the pixels you want
to see.
Examples for EXTBG mode are Contra 2 (stage 2), the
Turrican intro, the Tiny Toons Adventures title screen
and Winter Extreme Skiing.
You can see the 256 Mode7 tiles in the MemViewer. Select the
"Mode7" and "VRAM" radiobuttons, and
set the offset to zero and the window size to 16x16 tiles
or more.
When the "DirectColor" feature is enabled then
BG1 can use the first 256 colors of the DirectColor
table.
|
7.05.5 HDMA
 This page displays
the 8 HDMA tables.
Note that the address decoder only works correctly with
the standard memory map. It also does not wrap at
bank/segment boundaries, though most cartridges should
not require it.
Most HDMA tables require the ROM and a correctly set ROM
type (LoROM/HiROM).
|
7.05.6
Offset-Per-Tile
 In the BG modes 2,
4 and 6 this page displays the offset-per-tile tables. The active row of
values is highligthed.
|
7.06 HexEditor
 The HexEditor can
be used to edit the large data arrays that can't be
edited in the main window's lists. The section at the top
selects the data source. The section in the middle shows
the offsets, the bytes and their text representation. The
bottom part contains the controls to navigate in the
data, and to select the visualization.
The leftmost box selects the source offset, and works
almost as its counterpart in the MemViewer.
You can choose to jump entire windows or just lines.
The third box shows the numerical values at a memory
location. You can select this location by moving the
mouse cursor over the data.
The first button in the rightmost box is for toggling the
move/edit mode. When the second button is down, editing
the data will cause the HexEditor to instantly copy the
modified data back to its memory source. The right button
shows the search window; it can also be activated via
"F7" or "Ctrl+F".
The buttons in the second line are for copying the window
data & entire data to the clipboard, and saving the
entire data to a file. After copying to the clipboard,
the data will be in the CF_TEXT structure, with all
zeroes replaced by spaces.
|
7.07 List Editor
 The List Editor allows you to
edit the items in the main window's lists.
The "restore" function sets all items back to
the values of the last savestate loading. Only the six
lists will be restored, not the arrays (e.g. the color
palette).
|
7.08 SPCViewer
 The header's signature and
version number should not be changed. The "dump
date" comboboxes are in the order Year-Month-Day.
The extended ID666 tags can be of several types. Each
type has an ID value (0..255) that describes the data
format (bits, byte, word etc). You can't change the
relationship between ID and data format, but you can
change the ID value.
|
7.09 Movie Editor
 The header's signature and version number
should not be changed.
The left 's' is the 'Select' key; the right 'S' is the 'Start' key.
ZMV support is still incomplete.
|
7.10 CHT Editor
 The CHT Editor supports CHT files saved by
current builds of ZSNES. Older files from ZSNES versions prior 0.900c
are not supported.
The description text can be up to 18 characters long. Files saved by
SNES9x can have up to 19 characters; the additional character will be
removed to follow ZSNES' standards.
Game Genie codes are not supported.
|
7.11 Options
The options window allows you to
change some details of vSNES that wouldn't be accessible
otherwise.
The "start maximized" checkbox on the
"main" page determines if the main window will
be maximized after creating. There is a short delay
caused by the way Delphi forms are created.
The first checkbox on the "options" page
determines if savestate and cartridge file links in the
main window will be checked when vSNES starts. File links
that no longer point to an existing file will be removed.
If the second checkbox is not checked, then the bitmaps
will be copied (without palette) to the clipboard instead
of being saved (with palette) to a BMP or PNG file.
On the "PalViewer" page you can select the
format of palette files. The color triplets in saved
JASC-formatted files will have leading zeroes. The format
is quite self-explanatory and can be used with Paint Shop
Pro, Animation
Shop and Microangelo.
If the checkbox on the "quit" page is not
checked, vSNES will quit immediately instead of waiting
for a click onto the "yes" button of the
"quit" dialog.
The radio buttons on the left side of the
"SceneViewer" page determine when the SceneViewer will use the second
sprite base pointer of savestates. In the SNES, the
second pointer is used for tile indices > 255. These
radio buttons are useful in certain situations, for
example in the Single Player race mode of Super Mario
Kart.
The second checkbox (in the "misc." section)
determines if selecting a tile in the SceneViewer will cause the MemViewer and PalViewer
to update their settings accordingly. You can use F8
everywhere to toggle this checkbox. |
8. GB cartridges
SNES games use the same tile formats as the
Gameboy (1 and 2 bits), so you can view its cartridges in
vSNES. Just load the cartridge in the main window and a
useable palette in the PalViewer.
You can find a palette designed for GB graphics in the
vSNES directory.
Support for the tile formats of other systems is not
planned. |
9. Known
limitations
- The mosaic effect does not work correctly on hi-res
screens.
- The pseudo-hires effect is not accurate, though it should
give good results in most situations (e.g. Jurassic
Park).
- The positions of the backgrounds may be incorrect in some
games. This can be caused by HDMA operations and IRQs;
the line on which the emulator saved the information is
also important. For example Yoshi's Island displays
(almost) correctly in SNES9x savestates, but not in ZSNES
savestates. Current versions of ZSNES save on the last
line, SNES9x saves on the first line.
- The scrolling of zoomed images may be quite slow on
certain configurations. This seems to be an issue of
buggy or outdated graphic card drivers or graphic cards.
Of course the ATI Rage Pro falls into that category -
setting the desktop color depth to 16 bits per pixel may
help here.
- Detecting the "Alt+F4" shortcut may fail in
Windows ME. According to a user report it works there,
but this might be due to up-to-date drivers.
- Bitmaps copied to the clipboard will use the desktop
color depth (and a shared palette, if the display is set to 256 colors). A work-around (e.g. for Paint Shop Pro)
would be very time-consuming, and would only work for
special cases.
10. Future plans
These are some thoughts about the possible direction for vSNES.
It's still completely open what features will be implemented, if
any.
- my own text-based (and compressed?) savestate format
- memory-mapped structures for better data exchange
- adding batch support, or writing small tools for batch
processing
- support for RAR, ACE, JMA, ...
- support for Drag'n'Drop
- better error-handling
- less bugs
vSNES is now mostly a gfx viewer, not an editor. I don't feel
like adding any serious gfx or sound editing functions, though I
also won't stop you from modifying the source accordingly.
11. Resources
- the cartridge glyph is a scan of the Star Ocean cartridge
- the preview/move mode glyphs are from The Settlers 2
- the +/- glyphs are from the Transport Tycoon demo
- the SceneViewer glyph is from the intro of Jungle Book
- the exit window graphics are from the Seek and Destroy
demo (Safari Software)
- the colors in the main window are inspired by the Norton
Commander
- the hand/move cursors are from the Acrobat Reader
- the pick/zoom cursors are from Paint Shop Pro
- the copy button of the HexViewer is from Yoshi's Island
- the List Editor glyph is from Chrono Trigger
- the "zipped ROM" icon is from Winzip
- the "Movie Editor" glyph is from the nesvideos website
- the "CHT Editor" glyph is from the game "Mario and Wario"
- glyphs from Win98's cool.dll: loading, saving, MemViewer,
HexViewer, launch/action, options, help, exit, browse
12. Internal
structures
The biggest one is the structure that stores the 4 regular BG
tilemaps. A tile consists of 32x16 bytes, with 3 padding bytes
per pixel for faster CPU access. A regular tilemap consists of
64x64 tiles, so with 4 of them 32 MB are already reached, plus
the tile info which adds 640 KB.
The GDI bitmaps also take some MB. The Mode7 bitmap (8-bit) is
1024x1024 pixels in size, the sprite bitmap (8-bit) is 576x320
pixels and the BG bitmap (which is 8-bit, and is shared by the
backgrounds) can also reach 1024x1024 pixels. Both screen bitmaps
(8-bit and 16-bit) can be 576x478 pixels. Altogether these
bitmaps can take ca. 2.96 MB.
One sprite has a bitmap of 64x64 bytes, again with 3 padding
bytes per pixel. For 128 of these bitmaps 2 MB are need, and
again the info takes 640 KB.
The Mode7 tilemap (128x128) takes only 64 KB, and the 256 tiles
the same amount of RAM.
13. Credits
Thanks goes to everybody who helped the emulation scene, and
especially to:
- byuu for persevering efforts to shed light on things
-
Nightcrawler for suggestions, bug reports, and RomHacking.net
-
Overload for
Super Sleuth, and details about registers 4016h and 4017h
-
anomie for extremely valuable details about the SNES, and for pointing
out some errors in the doc I wrote
- Heian-794 for inspiring the hex. display in the SceneViewer
-
Muetze1 for the info about destroying palettes, and SetDIBColorTable
-
pagefault for his support
- Parasyte for recommending vSNES :)
- Piken for writing
BGMAPPER, and for the ZST file format description on
his site
-
Shogetsu for suggestions and bug reports
-
Sprint for the info that allowed me to move the "browse" window in the
"open" dialog
-
StatMat and
Nach for details about the preview image
-
RetroK,
Road etc. for hosting a mirror of the vSNES website
Special thanks to Nintendo; without their products our lives
would have much less fun and many programmers still a perfectly
normal working brain.
14. Links
http://vsnes.aep-emu.de/
mirror for the vSNES part of my homepage
http://www.geocities.com/illegal_eagle_2003/
my homepage
http://board.zsnes.com/phpBB2/profile.php?mode=viewprofile&u=100114
http://board.zsnes.com/phpBB2/profile.php?mode=viewprofile&u=100
my accounts at the ZSNES board
creaothceann@web.de
Hoffmann.Robin@web.de
my email addresses
http://oregonstate.edu/~robinsfr/snes.html
Piken's website, author of BGMAPPER and useful docs
http://www.zsnes.com
homepage of ZSNES, IMO the best SNES emulator around - check out
the latest WIP
versions
http://www.snes9x.com
Homepage of SNES9x, another good SNES emulator - improve the GUI,
guys... ;)
http://www.zophar.net
older site about emulation in general - useful to get an overview
http://romhacking.net/
even better than Zophar's Domain
http://www.alpha-ii.com
homepage of Anti Resonance, creator of SNESAmp (the best SPC
plugin for Winamp)
http://www.snesmusic.org
good SPC archive, i.e. full soundtracks with complete use of the
ID666 tag
http://byuu.cinnamonpirate.com/
homepage of byuu, author of one of the most accurate SNES
emulators
15. Version history
v2.91
- GUI: added controls for displaying CRC32 and Hi/LoROM checksums
- GUI: moved the IPS checkboxes in the options to the cartridge page
- GUI: fixed a small issue with the CHT Editor and changed its glyph
- GUI: added Edit control to display SMV UIDs as Unix dates
- SRC: fixed IPS patching again; added more messages in case it fails
- SRC: fixed the SMV code to use the new SyncOptions flag location
- SRC: added more functionality for managing extended SPC ID666 tags
- SRC: disabled ZMV loading button since the ZMV code is broken
v2.9a
- GUI: added sprite size mode info to SceneViewer's info page
- GUI: fixed updating ROM info page when the ROM is edited
- GUI: CHT Editor now scrolls to selected item after loading a new table
- GUI: fixed version number in title bar and task bar
- GUI: fixed some spelling in the program and the documentation
v2.9
- new tools: Movie Editor (SMV, ZMV), CHT Editor
- new fields in the Cartridge window due to new SNES documentation at
romhacking.net
- GUI: added checkbox for keeping the MemViewer memory source after
loading a cart
- GUI: added Ctrl+? shortcuts for accessing the buttons
- SRC: added code for rendering 256-color BGs in DirectColor mode
- SRC: fixed sprite tile wrapping, incorporates DMV27's sprite visibility
info
- SRC: fixed sprite rendering (ypos. was off by one pixel)
- SRC: added better support for SNESGT savestates (still not perfect
though)
- SRC: using a new, stream-based library for handling compressed files
- SRC: fixed screen rendering to output 5 bits per color channel, not 8
- SRC: added padding bytes to records ($align seems to have no effect)
- SRC: fixed some ListEditor issues
- SRC: IPS patching (hopefully) fixed
v2.85
- SRC: added support for IPS files
- SRC: fixed a bug in the main window's display of shifted values (eg. CGAddB)
- GUI: fixed code and GUI to scale better according to the current DPI
setting
- GUI: fixed some issues with HexViewer's rendering
- GUI: added checkbox to control updating of the main lists
- GUI: added button for using DirectColor on regular and Mode7 BGs
- GUI: removed black outline on blurred screens by copying the adjacent pixels
- GUI: adjusted updating the 8-bit and 16-bit images so that switching appears seamless
- GUI: set checking of ZST headers to enabled by default
- GUI: separated memo component for cartridge extensions into its own groupbox
v2.8
- new mirrors at
AEP
and SNES
Emulation
- GUI: better support for non-standard font sizes and colors (thanks to
Nightcrawler for testing)
- SRC: added offset-per-tile effects to rendering (Mode4 and Mode6 are not tested)
- SRC: improved the SPC code, added ability to save; no adding/removing of
the extended tags
- SRC: partial support for SNESGT savestates (only
arrays)
- SRC: adjusted start and end of the visible area in the Screen rendering
- SRC: fixed error message that appears when SNES.txt is not present
v2.7
- SRC: added support for PNG files and Super Sleuth savestates
- SRC: improved rendering (hi-res, mosaic and interlace screens, sprite RTO)
- SRC: added support for DirectColor BGs to SceneViewer and
MemViewer
- GUI: SceneViewer now renders to 512x4?? by default, with soft
blurring
- GUI: added a bit more functionality to the custom file dialog windows
- SRC: fixed detection of some ColorWindow settings
- SRC: added code for saving and restoring the Preview
window's zoom
- SRC: added check for backspace key in CartViewer
- SRC: fixed saving bitmaps to clipboard from the
SceneViewer
- SRC: various smaller fixes and corrections
v2.52
- GUI: fixed updating of SceneViewer's layer
control groupbox
- SRC: added temporary hack for interlaced
screens so that no more exceptions will occur
- SRC: for some reason exceptions don't
appear by default, added code for displaying them
v2.51
- GUI: added some cartridge buttons to the
main window
- SRC: changed SceneViewer updating from
"brute-force" to "structured"
- SRC: changed rendering engine to use normal
rendering for H-512 mode
- SRC: (hopefully) fixed some file link
issues of the main window menus
- SRC: fixed stupid oversight in HDMA
direction detection
v2.5
- GUI: new HexEditor code and interface
- GUI: added decoder option to MemViewer for displaying
EXTBG colors correctly
- GUI: added code to make use of the "brightness
info" checkbox in SceneViewer
- GUI: added custom drawing code to the menus in the main
window
- GUI: changed behavior of the buttons in the "screen
configuration" box slightly
- GUI: changed the checkboxes in options to be checked by
default
- GUI: changed format of the SceneViewer's "info"
page a bit
- GUI: changed all "fixed color" references to
"color constant"
- GUI: changed CartViewer's minimum height back to 464
pixels
- GUI: removed the need to restore the main window to
obtain its position and size
- SRC: massive restructuring to make the program parts less
interconnected
- SRC: rewrote the HDMA code according to the latest docs
- SRC: added a new internal messaging system
- SRC: rewrote the ListEditor code, and changed the GUI
slightly
- SRC: changed format of the "type" column in
SNES.txt
- SRC: replaced default INI solution with my own INI code;
no more delay on some systems
- SRC: added workaround for what seems to be zLib's
inability to handle long filenames
v2.2
- GUI: fixed oversight - number of digits in
"bit" columns was 4x hex. digits instead of
exact value
- GUI: changed SceneViewer to display the exact screen
layering (instead of Mode1 layering)
- GUI: disabled "refreshing by cur. directory" by
default since "refreshing on receiving focus"
is much better
- GUI: adjusted the minimum height of the cartridge viewer
- SRC: fixed rendering of interlaced screens
- SRC: fixed two known memory leaks in Delphi's RTL source
and included the fixed units
- SRC: added code to remove the previous cartridge before
switching to another savestate
- SRC: added exception-handling to SceneViewer's HDMA code
(eg. for Ogre Battle map screens)
- SRC: vSNES will now complain only once per cartridge
about a missing ROM file
v2.1
- GUI: fixed the offsets in the ZST list
- GUI: fixed MemViewer's offset not being zero upon program
start
- GUI: added support for Mode7 BG2, thanks to anomie
- GUI: added custom cartridge dialog for loading ROMs &
viewing their headers
- GUI: added optional current directory in custom file
dialogs for faster manual refreshing
- GUI: added checkbox in options for keeping sprites
disabled when loading a savestate
- GUI: added code for updating the dialogs when the
application gets focus
- GUI: added more code to set lower-/uppercase text
depending on un-/used priorities and BGs
- GUI: added shortcut for the cart. viewer (F6) and for
updating the INI file (F9)
- GUI: added 8x and 1/8x magnifications for MemViewer and
SceneViewer
- GUI: added code for scrolling to OpenDialog's selected
directory
- GUI: added code for saving the preview bitmap via middle
mouse button
- GUI: replaced help window with HTML documentation for
even more formatting
- GUI: replaced some SceneViewer checkboxes with labels
- GUI: changed OpenDialog's minimum height to 256 pixels
- GUI: removed restore function from the buggy List Editor
for now
- GUI: removed "DefaultExt" from
"DlgSave_SNES"
- SRC: fixed several bugs in the DMA/HDMA code
- SRC: fixed one stupid bug in the ZST-saving code
- SRC: fixed S9X DMA info import and export (at least
partially)
- SRC: added support for zipped ROMs (only first file in
archive)
- SRC: modified SNES.txt and the INI format
- SRC: some other small changes; improved speed a tiny
little bit
- SRC: removed SNES docs and put them into their own
package; added anomie's docs
- SRC: removed code for loading resources, and put them
back into vSNES.exe
- SRC: added "_make" and "_dcu"
directories
v2.05
- fixed drawing order for BG modes 2..7, thanks to anomie
(and byuu)
- fixed a bad oversight - DMA section used registers 42??
for DMA info instead of 43??
- fixed a bug that removed menu previews when cartridges
were loaded
- fixed some unintended behaviour of the Open dialog's
configuration reading
- completed: changes to the non-ZST sections will update
the ZST section
- added a S9X section in the main window, and S9X
savestates can be loaded
- HexViewer: rewrote display 'engine', added search
function and Splitter control
- added "offset-per-tile" info to the scene
viewer - but not used in screen rendering
- extended List Editor to 64 bits
- added code for loading HexViewer codepages
- added MGH and DX2 as ROM extensions
- added more formats for palette files: raw (5-bit, 8-bit),
JASC, SNES
- hex. offsets by default for MemViewer and HexViewer
- question marks for registers that weren't set by a data
source
- added option for checking the header of ZST files (used
by the "open SNES" window)
- disabled the PixelsPerInch-based scaling on all forms
- Open dialog: disabled the AutoSnap feature of the right
Splitter control
- relocated some info in the SceneViewer and the HexViewer
- improved screen rendering slightly
- the INI file will be erased before saving, so that the
sections are in the specified order
v2.00
- GUI rebuild due to Delphi saving project cfg files just
as power outage hits...
- removed old rendering engine
- vSNES now uses its own SNES structure instead of a ZST
structure (major rewrite)
- main window: five lists (four SNES, one ZST), offsets in
ZST section
- the menus got pictures
- help window: "Windows" look due to more text
per line, RTF for formatted code
- open dialog: "browse" window opens in the
center
- PalViewer: relocated the info (should be final)
- MemViewer: "FX" decoder, better zoom, options
for hex. offsets and jumping entire lines
- SceneViewer: new engine (8-bit and 16-bit, both with
missing features though), support for high-res, new
buttons for selecting visibility, color 0 for
transparency, info screen, removed "mode7 info"
box
- HexViewer: restructured, always with gridlines, DOS font
thanks to PCXDUMP, but still incomplete and slow
- List Editor: removed "size" box, PLEASE NOTE:
in this version, changes to the non-ZST sections won't
update the ZST section
- added SPCViewer (incomplete, only viewing)
- options: multiple lines, hex. offsets for MemViewer and
HexViewer, preview filtering, more extensions, hex. info
in PalViewer, spaces for the info screen
- updated SNES.txt file
- new GB.pal file
v1.37
- fixed priority bug in "sprites" screen
- fixed bug in main/sub screen detection
- rewrote the MemViewer drawing, slightly better memory
usage and speed
- enabled the screen mode selection (though not all
features are supported)
- the custom open dialog will update its lists upon opening
- renamed "ZST.txt" to "SNES.txt" and
added one list to the main window
- added button for setting the font of the main list
- added cartridge ROM size info to the statusbar
- sprite palette info will show values of 0..7 instead of
8..15
- switched positions of the "bg color const" and
"no transparency" radiobuttons
- "bg color constant" radiobutton is checked by
default
- screen brightness won't be applied by default
1.35
- fixed bug in HexViewer that occured on loading cartridges
- text copied from the HexViewer to the clipboard will have
spaces for zeroes
- added checkbox for copying bitmaps to the clipboard (no
palette though)
- added code to save the data source offsets in HexViewer
and MemViewer
- added code to save and load the column widths of the
listviews
- implemented various smaller bugfixes
- updated Help.txt
v1.34
- fixed assigning BG3's transparent palette
- added checkboxes for displaying the sprite and tile
indices in hex.
- added an "h" to all hex. numbers in the
SceneViewer
- cartridges will be loaded entirely into memory
- added checkbox for skipping cartridge headers
- the currently selected color will be highlighted
- renamed the TextViewer to HexViewer and redesigned it
almost completely
- added SRAM size display in main window
- checkbox setting for loading carts will be saved
- added missing dot in the cartridge-searching code
- added shortcut info to hints
- added shortcut list to Help.txt
- added support for Alt+F4 which was broken since the quit
dialog was added
v1.32
- added checkboxes and a button to the sprite list
- added List Editor and a button for saving
- divided the main list into three parts
- added some lines to ZST.txt that show the first few bytes
of "tempdat", thanks to pagefault :)
- improved the preview detection
- fixed a tile info bug in the SceneViewer
- added checkbox for keeping the layering settings in the
SceneViewer
- open dialog updating after toggling the "use
previews" checkbox is faster
- added checkbox for gridlines in the main window
- added checkbox for gridlines in the custom
"open" dialog
- forgot to save the active page of the options window,
fixed
- added some code to show in the statusbar if a movie is
loaded
- used the old compiler version again - just don't load
invalid savestates
v1.31
- used English version of the compiler for the error
messages
- added custom "open" dialog
- fixed a "divide by zero" bug in the SceneViewer
- added URL to homepage to Help.txt
- tweaked MemViewer, PalViewer and TextViewer interface
- text search is much faster than before
- topmost window will be activated when vSNES is restored
- forgot to implement code for saving the customizeable
colors, fixed
- added displaying the info after byte 199699, so ZST.txt
is required
- added checkbox for INI saving on exit, and button for
saving immediateley
- in the INI file, colors will be saved as hex. strings
- vSNES starts maximized by default
- improved scrolling in the sprite list
- changed entry style in the INI file
- closing the topmost tool will directly focus the next one
v1.30
- fixed transparency setting changes
- fixed mirrored tile drawing, thanks to Firemen and its
large sprites
- re-inserted glyphs
- enabled double-buffering in quit dialog
- swapped positions of the jump buttons & checkboxes in
MemViewer
- adjusted caption formatting
- added reload button (shortcut = F5), enabled if savestate
list is not empty
- added options dialog and TextViewer
- added "launch" button (uses ShellExecute)
- aligned memo in Help window to client; set colors as in
Edit.com
- added some code for application object (eg. global
hotkeys)
- selecting the Mode7 layer window hides some tile info
components
- child windows won't get called if a SNES or cartridge
dialog is active
- tweaked MemViewer and PalViewer interface
- mouse cursor clipping is more accurate (for Windows NT
systems)
- tweaked loading and saving of INI settings
- added priority buttons to background and Mode7 layer
pages
- SceneViewer caption uses dots instead of commas for zoom
levels < 1
- help window will be displayed if no INI file was found
- shifted bg layers by one pixel in the screen rendering
- separated graphics engine code from SceneViewer unit
- Update button for backgrounds and sprites
- tile selection in SceneViewer affects MemViewer and
PalViewer
- second sprite base pointer gets used by the SceneViewer
- window visibility is saved
- added support for EXTBG
- fixed help file
- tweaked list display code in main window
- added checkboxes for brightness and "all screen
data" in SceneViewer
- added group info in PalViewer
- added percentage display to MemViewer
- enabled layering control in SceneViewer
- added ASCII art to the help file
- and much more...
v1.26
- tweaked the glyphs a bit
- made custom color panel a bit less 3D
- added spaces to the xres/yres labels in MemViewer
- the color dialog has the colors of the first palette
column as custom colors
- the mouse cursor area gets clipped when selecting a color
in PalViewer
- fixed BG3 palette handling
- fixed scroll info truncation (or not?)
- Mode7 updating is 18 times faster! I can leave it enabled
now on my P2-350
- tweaked the bg listview (new columns, new order)
- middle mouse button toggles move/zoom mode (check your
mouse settings)
- added basic screen updating
- "update sceen" button status will be
saved/restored via the INI file
- changed the INI key for the "update mode 7"
button status
- some "layering" groupbox items get changed on
loading a SNES
- the topmost tool window won't get called if a file dialog
is active
v1.25
- added tabcontrol for 8/16 bit screen selection
- added buttons to save the screen and the layers (only
layers work)
- added buttons to select the move mode, which works now
too :)
- Mode7 update on loading a SNES was broken, fixed it
- removed hints from tile info labels
- application/main title will keep the version number
- changed borderline color in "move" glyph to
black
- added code to visually update buttons before showing
their actions
- changed zoom code to allow levels < 0, so the images
may shrink now
- added transparency groupbox
- fixed tileview pos info for large tiles
- scroll info values get truncated to useable values
- hex and dec columns start with zeroes (as the bin columns
already did)
v1.20
- fixed some features that got broken by new code and
carelessness
- arrow keys will focus plus/minus button if counterpart
had been disabled
- alignment of tile info labels set to RightJustify
- size label placed as last label
- FINALLY sprites work in all sizes and mirror modes.
Yippee!
- hopefully they're drawn in the right order, too
- tweaked size of tile info labels
- replaced preview glyph with Settlers2 zoom lens
- some tile info labels will become disabled when Mode7 is
selected
- added checkbox for background color constant
- added button for inverting palette (for Torchlight
Trouble (DKC) and others)
- file dialog buttons stay down (except buttons with file
lists)
- removed saving and loading of PalViewer's width and
height
- tile info code draws transparent tiles now
- 16x16 BG tiles finally work, too! Check out the levels of
Yoshi's Island!
- Mode7 zoom won't stop at 2x anymore (may be slow with
poor gfx cards)
- changed hotkey of Mode7 update checkbox to the first
letter
- bg-listview selection matches bg-tabcontrol upon startup
1.10
- new palette setting code
- removed "update Mode7 on palette change"
checkbox
- smaller "sprites" listview
- sprite loading code fixed
- not crashing in Win2k anymore (dunno why)
- quit window shows DOOM exit messages
- "clear list" menu items get disabled when files
could not be found
- added "size" label to tile info (still
incomplete for sprites)
- changed "[unknown]" caption to "priority
bit"
- fixed SNES loading path (main window) and Mode7 saving
path
- "update Mode7" button disabled by default
- updated Piken's name & URL in Help.txt
- fixed default settings of MemViewer
v1.00
- uses INI files
- better interface
- more features
- crashes on Win2k machines :/
v1.00 BETA
- initial release, only for some selected persons
"That is all, Material Defender. Prepare for
Descent."
- PTMC