mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-04-02 10:42:14 -04:00
Major accuracy improvements have happened over the past few days. They easily warrant a new beta release. First, it turns out that every emulator to date; not only for the SNES, but for the Apple II GS as well, incorrectly computed ADC (add) and SBC (subtract) flags in BCD (binary-coded decimal) mode. At least fifteen years of emulating the 65816 processor, at least five known investigations into their behavior, and we all still had it wrong. So I wrote some tests that dumped every possible combination of adc and sbc with every possible input and every possible flag, and recorded both the accumulator result and status flag register. From here, blargg figured out the underlying trick: the CPU was computing overflow before the top-nibble's BCD correction pass. With the routines rewritten, bsnes perfectly matches real hardware now. Next, some background. The whole reason I got into SNES emulation was because I was tired of writing code that ran perfectly fine on emulators, but failed miserably on real hardware. The number one problem was emulators allowing video RAM to be written while the screen was being rendered. This single bug has broken dozens of fan translations and ROM hacks. Some have been updated to work around this bug, and many others are left in a permanently broken state (such as the translations of Dragon Quest I & II and Sailor Moon: Another Story, to name just two.) After asking emulator authors to fix this since 1997, I finally had enough in 2004 and started on bsnes. For this particular bug, I'm very happy to report that all but one SNES emulator now properly blocks these invalid accesses. Although sadly one still offers a configuration setting for backwards compatibility with these translations. What an ironic shame ... emulating an emulator. And in the process, sapping the motivation to ever go back and fix these titles to ever run on real hardware. But I digress ... The second biggest problem that causes software created under emulation to break on real hardware has, without a doubt, been the hardware delays as the S-CPU computes MUL (multiplication) and DIV (division) results. To date, whenever you used this hardware functionality, emulators have immmediately furnished the correct results. But on real hardware, multiplication requires eight CPU cycles, and division requires sixteen. Each step computes one bit of the source operand and updates the results. Reading the output registers early thus provides the partially computed results. This is obscure. It isn't well known, and many people writing software for the SNES probably aren't even aware of this limitation. Because of the partial computation results, outright delaying the computation would break many commercial software titles. But by not emulating the delay at all, we were causing a great disservice to anyone wishing to use an emulator for development purposes. Now, once again, thanks to blargg's algorithm help, he has determined the underlying multiplication and division algorithms. Combined with my expertise of SNES analysis and hardware testing, I was able to determine when and how the ALU (arithmetic logic unit) stepped through each work cycle. Our work combined, bsnes now also perfectly emulates the hardware MUL and DIV delays. Again, this isn't going to fix commercial software titles. They would have realized that they were reading back invalid MUL and DIV values, and fixed their code. This is for all of the software developed using emulators. This is an extension of my commitment to create a hardware emulator, and not a video game emulator. We also verified that the S-PPU multiplication interface does indeed return instant results with no delay. So emulation of that interface was already correct. I'm only labelling this release a beta because it hasn't been tested. But I'm fairly confident that it is stable, and I seriously recommend upgrading from v060 or prior releases. This is easily one of the last major pieces missing from emulation. The last notable elements are: S-CPU auto joypad poll timing, S-CPUr1 HDMA crash detection, S-CPU<>S-SMP port ORing, S-SMP timer glitching, S-DSP mute pulse, and full cycle-level emulation of the S-PPU. With all of the aforementioned items, I will consider a v1.0 release of bsnes ;) Lastly, I'll post this screenshot just for fun. When d4s translated Breath of Fire II to German, he added some code that relies on the incorrect emulation of the DIV register to detect emulators. With this emulated properly, you now see the following screen: ./sshots/bs_349.png Sorry to spoil that, but the secret's already out, as the MESS team reported on it publicly already. I intend to add pseudo-randomness support shortly, which should eliminate one of the last vectors possible to distinguish bsnes from real hardware :) A million thanks to blargg for making this release possible.
267 lines
11 KiB
Text
267 lines
11 KiB
Text
|
|
|
|
WinRAR - What's new in the latest version
|
|
|
|
|
|
Version 3.80
|
|
|
|
1. Added support for ZIP archives containing Unicode file names
|
|
in UTF-8 format. When creating ZIP archive, WinRAR stores
|
|
names in Unicode only if they cannot be stored correctly using
|
|
the current single byte character set.
|
|
|
|
2. Added decompression support for WinZip AES encrypted ZIP archives.
|
|
|
|
3. Improved Unicode support for RAR and ZIP archive names.
|
|
|
|
4. "Ask before overwrite" and "Skip existing files" update modes
|
|
are now available in archiving dialog. They allow to specify
|
|
WinRAR behavior when updating already existing files in archive.
|
|
Unlike already available "Fresh existing files only" and
|
|
"Add and update files", these new modes ignore file date
|
|
and compare only file names.
|
|
|
|
Command line equivalents of these modes are:
|
|
|
|
a) switch -o enables "Ask before overwrite" archiving mode;
|
|
|
|
b) switch -o- enables "Skip existing files" archiving mode;
|
|
|
|
c) switch -o+ enables "Overwrite all" mode (default for archiving).
|
|
|
|
5. New "Add to context menu" option in "Profile parameters" dialog.
|
|
If this option is on, the profile name will be displayed in Explorer
|
|
context menus allowing to activate a profile from context menu.
|
|
|
|
6. New -cp<profile name> switch allows to select a compression profile
|
|
in command line mode. It is supported only by GUI WinRAR.exe,
|
|
not by rar.exe.
|
|
|
|
7. New "Options" page of archiving dialog contains the group of
|
|
settings modifying the behavior of "Delete files after archiving"
|
|
option from "General" page:
|
|
|
|
a) Delete files. Delete files normally like in previous WinRAR
|
|
versions.
|
|
|
|
b) Move files to Recycle Bin. Deleted files are placed to
|
|
Recycle Bin.
|
|
|
|
Command line equivalent of this option is -dr switch.
|
|
|
|
c) Wipe files. Before deleting file data are overwritten by
|
|
zero bytes to prevent recovery of deleted files.
|
|
|
|
Command line equivalent of this option is -dw switch.
|
|
|
|
All these options have an effect only if "Delete files
|
|
after archiving" is on. You can enable any of these options
|
|
in the default compression profile to change the default
|
|
behavior of "Delete files after archiving".
|
|
|
|
8. WinRAR "Extraction path and options" dialog is now resizable.
|
|
You can use the mouse to drag its border to the desired size
|
|
and provide more space for folder tree pane. WinRAR will store
|
|
new dimensions of this dialog.
|
|
|
|
9. New "Update" SFX script command and "Update mode" group
|
|
of options in "Update" page of "Advanced SFX options" dialog.
|
|
These command and options allow to check time and implement
|
|
file time based updating;
|
|
|
|
10. SFX script "Shortcut" command and "Add shortcut..." command
|
|
in "Advanced SFX options" dialog now allow to specify
|
|
an icon file containing an icon associated with shortcut.
|
|
|
|
11. New "Wipe temporary files" option in "Settings/Security" dialog
|
|
provides more secure, though slower, way to delete temporary
|
|
WinRAR files.
|
|
|
|
12. WinRAR and RAR display the total progress bar when unpacking
|
|
a multivolume RAR archive if all volumes are present
|
|
in the same folder.
|
|
|
|
13. WinRAR and RAR automatically expand names of environment
|
|
variables in list files. For example, a list file can contain
|
|
lines like:
|
|
|
|
%windir%\*.exe
|
|
%USERPROFILE%\Desktop
|
|
|
|
This feature is available only in Windows RAR version.
|
|
|
|
14. Added support of TAR archives with non-zero "extra field" data.
|
|
|
|
15. Added support of TAR archives, which does not contain
|
|
the end of archive entry consisting of 512 zero bytes.
|
|
|
|
16. Improved Unicode support when dragging files from WinRAR window.
|
|
|
|
17. Shift+Tab key combination can be used in main WinRAR window to
|
|
switch the input focus between interface elements (files, comment,
|
|
tree, address) in reverse order. In previous versions Shift+Tab
|
|
used the same order as Tab.
|
|
|
|
18. Corrected a possible WinRAR crash when opening truncated
|
|
UDF ISO files.
|
|
|
|
|
|
Version 3.71
|
|
|
|
1. Archive names in rar.log error log file always include
|
|
the full path.
|
|
|
|
2. WinRAR tray icon is compatible with high DPI display modes.
|
|
|
|
3. If you modified a file in archive with encrypted names using
|
|
an external editor, WinRAR will not ask for archive password again
|
|
when prompting to update a file. It will use a password which
|
|
you entered when opening an archive,
|
|
|
|
4. Bugs fixed:
|
|
|
|
a) switch -tl and "Set archive time to latest file time" option
|
|
could fail in previous version. Sometimes they set archive time
|
|
to current system time instead of latest file time;
|
|
|
|
b) if -ag switch mask contained archive number, month and minute
|
|
characters, WinRAR placed 'I' character instead of minute value
|
|
into generated archive name for archive numbers exceeding 1;
|
|
|
|
c) high ASCII names in ISO files using ISO 9660 format without
|
|
Joliet format extension were displayed incorrectly;
|
|
|
|
d) WinRAR could crash when decompressing some of corrupt RAR archives;
|
|
|
|
e) if "Turn PC off when done" option was set in "Convert archives"
|
|
command, WinRAR turned PC off after converting the first archive
|
|
in selected group instead of after converting the entire group;
|
|
|
|
f) if user specified a non-existent destination path in SFX archive
|
|
in Vista, SFX could enter into infinite "create new SFX window"
|
|
loop;
|
|
|
|
g) WinRAR could fail to unpack an individual file from subfolder
|
|
of ACE archive using the drag and drop.
|
|
|
|
|
|
Version 3.70
|
|
|
|
1. Numerous Windows Vista compatibility changes:
|
|
|
|
a) help format changed from old HLP to newer HTML based CHM;
|
|
|
|
b) GUI self-extracting modules attempt to request for
|
|
administrator permissions if they cannot create destination
|
|
folder under current user account;
|
|
|
|
c) Log file rar.log and WinRAR theme files are stored
|
|
in %APPDATA%\WinRAR folder instead of WinRAR program files folder.
|
|
|
|
Exported settings file settings.reg is also stored
|
|
in %APPDATA%\WinRAR folder by default, but it is possible to
|
|
select another folder in "Save WinRAR settings" and "Load WinRAR
|
|
settings" dialogs.
|
|
|
|
WinRAR searches for registration key and settings.reg
|
|
both in its program files folder and in %APPDATA%\WinRAR;
|
|
|
|
It is possible to set the string value "AppData" in Registry key
|
|
HKEY_CURRENT_USER\Software\WinRAR\Paths to override the default
|
|
%appdata%\WinRAR path for WinRAR settings.
|
|
|
|
For example, if you wish to store theme files in WinRAR folder,
|
|
set this value to "c:\Program Files\WinRAR".
|
|
|
|
d) Vista compatibility changes in WinRAR shell integration;
|
|
|
|
e) New "Request administrative access" option in "Advanced" page
|
|
of "Advanced SFX options" allows to create SFX archive,
|
|
which will request the administrative access when started
|
|
in Windows Vista.
|
|
|
|
Command line equivalent of this option is -iadm switch.
|
|
|
|
2. Added support for ISO 13346 (UDF) file format. This format
|
|
is frequently used in ISO images of DVD disks.
|
|
|
|
3. Added Unicode support for ISO 9660 files, so WinRAR should
|
|
handle non-English file names in .iso files better.
|
|
|
|
4. Design changes in window displaying archiving and extraction
|
|
progress:
|
|
|
|
a) it provides more space for file names, allowing lengthy names;
|
|
|
|
b) it displays the current archive name in separate line,
|
|
allowing much longer archive names than before;
|
|
|
|
c) when archiving, it displays the current compression ratio
|
|
in separate line;
|
|
|
|
d) it can use both standard Windows and classic WinRAR progress bars.
|
|
Turn on "Windows progress bars" option in WinRAR "Settings/General"
|
|
dialog to use standard progress bars. By default this option is
|
|
on if some Windows visual style is active and off if Windows Classic
|
|
theme is selected.
|
|
|
|
Windows progress bars are two color only, so they do not indicate
|
|
the current compression ratio. But now the ratio is displayed
|
|
in separate line;
|
|
|
|
e) "Mode..." button moved to bottom of window.
|
|
|
|
5. GUI self-extracting modules support following command line
|
|
switches:
|
|
|
|
-d<path> set the destination path
|
|
-p<pwd> specify a password
|
|
-s silent mode, hide all
|
|
-s1 same as -s
|
|
-s2 silent mode, hide start dialog
|
|
-sp<par> specify parameters for setup program
|
|
|
|
6. GUI self-extracting modules do not pass the entire command line
|
|
to setup program like they did in previous versions.
|
|
If you need to get access to entire command line of SFX archive,
|
|
parse sfxcmd environment variable which contains this command line.
|
|
|
|
7. New switch -sc<charset>[objects] allowing to select character
|
|
sets for archive comments and list files. It replaces -fcu switch
|
|
introduced in RAR 3.60, which was removed from list of supported
|
|
switches. Now you need to specify -scuc instead of -fcu to use
|
|
Unicode comments. Unlike -fcu, -sc also supports OEM and ANSI charset.
|
|
|
|
8. New "Save archive copy as..." command in "File" menu.
|
|
This command may be useful if you opened an archive from Internet
|
|
directly in WinRAR and then decided to save it on local disk.
|
|
|
|
9. "Word wrap" command added to "View" menu of WinRAR internal viewer,
|
|
so you can change the wrapping mode of already opened viewer window.
|
|
|
|
State of this option is not stored between viewing sessions.
|
|
If you need to change the default word wrap mode, use WinRAR
|
|
"Settings/Viewer" dialog.
|
|
|
|
10. Buttons "Up" and "Down" added to "Organize profiles" dialog.
|
|
Using these buttons you can change position of selected profile
|
|
in the list.
|
|
|
|
11. Operation progress is displayed when adding the recovery record.
|
|
|
|
12. If WinRAR is minimized to tray and mouse is over its icon,
|
|
WinRAR diplays a message about the current operation progress.
|
|
In previous versions it included only percent done, now it also
|
|
contains the time left information.
|
|
|
|
13. Console RAR displays "Calculating the control sum" message
|
|
when calculating CRC32 control sum for newly created RAR volume.
|
|
Previous versions also calculated the volume control sum,
|
|
but did it silently.
|
|
|
|
14. Archives history list in "File" menu allows Unicode names,
|
|
providing more reliable support for non-English archive names.
|
|
|
|
15. Stack overflow vulnerability has been corrected in password
|
|
processing module of console RAR and UnRAR. GUI WinRAR is not
|
|
affected. We are thankful to the iDEFENSE LABS for reporting this bug.
|