📄 changes.txt
字号:
fix a nasty memory overwrite bug in the code first to get it to work.- Changed sample mixing code to not automatically wrap offsets to keep inside the sound buffer, external port code is now expected to do that. Helped me fix a problem in the Windows port that prevented very large sound buffers from working, which are required for some badly written sound card drivers.- Corrected a bug in the SA-1 C code where incorrect processor emulation functions where called if the code was compiled with in-lining turned off.- Fixed crash bug in Super Mario RPG on the level up screen - forgot to mask the enable bit from the RAM bank register. Thanks to Christian Wolf for sending me a freeze file which made it easy to find the problem.- Fixed a lockup bug in the window clipping code, if the ROM ever turned off the sub-screen completely the clipping code would enter an infinite loop. Fixes The Cartoon Addams.- Made the Daffy Duck NMI fix only enable when Daffy Duck is loaded - fix was causing problems for Breath Of Fire 1 and 2.1.20- Windows port no longer sets DirectSound to exclusive mode, so its now possible to hear sound output from Windows apps while Snes9x has focus.- Fixed the freeze file loading and saving on the Windows port.- More GUI settings are saved in the registry on the Windows port now.- Added 3D/FX image scaling/filtering support to the Windows port.- Added the TV mode from the Mac/Linux ports to the Windows port.- Incorporated Kreed's new output image routines into the Windows port that fixes RGB555 display colour problems. Many thanks to Kreed.- New auto-frame rate timing code on the Windows port, stops the silly speed up problems when the old code tried to 'catch up' after the emulator had been paused.- Increased the DirectSound secondary buffer length on the Windows port to hopefully fix all the static/broken sound output problems some people were experiencing.- Altered the ZSNES Super FX asm code so the Windows port could use it - all previous versions of the Windows port were shipped using the C Super FX emulation code which is a lot slower.- Implemented interpolated and sync-sound options on the Windows port.- Added an image stretch option to the Windows port - stretches the SNES image to fill the whole screen or the Window. Looks really good on my TNT card since that chips seems to filter the image as it scales it.- Implemented Windowed mode on the Windows port.- Added special SPC700 cycle timing for Empire Strikes Back.- Fixed the missing polygon problem for Super FX games - thanks to zsknight for the information.- Implemented SA-1 support required for Mario RPG, Kirby Superstar, Paradius 3, etc. but since only a good image of Mario RPG exists, I could only test that game.- Fixed a graphics clip window bug: inverting the area of a clip area that only consisted of empty bands should become the full width of the screen; Mario Kart's rear-view mirror display needs it.- Fixed mode 7 render code to use correct z-buffer when rendering onto the sub-screen. Fixes Final Fantasy V title screen.- Added horizontal offset per tile support in the offset per tile modes 2 and 6, and switchable horizontal/vertical offset in mode 4. Fixes Chrono Trigger in several places and Mario All Stars title screens.- Changed SPC700 relative cycle length to 14, needed for Stunt Car Racer.- Enabled immediate triggering of NMI if NMI enable flag set while scan-line was on first line of v-blank. Needed to fix a background jitter bug in Daffy Duck: The Marvin Missions.- Altered ROM load code to ignore corrupt ROM map type byte in ROM header, preventing the code erroneously detecting what it thinks are interleaved ROMs. Fixes EEK! The cat, Formation Soccer, the corrupt copy of Donkey Kong Country, ...- Disabled IRQ re-triggering if V-IRQ registers set to the current line. Fixes Chuck Rock.- Fixed missing sprites in Andre Agassi Tennis - writing to low byte only of the sprite write address register seems to also clear the hi-byte.1.19- Games written by the Japanese software company Human seem to need special SPC700 sound CPU timing, so the ROM load and reset routines now check the software author company and adjust the CPU cycle length accordingly. It gets Clock Tower, Super Fire Pro-wrestling Premium, etc working.- Added ROM check sum calculation and testing code - Snes9x can now detect pure, corrupt or hacked ROMs.- Noticed a fast way to implement the SNES 4096 colour mode, so I implemented it. Now the colours in ActRaiser 2 look correct.- Corrected a noise frequency error thanks to information from Takehiro.- Added a 'start in full screen mode' flag to the Linux port.- While debugging the new graphics code I thought of a fast way to implement the SNES direct colour mode, tried it out and now the colours in Actraiser 2 are correct.- Blast, forgot about the colour window and fixed colour effects. The separate sub-screen is back again, but all the other graphics speed ups are there.- Now I've got a z-buffer I keep finding other ways to optimise the SNES graphics rendering - no need for a separate sub-screen, no need to clear the sub-screen to the fixed colour, no need to waste CPU time on translucency effects on hidden pixels, no need to completely clear the main-screen to the back drop colour, etc., etc.- Implemented a software z-buffer and changed the SNES graphics rendering to use it (required change for future 3D card support). Finally fixes the sprite-to-sprite priority bug that some games suffer from. Also a big speed increasing for some games (10 fps+), others are slight losers.- Added code to skip the rendering of completely transparent graphic tiles rather than comparing each pixel to see if it is transparent; helps the frame rate a bit on some games.- Added a fixed for Tetris & Dr. Mario - the game didn't like a multi-player 5 adaptor plugged in to the real SNES when being played, so turned off the adaptor emulation for this game.- Added hack for Final Fantasy II - if sync sound isn't on, make attack rate of 1ms actually 0ms (old v1.16 behaviour). Causes a slight click but its better than samples being cut short.- Fixed a clip window area invert bug if the colour window was enabled on on one window and the other window was being used to clip a background layer. Fixes the finial (I hope) display problem with Gun Hazard.- Added code to intersect the clip window areas if both a colour window and a background layer clip window were enabled at the same time. Required by Gun Hazard.- Forgot to mark graphic clip windows as needing recomputing when the master colour window inside/outside/on/off/main-screen/sub-screen PPU register was updated. Was causing display problems for Gun Hazard.- Internal H-DMA execution accelerator pointer variables where not always being recomputed when started H-DMA part way into a frame. Was causing display problems for Gun Hazard.- Made H-DMA continue for one extra scan-line to fix a disappearing monster problem in Dragon Quest 5. Thanks to Alex Jackson for the bug report.- Zoop seems to require volume envelope height reading by the sound CPU to always return 0 when the channel is in gain mode.- The sound code was ignoring updates to the ADSR volume envelope rates while one was in progress. Fixed that and now the bird song at the start of Chrono Trigger sounds correct.- Had to disable the CPU shutdown code for loops reading the horizontal beam position, it was causing problems for Star Fox. Still no polygons though.- Oops, sound DSP noise output was broken - accidentally deleted an important line while removing debug code ready for the last release.- Added initial 3Dfx support to the Linux port - basically using the Voodoo card as a bi-linear filtering, scaling blitter. Actually slightly slower than TV mode, for non-scrolling images due to poor texture upload speeds to the card, but the full-screen feature is nice and the speed doesn't drop as more of the screen changes.1.18- Implemented a sync-sound mode where sound data gets generated in sync with SPC700 instructions being executed. Finally the sound Williams Arcade classics can be heard. Also helps slight sound timing problems in many other games but doesn't fix Mortal Kombat 2 like I thought it would - its sound routine programmers must have been on drugs or something!- Added interpolated sound - gives low frequency sounds much more bass similar to a real SNES especially with the playback rate ramped up to 44KHz.- Added on-screen messages as various emulation options are toggled on and off using the in-game keys.- Fixed a PPU register read bug with the sprite register write position. Thanks to Takehiro TOMINAGA for the bug report.- Altered the auto-frame skip timing code to only wait and re-sync to the end of frame when frames haven't been skipped. Again thanks to Takehiro.- Speeded up the colour addition and subtraction code using ideas from Takehiro.1.17- Linux and UNIX sound code now driven directly from signal timer handler rather than the timer handler just setting a flag which had to be polled in the main emulation code. Slightly faster execution.- Fixed the crash bug in the ZSNES Super FX asm code with Vortex - the game's polygons still aren't visible though.- Implemented bent-line increase and exponential decay and sustain volume envelopes - they should match, or at least be very similar to the real SNES sound DSP chip now.- It would seem ROMs can key on sound channels even if the channel hasn't been keyed-off, Pac-In-Time requires it. Changed code to allow it.- Quick mod to ZSNES Super FX code to get Winter Gold working - it was already working with the C Super FX code.- Added emulation of the extra 1/2 scan-line per frame on PAL and NTSC - should help improve music speed emulation.- Worked around the click sound heard when ROMs use 0 volume envelope attack rate.- Removed the 'check for IRQ already happened' H-IRQ position register setting code - it was causing problems for Ninja Warriors and was not required by F1 Grand Prix.- Fixed a bug in the new sound code - the sustain part of the attack-decay-sustain-release volume envelope was being skipped if the sustain level wasn't at 100%. The fix has helped some music notes from being cut off early in a few games.- Added fix to Pro Action Reply support (again). Thanks to Paul Shoener III for the original fix and Gil Pedersen for reminding me to apply it!- Finally fixed the Tales of Phantasia 'bum note' problem! The ROM set its sample directory to the upper-most page and I forget to code for the hidden 64 bytes of RAM, that appear when the boot ROM is switched off, when fetching sample addresses.- Adjusted the relative cycle length between the 65c816 and the SPC700 slightly to get Terranigma working again.- Oops, the emulated joypads 3 and 4 via the emulated Multi-player 5 interface weren't working. Thanks to Steffen Schwenke for the bug report.- Optimised the echo sound code - by-passed the the FIR filter code if only a pass-through FIR filter was defined by the ROM.- Modified V and H-IRQ register changing code to trigger an IRQ immediately if V-IRQ is enabled and the scan-lines match and either H-IRQ is not enabled or the electron beam position has already gone past the trigger point. Fixes the screen flicker in F1 Grand Prix.- Modified the priority-per-pixel mode 7 code to use BG#1's clipping data if the top bit of the mode 7 pixel is set. Fixes initial track drive-through display in F1 Grand Prix.- Modified the sprite priority levels for the priority-per-pixel mode 7 display. Now the car can be seen in F1 Grand Prix.- Wrote a sound DSP register recording scheme which 'plays back' the register changes in sync with the sound generation code. I'm bit disappointed, it only improves the sound in a very few games... Scrapped the code, it actually causes more problems than it fixes. Oh, well, another 3 weeks work wasted...- Fixed a SPC700 wake up problem for Lufia I - made the SPC700 also wake up when the 65c816 read from one of the four comm ports.- Included lots of sound code speed ups and sound quality improvements from Takehiro TOMINAGA - many thanks go to him.1.16- Fixed a case where the -forcelorom option didn't work - the case was required for Formation Soccer which claims in its ROM header to use the same memory map as Super FX ROM, it doesn't.- Pulled apart a real SNES using a crowbar (great fun), just to look at what speed the SPC700 is actually clocked at for more accurate relative emulation speed.- Implemented SPC700 cycle counting in the hope the improved timing would fix Tales'; no such luck but at least the -ratio option is obsolete now.- Implemented executing SPC700 instructions during DMA, fixes BSZelda and Goal lock up at start and music pausing briefly when ROMs do lots of DMA, usually between game screens.- Scrapped the i386 asm SPC700 code - it was the cause of the music not restarting after a battle in Chrono Trigger and FF3 and I didn't realise because the bug had already occurred in the test freeze-file I had.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -