home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-09-20 | 58.7 KB | 1,034 lines |
- 1.25
- - Added BS 24Mbit ROM memory map, for Derby Stallion 96 and Sound Novel-TCool.
- No idea if it works. Thanks to Nose0000 for the info and code.
- - Corrected unzip code not to loop forever if an encrypted zip file is loaded -
- an error is generated instead.
- - Changed relative SPC700 cycle length for Mortal Kombat 3 to fix sample
- repeat problems - I wish I knew exactly how fast the SPC700 is clocked.
- Maybe I should write a test ROM and run it on a real SNES?
- 1.24
- - 3dfx speed hack back again, only disabled when Seiken 3 is loaded.
- - Some minor SA-1 speed ups added - the SA-1 instruction skipping code will
- have to wait until I have more time.
- 1.23
- - Corrected a SA-1 reset bug that reset the SA1 RAM bank pointer back to block
- zero but didn't clear the RAM bank register. Was causing Kirby 3 to crash.
- - Fixed a wave clipping problem with interpolated sound that was causing noise
- on sound output when certain sound samples were played.
- - Fixed a bug in the sync-sound code that could overrun the sound buffer by a
- few bytes causing clicks on the sound output.
- - The sound sample repeat bug that has plagued Snes9x ever since is was called
- Snes96 finally bit the dust - Snes9x continued to play sample loops
- even if the game dynamically updated the sample not to loop. Fixes the
- stutter in the Mortal Kombat series and improves the sound from several games
- that download sound samples in real-time as they are played.
- - Rewrote the code the handled the SPC700's 64 byte shadow RAM area to fix a
- possible sample corruption problem with ROMs that stored samples that
- cross the 64 byte start area.
- - Added code to allow ROMs to change the sample being played the next time the
- channel loops or is keyed on - not sure if it fixes anything but seems more
- correct.
- - Added a zero-frequency fix to the stereo sound mixing code that I'd already
- added to the mono code some time ago.
- - Changed the code to set the end-of-sample flag just before the last block is
- played, rather than just after. Seems to help improve the sound on some
- games.
- - Sound sample start code now doesn't reset the channel's envelope volume level
- to zero before starting the sample - helps reduce the clicks being heard when
- a channel envelope volume level hadn't reached zero before being keyed on
- again.
- - Changed initialisation of sample-end-register to 0 rather than 255 - seems
- more logical now I've thought about it. Not sure if it helps anything.
- 1.22
- - Finally fixed the corrupt copy of Donkey Kong Country not working problem -
- Snes9x thought the ROM used the same memory map as Street Fighter Alpha 2.
- - Added explode, unshrink and unreduce decompression modes support to the
- unzip code.
- - Fixed offset per tile bug that crept in after me trying to fix the Starfox
- on-tilt bug.
- - Made some fixes to the C Super FX emulation code, enough to get most 'FX
- games playable on the Mac port.
- 1.21
- - Finally worked out how character DMA worked on the SA-1 and implemented a
- hacky, slow version, but its enough to get the level up screens displaying
- correctly on Mario RPG.
- - Incorporated ZSNES' new optimised Super FX asm code - had to track down and
- 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.
- Thanks to John Stiles for pointing out that the Mac port didn't have the
- missing music problem.
- - Fixed RGB subtraction bug on displays with only 5 bits for green, e.g. RGB555
- displays. The GREEN_HI_BIT variable was always set to a value for 6 bit
- green displays.
- - Added the SA-1 memory map, still a long way to go before any SA-1 game will
- run.
- 1.15
- - Jumped versions to keep in sync with the DOS port release.
- 1.14
- - Improved 8-bit sound generation slightly, but it still sounds very poor
- compared to 16-bit sound.
- 1.13
- - Implemented the Tales of Phantasia memory map using the information supplied
- by zsKnight. Had to also implement a de-interleave routine to work around
- a ROM feature and Snes9x CPU instruction fetching implementation detail.
- - Added a frames-per-second on-screen display option.
- - Fixed the final glitch bug with the Mario Kart track display - the byte code
- for the termination of the DSP1 raster command wasn't been recognised.
- - Disabled a NMI/DMA hack for Rise of the Robots, was causing problems for
- Mario Kart and 'Robots wasn't working correctly anyway.
- - Optimised the mode 7 rendering a little.
- - Changed tile rendering code to use offsets into screen buffer rather than
- direct pointers ready for z-buffer implementation.
- 1.12
- - Changed V-blank NMI to occur immediately after a WAI instruction, Toy Story
- required this.
- - Fixed reading of H-DMA line counter register, Top Gear 3000 needed this.
- - Ripped off large parts of ZSNES's DSP1 code (with _Demo_'s and zsKnight's
- approval). Now Mario Kart works almost 100%.
- - Added a check to see if a vertical scanline IRQ register change will cause
- a H-IRQ later on the current scanline. Pilot Wings needed this.
- - Fixed possible crash bug in clip window code when both windows had two
- spans. Could actually cause Chrono Trigger to crash the emulator.
- - Fixed a lock-up problem with the C Super FX code, Star Fox and executing
- a few 'FX instructions per scan-line (required for Winter Gold).
- 1.11
- - Partially fixed the DOS netplay server - the server timer is running too
- slowly and it doesn't deal with disconnects correctly yet.
- - Corrected the sound echo delay - it was varying with the sound playback
- rate chosen by the user - it shouldn't have been.
- - Implemented DOS netplay code - DOS server code still not working though.
- - Removed all floating point calculations from the sound generation code.
- - Fiddled with the pitch modulation code - my guess is the output of a
- channel that is used to modulate the frequency of another channel is
- automatically muted by the SPC700 chip. Just a guess, but the wind from
- FF3 sounds 'better' but far from perfect.
- - Optimised the tile palette index calculation.
- - Optimised the planar to chunky tile conversion code.
- - Fixed X11 port to always scale SNES image if hi-res. only (no interpolation)
- support is enabled.
- - Added zipped ROM image support using Gilles Vollant unzip code and
- some code that Ivar (Lestat) sent me a long time ago.
- - 65c816 asm RTI instruction was destroying the program bank in emulation mode,
- the C code was already correct. Caused C64E to break.
- 1.10
- - Finished NetPlay v1 - allows up to five networked machines to play
- multi-player SNES games, one player on each machine.
- - Switchable full-screen mode added to Linux X11 port, some code and ideas
- nicked from Maciej Babinski's original Snes9x XFree86 DGA Linux port, the
- UAE Amiga emulator, plus lots of my own code.
- 1.08
- - Bug fixes to C Super FX emulation - now Winter Gold works correctly again.
- 1.07
- - More DSP1 work. Mario Kart is now playable! The character projection code
- is still broken so the opponents and obstacles aren't always positioned
- correctly on screen and you keep bumping into them, but I can still keep
- coming first!
- - Started work on NetPlay support.
- - Decreased sound card DMA buffer size on DOS port to improve sound generation
- and sound CPU synchronisation in some games.
- - Included Linux joystick driver patches from Vojtech Pavlik so the port can
- use the new v1.x joystick drivers, again written by Vojtech Pavlik. Allows
- use of Micro$oft Sidewinder pads, NES and SNES pads, PlayStation pads,
- Gamepad Pros, etc.
- - Added halve-the-result colour subtraction.
- 1.06
- - Extended code to allow support for multiple 16-bit screen formats,
- switchable at run-time, rather just supporting one, selectable at compile
- time.
- - Added XFree86 DGA Linux port - code from Maciej Babinski.
- - More fixes to the X11 image format conversion and setup code.
- - The asm SetByte routine wasn't wrapping writes to S-RAM correctly, allowing
- some ROMs to think they were running on a copier and put up an error
- screen. Thanks to Nu of #rom for the report.
- - Added 'TV-Mode' support (interpolation and scan-lines) to the DOS and
- UNIX ports from code based on John Stiles work.
- - Added v-sync option to the DOS port.
- - Added fix to Pro Action Reply support, thanks to Paul Shoener III.
- - Added ggi support (untested) to Linux port using patches from
- Alexander Larsson (alla@lysator.liu.se).
- - Added 16 to 24/32 bit image conversion routines to the UNIX X11 code.
- - The SPC700 OR1 instruction was broken. Thanks to Pyrgopolinices for the
- report.
- - DOS port was having trouble splitting and joining path names - caused
- problems when specifying the full path name of a ROM when the ROM image
- was on another drive.
- - If a ROM reset the sound DSP and then turned on echo effects but kept
- the same echo delay setting, then the echo effects could not be heard.
- Thanks to madec@mclink.it for the bug report and freeze file that made it
- easy to find the problem.
- - DOS port was always using stereo sound setting, if sound card
- supported it, regardless of the user preference.
- - Linux port X11 port could crash if window was resized while transparency
- effects were enabled.
- - The colour subtraction accelerator look-up table was slightly wrong, causing
- one bit of red, green blue values to 'spill' into the next field.
- - Allowed colour window to cut a hole in the main-screen and show the sub-
- screen underneath. The effect is used by Illusion of Gaia.
- - Added support for colour subtraction, with the halve-the-result flag
- set.
- - Included DSP1 code from _Demo_. Now you can see the track in Mario Kart and
- the ground in Pilot Wings - still can't play the games though due to other
- missing commands.
- - Added an NMI hack to work around a code bug in Battle Toads: BATTLEMANIACS,
- its only by chance that the game works on a real SNES - And disabled it
- again because it causes problems for Chrono Trigger.
- - A frame skip of zero was actually still skipping one frame. Thanks to
- Marius Fodor for the info.
- - And yet more X-OR window bug fixes - now the effects during some of the more
- 'posh' spells look correct in Chrono Trigger.
- - Yet another window area inversion bug - off by one pixel on right-hand edge.
- - Forgot to put dummy start and end points for XOR window combination modes -
- now Uniracers looks correct and Sailor Moon looks like it does on a real
- SNES.
- - Window clip code was using wrong index into a 2-dimensional array when
- the whole of the main or sub-screens were clipped.
- 1.05
- - The master volume disable code was looking that the wrong variable!
- - Fixed crash bug in newer sound code if a ROM tried to start a sample
- playing who's data went past the end of SPC700 memory. (Cannon Fodder)
- 1.04
- - Fixed DSP1 ROM header detection bug.
- - More DSP1 work; still nothing works, although I know the multiply command
- is correct because I've compared the results against a real DSP1.
- 1.03
- - Oops, the multi-player 5 disable code change broke the multi-player 5 being
- the default controller.
- - Implemented the colour window on the main screen - now Zelda's oval zoom
- window displays correctly and Krusty's Super Fun House clips the left-most
- 8 pixels as it does on the real SNES.
- - TERRANIGMA didn't like me returning a random value when it attempted to
- read a channel's the current sample byte.
- - Hacked in initial support for mode 7 priority-per-pixel - the priority bit
- doesn't actually change the priority of the pixel but the two games that I
- know of that use the feature look OK. (Winter Extreme Skiing and the
- intro of Tiny Toons Adventures).
- - Colour addition/subtraction code now uses RGB565 rather than RGB555
- calculations - helps a little with the loss of the bottom bit of SNES
- colour data.
- - DSP1 emulation started - nothing works yet.
- 1.02
- - Switched to adding back drop colour rather than fixed colour when
- sub-screen addition is enabled but there's nothing on the sub-screen.
- Uniracers seems to need it. - DISABLED it again. Causes problems for
- other ROMs and Uniracers itself on later screens.
- - Fixed XOR window logic combination mode and area inversion code, now
- Uniracers works correctly.
- - Oops, if colour window and half colour addition/subtraction were both
- switched on, area outside colour window was still being halved, it shouldn't.
- Hacky fix at the moment until I implement the correct fix.
- - Fixed several bugs with the mosaic effect and 16x16 tiles and a few
- possible background scroll offset bugs and the mosaic effect.
- - Optimised the sound sample generation code for cases when the SNES
- sample playback frequency was higher than the sound card playback rate.
- - Fixed possible click sound when a sample was first started to be played.
- 1.01
- - Corrected scanline count for PAL games - should be 312 lines verses 262 for
- NTSC. Was causing slow music on PAL games.
- - Added error correction code to the SPC700 timer update code - the
- SPC700 timers are updated using the emulated h-blank handler which is
- called every emulated 63.6 microseconds (15.720KHz) but the SPC700 timers
- need to be updated at multiples of 8KHz, hence the error. Was causing
- music to be played slightly too fast.
- - Switched back to using C SPC700 code - the old SPC700 asm code was lacking
- several optimisations that the C version had. It also had multiple
- speed hack cycle skipping bugs. Plus I hadn't even finished optimising
- all the code from the last time I converted the C compiler output.
- - Optimised SPC700 memory access routines a little.
- - Disabled code that prevented ROMs updating SPC700 timer values while the
- timer was running - it seems like it is allowed, even though docs on the
- 'net I've seen say its not.
- 1.0
- - Fixed SuperScope support.
- - Added hi-res. option to my DOS port.
- - Fixed 4, 6, and 8 button standard PC joystick support.
- - Changed some types the source code was using BYTE -> uint8, WORD -> uint16,
- DWORD -> uint32 and BOOL -> bool8, types were clashing Windows typedefs
- but sizes didn't always match.
- 0.99
- - 8-bit double height and/or width tile rendering was missing every other
- group of 4 pixels - screen pointer advance count was wrong.
- - Asm SPC700 emulation was ignoring the Shutdown flag - the result is its
- not possible to turn off cycle skipping for the SPC700 emulation.
- 0.98
- - CPU to ROM address decoding code rewritten - used by Game Genie cheat codes,
- orginal code might have been the cause of some Game Genie codes not working.
- - Started to remove printf calls and replace them with calls to S9xMessage,
- port code can then dicide what to do with message.
- 0.97
- - Re-enabled decompressed sample caching, still has a possible click problem
- but the sound code is a lot faster with it enabled. Added command line option
- to disable it if required.
- - Added '7' key support to rotate through available controller options, in
- the order multi-player5, mouse on #1, mouse on #2, superscope,
- standard controller and then back to multi-player5.
- - Hi-res. (512x448) support fixed.
- - Mouse support completed - Lemmings 2 and Mario Paint working a treat.
- - More colour window fixes.
- - Fixed freeze game problem when ZSNES SuperFX code is being used -
- ZSNES 'FX state was not being saved and restored.
- - ZSNES SuperFX asm emulation code plugged in to Snes9x.
- 0.96
- - Looks like if the colour window is not enabled at all and the colour
- window selector is defined to only allow colour effects inside the colour
- window, then no effects should be visible.
- - Offset-per-tile rendering code didn't support width 64 screen size, which
- Chrono Trigger used on its title screen.
- - Contra 3 seems to prove that defining the clip window area to be 'outside'
- a window that covers the whole screen is not an area with no range.
- - No it doesn't. It proves that I shouldn't have initialised the right
- window edges to 255! Contra 3 enables clipping windows without first
- defining their range.
- - Debug frame advance feature was being prevented from forcing the next
- frame to be rendered by SyncSpeed which was being called after the
- debugger returned to the main loop.
- - H-DMA code was allowing ROMs to manually start H-DMA during the v-blank
- period, ROMs shouldn't be allowed to do this.
- - Asm code would not push the correct CPU status onto the emulated stack if
- returning from an NMI immediately triggered an IRQ - fixes Mortal Kombat 1
- and War of the Gems.
- - 'd' dump memory debug command was not preserving the CYCLES count.
- - C versions of SNES memory access code had same problem as asm code on the DOS
- port except it didn't cause a crash just ROMs failed to work correctly.
- - Asm i386 code was using signed compares to check for special case memory
- areas - it was causing crash problems on the DOS port which was sometimes
- returning valid address values with the top bit set - i.e. they seemed
- like negative values!
- - Changed event reschedule code to always allow h-blank start events, used to
- disable them during v-blank period.
- - Added code to HDMA when end of visible lines reached.
- - Changed register 4212 code not to always return h-blank when in v-blank.
- - Clipping fixed colour addition to background area was off by one pixel on
- the right-hand edge.
- - HDMA: Finially worked out how the real SNES operates when ROMs manual
- start H-DMA during the frame - ROMs must set up the H-DMA line count
- and address values before H-DMA is started.
- - Fixed the asm code to remove all hard-wired structure offsets - one offset
- into the IPPU structure was wrong in the code because the structure had
- changed size.
- - Added colour window support and allowed graphic window settings to be
- different on the main screen and sub screen, just like a real SNES.
- - SuperFX LJMP instruction had bank and address values swapped.
- - Fixed possible memory overwrite problem because OBJList array was one
- element too short.
- - Added AND multi-graphic window combo support.
- - ROM image memory allocation allocates an extra 32K of RAM, then moves the
- pointer forward by that amount - stops the SuperFX emulation from accessing
- unallocated memory, possibly causing a crash.
- - SuperFX emulation now stores sign and zero flags in separate variables so
- the MERGE instruction can set flags correctly.
- - Added 65c816 instruction skipping to i386 asm code when 65c816 waiting in
- a simple loop for some 'event' to happen e.g. end of frame NMI.
- - Finally fixed the APU instruction skipping problem with the i386 asm
- code when the WAI instruction is used - caused slow music on some ROMs.
- - Offset-per-tile modes don't seem to support screen size - Mario All Stars
- Super Mario 2 requires this on title screen. Doesn't seem to effect
- Tetris Attack or Puzzle Bobble.
- - Changed SNES select and start keys from shift and control to space and
- enter - allows shift-fn key to save game positions without the SNES ROM
- also getting a select joypad button press.
- - Multiplayer5 support for controllers 3+ was broken for ROMs that used
- automatic hardware joypad reading rather than reading joypads serially.
- - ResetPPU was not clearing tile caches and marking OBJ as need recomputing.
- - Cached OBJ positions and sizes were not being recomputed if ROM changed
- global OBJ sizes during frame.
- - Fixed brightness multiplication problem on 16-bit code for green.
- - SPC700 emulation now uses one variable to store ZERO and NEGATIVE flags.
- - SPC700 emulation now only increments PC once at end of instruction.
- - New ROM type and interleaved detection code.
- - Reading sound DSP register ENDX also clears the value. The docs on the
- 'net said that only writing to the register cleared its value. Fixes
- sound in Zoop.
- - Fixed mode 4 colour palette problem on background #2 in tile-based graphics
- code.
- - Fixed graphics mode 4, offset-per-tile support. Only one set of offset data
- that is switchable between horizontal and vertical, unlike modes 2 and 6
- which allow separate horizontal and vertical offsets per tile.
- - Modified the APU timer code again, if the timer is enabled, a write to the
- timer target register is only allowed if a value hasn't been written yet.
- Fixed Donkey Kong Country 1 and Earth Worm Jim 1 & 2.
- - Attack rate of 0ms changed from 1ms back to 0ms because of a group of ROMs
- that change from attack mode to decay mode in real-time. Will change back
- when I've added better SPC700 CPU and sound generation sync code.
- - Added support for ROMs set a new sound timer value while the timer is
- enabled (EWJ 1 & 2).
- - Added support for ROMs that read the sound envelope height (MK1, MK2, etc).
- - ROMs writing to the H-DMA enable register during visible scan-lines were
- restarting H-DMA for that frame causing random screen effect corruption.
- - Echo feedback seems to be after the FIR filter, not before as a diagram I've
- seen suggests.
- - Sound pitch modulation added.
- - Memory access routines changed to pass a single 24-bit address rather than
- the previous separate 8-bit bank and 16-bit address parameters.
- 0.3
- - Updates to A-Bus address during a frame must not update H-DMA address.
- Fixes Actraiser 2 and Pacman 2.
- - Removed sound volume mangling - with echo support enabled it doesn't seem to
- be required.
- - Attack rate of 0ms changed to 1ms to help prevent click sound with sudden
- start of a sample playing.
- - Sample caching of samples that looped using part of the original sample
- created a click on the sound output. Caching disabled for the moment. Would
- require 512K of cache RAM to fix sample caching.
- - Colour addition/subtraction support added - but still a little buggy in
- places and very slow.
- - 16-bit colour support added.
- - Sustain sound volume was not being set if a sample using ADSR was started
- with both the attack rate and decay rate set to zero - resulted in missing
- sound samples on with some games.
- - Sound echo support added.
- - Sound channel mixing code was not completely clearing a channel's sound
- buffer when a channel finished playing a sample.
- - Sound mixing code rewritten to use one buffer, rather than writing each
- channel into a separate buffer then combining them into one buffer.
- - Memory access routines rewritten to use an 8K block lookup table rather than
- dedicated code for each ROM memory map - it was getting difficult to support
- the new types of SNES ROM memory maps becoming apparent.
- - Sound sample decoding wasn't decoding sound samples correctly if a
- previously cached sample was only partially overwritten by the ROM as
- opposed to being completely replaced.
- - Sound sample decoding wasn't clipping generated sample values correctly.
- - Changed H-DMA to start in the current frame only if enable register is
- written to during v-blank, h-blank or while the screen is blanked.
- - The SPC700 seems to start executing instructions before the 65c816 -
- shorter reset pulse? (NO - forgot the SPC700 executes instructions while DMA
- is taking place).
- - ROMs that reset the H-IRQ position so another IRQ would be triggered on the
- same scan-line where not supported - Super Off-Road: The Baj needs it.
- - $4212 bit 7 needs to go high at the end of h-blank at line 224 not at the
- start of h-blank - Bubsy needs it.
- - Sample decoding routine could write to memory outside sample cache area if
- address of block to decode was greater than $0x10000 - 9.
- - Walking mario can be seen on map screen of MarioWorld - needed sprite
- priority rotation working. ROM sets bit 7 of $2103 then sets rotation in
- $2102. Reset rotation at start of v-blank not at end.
- 0.24
- - Fixed reading of DMA register values - now Ms Pacman works.
- - Saved sprite memory address being restored on the wrong scan-line - caused
- corrupt sprites on at least one game (GANBARE GOEMON 2).
- - Screen colour palette not being updated if ROM only wrote to low byte of
- palette register.
- - Possible memory corruption fixed if a ROM tried to write to an invalid
- sprite address via PPU registers.
- - X11 port support quick load and save by pressing function keys to load or
- shift + function keys to save.
- 0.23
- - Added option to disable graphic window effects - T2: The Arcade Game doesn't
- seem to like them.
- - Mode 7 "outside screen area" register interpretation fixed - now the
- Actraiser map screen looks a lot better.
- - Old DMA code hack for Battle Toads: Double Dragon removed as it was no
- longer required and it was causing problems for Ys III.
- - Lowered max volume level of 16-bit sound mixing code to help with sound
- clipping problems is lots of SNES sound channels are playing.
- 0.22
- - Crash bug fixed in mode 7 graphics windows code
- 0.21
- - Fixed a noise channel volume bug - noise waveform was getting clipped.
- - Fixed 24bit X Window System server support on the Solaris port.
- - Sprites in priority level 1 on mode 7 were being drawn incorrectly behind
- graphics screen.
- - BG 3 priority 1 tiles sometimes not drawn dependent on the $2105 bit 3
- setting.
- - Added graphic window support the tile redraw code.
- - Added mosaic support to tile redraw code.
- - Tile redraw code was drawing one line too many on screen-splits.
- - Tile-based redraw code made more intelligent about when a background should
- be displayed or not.
- - Added wrap within bank support to large DMAs just to support Rock 'n' Roll
- racing.
- 0.20
- - DMA routines added lots of special cases and removed most calls to GetByte,
- using a pointer instead.
- - Multiple using PPU registers is now only computed when first byte of result
- is actually read.
- - Sound enabled by default if compiled without DEBUGGER defined.
- - Tile redraw method made the default.
- - Fixed CPU_SHUTDOWN so SPC700 continues to execute even if main CPU is
- "skipping" cycles waiting for an event to happen.
- - More command line options added.
- - Default cycles-per-scan-line to execute lowered to 90% from 100%.
- - +/- keys now work even if auto-frame rate adjust was enabled.
- - SPC700 emulation partially rewritten in assembler.
- - Asm 65c816 code change to use same speed up techniques as the C++ code.
- - Minor speed tweaks to the sound decoding and mixing code.
- - C++ SPC700 emulation changed to use same method as 65c816 emulation for
- computing and storing emulated CPU flags.
- - Mode 7 code rewritten and several scrolling offset bugs fixed.
- - Lo-ROM S-RAM memory map bug fixed - now Uniracers works.
- - Multiple speed ups and changes to the tile and line-based redraw code.
- - Tile and line redraw code changed to cache converted tiles between frames.
- - Variable cycle length timing made compile-tile switchable.
- - C++ 65c816 emulation changed to use several opcode jump tables to avoid
- a register size comparison test on most emulated instructions.
- - C++ 65c816 emulation changed how is computes and stores emulated CPU flags.
- - Fixed high frequency sound playback bug - the sample rate calculation was
- blowing the range of an unsigned long.
- - Fixed V-RAM reading so DKC3, Addams Family, Aladdin and Pacman all work.
- - Fixed sound code so ROMs can change from ADSR mode to decrease mode - fixes
- lots of ROMs.
- 0.12 released
- - Added dynamic speed regulation.
- - TCALL vector calculation change from n to 15 - n.
- - Fixed crash bug if ROM writes to sound DSP register numbers greater than
- 127.
- - Fixed DOS memory locked for interrupt code.
- - Added long name versions of command line switches.
- - Added command line switch for SPC700_SHUTDOWN code and WAI cycle skipping
- code.
- 0.1 released
- - All DOS memory is now locked from being swapped.
- - Fixed DOS port keyboard polling code - could get confused if a keyboard
- interrupt happened while keys were being checked.
- - SPC700 ADC instruction never cleared Overflow or Carry flags!
- - Changed selection of playback speeds for Solaris port.
- - Sample caching code was broken - cached samples were never used.
- - Added code speed ups for ROMs that use a lot of DMA to VRAM.
- - More cpu code asm speed up.
- - Fixed 16x16 size tiles on tile-based redraw code.
- - Fixed sound gain-mode increase and decrease volume envelopes.
- - Added code to support ROMs that reuse sprites in the same frame.
- - Fixed processing of negative volume levels.
- - Fixed SPC700 EOR1 instruction.
- - Added SPC700 shutdown code to stop executing SPC700 instructions if in
- a tight loop waiting for a timer or for the 65C816 to respond.
- - DOS playback rate was being forced to 16KHz by Allegro - fixed.
- - Fixed bug in SPC700 MOV1 C,bit, address.
- - Fixed a off-by-one loop sample pointer bug in MixSamples.
- - Added command line flags for cached-tile based drawing and sub-screen
- background layers priority swapping.
- - NOPE, got encoding of the OR1/EOR1,AND1 range of correct originally -
- got duff information from an "SPC700" programmer.
- - More SPC700 fixes: got the encoding of the OR1/EOR1,AND1 range of
- instructions wrong - I guessed wrong originally.
- - Sample looping bug fix on mono sound mixing code.
- - Sound pitch value no-longer clipped to 14 bits - apparently FF3 needs this.
- - Followed Paradox's suggestion and changed graphics code to place sub-screen
- background layers below main-screen background layers. Helps lots of games
- that use sub-screen addition/subtraction - now you don't have to toggle
- background layers on and off so often just to see hidden text, characters,
- or maps, etc. Made it switchable.
- Acts as a good intermediate solution until sub-screen addition/subtraction
- is actually implemented.
- - Modified sound skipper code to return random values when ROM is stuck
- waiting for the SPC700 CPU to respond - helps several ROMs that previously
- don't work with the currently selection of APU skippers.
- - Improved sound mixing code so volume is not attenuated so much, giving
- better results on 8bit sound cards.
- - Changed the frequency at which the joystick polling routine is called - now
- called every-other frame rather than every 3rd frame.
- - Recompiled Linux and DOS ports with the Pentium optimising version of gcc -
- gives a few percent speed increase.
- - Changed V-RAM increment count from 64 to 128 - apparently Final Fantasy 3
- needs this as well.
- - Fixed sprite priority bug with Mode 7 - apparently Final Fantasy 3 needs
- this.
- - Fixed a screen clipping problem with the S-VGA mode.
- - Fixed bug that had crept in with -m 2 S-VGA mode (Linux version).
- - Fixed S-VGA Linux version with sound enabled.
- - The SPC700 ADC (X),(Y) instruction was broken - with all these SPC700 fixes
- now many more ROMs work with sound enabled.
- - The SPC700 Pop PSW instruction was not resetting the direct page location.
- - The SPC700 instruction MOV A,[DP+X] was incorrectly doing a MOV A,DP+X.
- - Got the SPC700 SETx and CLRx instruction encoding swapped around.
- - Fixed #define problem that was stopping DOS snapshot saving from working.
- 0.72 released
- - Fixed the DOS filename handling - old Unix code was screwing up with ROM
- filenames that contained backslashes (\) - the ROM would load but S-RAM
- loading and saving would fail and the default filename for snapshots
- wouldn't work.
- - This time really fixed Allegro library keyboard handling (DOS port); it
- was missing key some presses/releases (was stopping Chrono Trigger
- Left + Right + A button combo from working).
- - Added code to automatically remove headers off S-RAM save files with
- 512 byte headers.
- - 32Mbit ROMs in interleaved format are now automatically detected and
- converted.
- - Added -ss 3 sound skip method support to the asm version - now NBA Live '96
- works again.
- - Added support for multi-part ROM images.
- 0.71 released
- - Made libgz.so statically linked (again) on Linux port - sorry.
- - Made writing to $4200 also clear any pending IRQs. This finially allows
- Battle Toads: Double Dragon, Spawn and Sieken 3 all the work with the same
- IRQ logic (but Sieken 3 still gets stuck in sound download code).
- - Fixed a H-DMA wobble bug - some frames could randomly miss a line of
- H-DMA causing the F-Zero screen to wobble, and slight text character
- corruption on games like DKC3.
- - Interleaved format ROM images are now swapped in-place, without the need
- for a temp 4Mb buffer (saves lots of disk swapping on a 16Mb Windows 95
- machine).
- 0.7 released
- - Fixed Allegro library keyboard handling (DOS port); it was missing key
- some presses/releases.
- - DOS port had a different MAX_PATH value which moved the location of the
- SRAM size variable when using the asm CPU emulation core. This, in turn,
- caused the SRAM emulation to fail on the DOS port. Donkey Kong County 2 & 3
- were reporting a ROM copier was connected to the SNES and refused to run.
- - Fixed assembler version of XCE - it was always leaving the carry flag
- clear - caused Killer Instinct and Super Punchout to think a ROM
- copier was fitted to the SNES and they all refused to run.
- - Fixed assembler versions of MVN/MVP - they weren't setting the data bank
- register to the destination bank of the instruction.
- - Fixed joystick detection on MS-DOS port - a single 2 or 4 button joystick in
- port 1 was being ignored if a second joystick was not present in port 2.
- - Fixed an uninitialized variable in graphics code - was causing random
- missing scan lines on Mode 7 screens.
- - Joysticks now scanned every 3rd frame (joystick scanning is slow in the PC).
- - Double-whoops, Metriod 3 had stopped working in v0.6 - fixed it
- (memory map bug).
- - Made bit 6 of $4211 set if v-counter == v-timer-position.
- - Made reading of $4200 read $4212 instead.
- - Adjusted DMA timing to always access ROM memory at slow speed - this seems
- to fix Battle Toads.
- - Added code to automatically clear pending IRQs when the horizontal line
- is no longer equal to the horizontal timer line - this fixes Seiken 3, it
- now just gets stuck in the sound CPU wait code - oh well.
- - Moved NMI back to its original pre-0.65 behaviour, now Puzzle Bobble works.
- - More graphics speed ups - the code to render background tiles with their
- priority bits set is only called if there are actual priority-bit tiles.
- - Changed default frame skip rate from 1 to 2 - its seems most people don't
- bother to read the docs, so I thought I'll help them out a bit!
- - Speeded up Mode 7 graphics on games like F-Zero that rewrite the matrix
- registers on each scan line using H-DMA.
- - Reorganised the graphics code and did a slight speed up - graphics code
- will be the next thing to rewrite in assembler.
- - Rewrote CPU core in assembler for Intel platforms - gives a very noticeable
- speed increase.
- - Fixed several problems with the APU sound CPU emulation - its now getting
- stable enough to try and implement sound.
- - Fixed bug that caused 1 byte of S-RAM to be emulated when ROM didn't
- expect any - it was enough to stop Street Fighter 2 and others from
- working - thanks Lord ESNES.
- - The TXS and TCS instructions shouldn't set the Z and N flags.
- - Looks like MVP/MVN instructions should ignore accumulator size - change
- code to always use all 16 bits and exit with accumulator set to 0xffff.
- - Whoops, accidently left some test code in which was causing the V-BLANK
- flag, bit 8 in register $4212, to be miss-calculated.
- - Fixed palette in mode 0.
- - Speeded up graphics drawing a little by skipping groups of 4 pixels that
- were all transparent.
- 0.65 released
- - S-VGA and MS-DOS ports now have a VGA mode command line flag.
- - Improved the fading code - should be much more smooth now.
- - Fixed second joy-pad support and re-mapped keys and joysticks to actually
- make a match between what my docs said and a real SNES (SNES docs I'd
- seen were wrong!).
- - Fixed a bug in Relative Long CPU addressing mode.
- - Ported Snes96 to MS-DOS.
- - Snapshot loading and saving no longer uses external gzip binary.
- - Added support for registers at $21c2 and $21c3.
- - Made reading the software latch for the horizontal and vertical counters also
- clear any pending IRQ.
- - Added sprite priority rotation.
- - Rewrote parts of the graphics routines to fix a sprite-to-sprite priority
- bug.
- - NMI flag changed again - now back to being reset by reading $4210 but
- actual NMI is delayed.
- - Made mode 7 background colour 0 transparent - this fixed several sprite
- priority problems a few games where having.
- - Finally worked out how sprite "Object Name Select" works and emulated it -
- this fixes many (if not all) of the corrupted sprites some games
- experienced.
- - Delayed NMI activation for one instruction to give time for loops that
- wait for bit 7 of $4210 to go high.
- - Special-cased line count of 128 on H-DMA to mean repeat previous data with
- a line count of 128 and not just terminate H-DMA on that channel.
- - APU sound CPU emulation added - just need to debug the thing.
- - Fixed Overflow flag setting in ADC and SBC instructions - it was never
- being set.
- - Rewrote how CPU instructions are fetched and how values are pushed and pulled
- from the stack - it gave a very large increase in emulation speed.
- - H-DMA was being started one scan-line too late.
- - Added CG-RAM reading support.
- - Added "Full Graphic" V-RAM reading.
- - Speeded up C version of CPU emulation quite a bit - could speed it up a
- little more before rewriting in assembler.
- - Fixed bugs in 16x16 tile drawing on 2bit and 8bit deep screens.
- 0.6 released
- - Speeded up 16x16 tile background rendering by removing a temp tile buffer
- it was using. The speed up also fixed a vertical scroll bug.
- - Fixed slight window clipping on 16x16 tile backgrounds.
- - Added automatic PAL/NTSC mode switching.
- - Fixed background and sprites so only visible if on main-screen or
- on sub-screen under correct circumstance.
- - Fixed lockup bug in DMA.
- - Stopped NMI flag from being reset by reading $4210 - was causing a couple
- of games to get stuck.
- - Whoops, got horizontal and vertical Mode 7 flip bits around the wrong way!
- - Fixed MIT shared memory pixmap support for X11 version (it was always turned
- off).
- - Fixed minor bug - first sprite in priority group was drawn twice. Didn't
- cause any visual bugs, it just slowed down redrawing a little.
- - Fixed DMA bug - transfer byte count should be 0 after DMA has finished.
- - Fixed a scaling bug if width < height.
- - Interleaved ROM image support added.
- - 16bit and 24bit X11 server support added - with scaling.
- - Added window scaling on X11 version.
- - Partial clip windows added - the only window overlap option implemented at
- the moment is OR, it seems it good enough for all the ROMs I've tested
- it with.
- - Partial Mosaic effect added (pixels only growing vertically).
- - Missing Mode 7 "outside screen area" option added.
- - Fixed mode 7 screen wrap "outside screen area" option.
- - Used new event processing to finally fix H-IRQ so it triggers at the
- correct position on the scan line.
- - New event processing added.
- - Linux version now statically links libgz.so (sorry).
- 0.5 released
- - Linux S-VGA version changed from using a 320x240 ModeX screen (slow) to a
- 256x256 chunky screen (faster) - thanks to Phillip Ezolt (pe28+@andrew.cmu.edu)
- for information on how to do this.
- - Mode 7 screen flipping added.
- - Included Snes97's CPU emulation code into Snes96. Didn't fix any bugs but
- slowed down the emulation some what and I couldn't compile it optimised
- because it was so large - so I removed it again.
- - Added a few extra features available via the keyboard.
- - Fixed a H-DMA transfer mode - bad documentation.
- - Fixed H-DMA indirect addressing (it was using the wrong CPU memory bank).
- - The Linux slow down bug is my crappy laptop enabling battery saving features !
- - Changed graphics code to perform true line-by-line screen updates.
- - Fixed sprite drawing bugs.
- - Ported Snes97's graphics code to Snes96.
- - Fixed memory map for HiROM save RAM area.
- - Fixed HiROM memory map - now Killer Instinct and Donkey Kong County work !
- - OK the slow down bug is just actually my laptop trying to save battery
- power by slowing the CPU clock!
- - The Linux slow down bug shows itself on DOS emulators running under DOSEMU
- so it must be a kernel problem (or feature).
- - Fixed H-DMA (again) to be complete emulation - all I need now is line-by-line
- screen update...
- - Fixed DMA to not copy too many bytes if byte count was not a multiple of
- the transfer mode quantity (caused corruption on Super Mario World map screen).
- - Changed mapping of keyboard to joy-pad buttons and added additional
- direction keys for joy-pad one so player one's right hand doesn't have to
- obscure player two's keyboard joy-pad buttons.
- - Changed joystick button layout to match SNES if using a 6 button joy-pad.
- - Changed snapshot format so I can easily use libgz on Linux.
- - Added few speed up tweaks that will be lost again when I add line-by-line
- screen update.
- - First visible scan-line changed from 8 to 1 to match with new docs.
- - New SNES information source found; fixed partial H-DMA emulation to include
- indirect addressing support.
- - Snapshot files are now compressed.
- - Compressed ROM images now supported on Linux.
- - Snapshot loading and saving added.
- - Joystick support for Linux added. One 2, 4 or 6 button joystick, or two 2
- button joysticks supported (PC hardware limitation).
- - SVGA full screen support added for Linux. Still has the X11 slow down bug so
- can't blame the X11 server any more! Must be a kernel bug or a very odd
- emulator bug.
- - Added emulation of two joy-pads on the PC/Sun keyboard.
- - Removed -i command line flag as it is no longer used. -h value range has also
- changed: now 1 - 100 (percentage).
- - Actuate cycle counting rather than instruction counting now added including
- fast and slow ROM timing - should give much better timing information when
- line-by-line screen update added.
- - Bug fixed old-style joy-pad access used by some ROMs - Mario All Stars still
- gives problems if enabled and I don't know why; but at least Super Bomberman
- now works !
- - Looks like if both horizontal and vertical IRQ are enabled then IRQ should
- only be triggered once per frame and not once per scan line - looking at the
- IRQ handler of a couple of ROMs seems to confirm this.
- - Added initial cycle counting - not accurate enough for some ROMs though.
- - Finally worked out how the odd VRAM address increments should work but only
- found one ROM, so far, that actually uses it.
- - Debugged the odd slow down problem with the Linux port - it seems to be a
- bug in the X Window System server - starve the X server of keyboard presses
- or mouse clicks or movement and the X server slows down, slowing down the
- emulator with it !
- 0.4 released
- - Fixed sprite vertical clipping at top of screen.
- - No need to invert the Mode 7 transformation matrix before use - the
- ROM coder already had to!
- - Fixed Mode 7 scrolling offset when using special effects.
- - Added Mode 7 rotation, enlargement and reduction emulation.
- - DMA shouldn't zero the byte count value after a DMA has completed.
- - Added DMA reading (Addams Family was using it)
- - Fixed V-RAM read function - returned data should lag behind the V-RAM
- address by one byte/word.
- - Added mode 7 graphics only.
- 0.3 released
- - Speeded up the main CPU loop a bit.
- - Add more command line options:
- -f <frame skip> (default 1)
- -i <no instructions between polling X> (default 32768)
- -h <number instructions per scan line> (default 45, some games allow a lower
- setting resulting in a increased
- emulated frame rate)
- -t enable CPU tracing
- -ss <sound CPU skip wait method> (default 0, more methods to be added)
- -H disable H-DMA emulation
- -F Force Hi-ROM memory map
- - Modified planar to chunky conversion to use look up tables.
- - But now Mario All Stars won't start. Made emulation of $4016 optional with
- -o command line switch.
- - Thanks to Carlos (calb) of ESNES fame, I've added correct $4016 & $4017
- joy-pad register processing - now several more ROMs will start once a
- button is pressed and can be controlled.
- - DMA wasn't updating DMA registers with the final CPU address used after the
- DMA had completed (caused sprite and background corruption with some ROMs).
- Still suspect another DMA side effect isn't being emulated correctly though.
- - Fixed setting of CPU overflow flag in ADC and SBC instructions in decimal
- mode.
- - Fixed MVP/MVN CPU instructions to leave X and Y values correct at end of
- loop - several more ROMs now work. Still don't know if MVP/MVN instructions
- should ignore the accumulator size flag or not.
- - Rewrote background drawing code - gives a large increase in speed.
- - Flag to only update X Windows colour palette when necessary was missing a
- case - caused some ROMs to start with a black screen.
- - Code to only update background tiles when changed wasn't working so I
- disabled it.
- - CPU WAI instruction needed to trigger on hardware IRQ even when interrupt
- enable flag was false.
- - DMA was not transferring 65536 bytes when byte count was 0.
- - Fixed matrix 16bit x 8bit multiplication (old debug code was causing junk
- value to be returned).
- - Fixed Makefile so version.h header file change recompiles file that shows
- version number in window title.
- - Added more reporting of used but unimplemented missing hardware features to
- debug command.
- - New ROM loading code from Jerremy included, can now cope with ROM images
- with no 512 byte header.
- - Speeded up emulated memory access a little bit.
- 0.2 released
- - Added matrix 16bit x 8bit multiplication for Super Off-Road Racer.
- - Added initial H-DMA emulation - visual effects using it will not be seen
- correctly until screen is updated line-by-line rather than the whole screen
- at end-of-frame.
- - Fixed horizontal sprite clipping (vertical clipping still has a problem).
- - Integrated large sprite bug fixes and new background drawing code from
- Jerremy.
- - Fixed large size per-sprite flag; always stayed true after sprite size was
- changed to large.
- - Rewrote the planar to chunky pixel conversion routines (still need more
- work).
- - Made registers $4016 & $4017 always return $ff - lots of ROMs that previously
- wouldn't go beyond the title screen thought old-style joy-pads were
- connected and were waiting for the user to press a button on them.
- - Frame skip rate now set to 1 instead of 5 on my P166 laptop!
- - Fixed NMI v-blank flag being incorrect set, caused some ROMs to lock.
- - X keyboard autorepeat now switched off when emulator has keyboard focus.
- - Added number key options to toggle backgrounds 1 to 4 and objs (sprites) on
- and off.
- - Fixed sprite clipping problems at edge of left hand side of screen.
- - Corrected Hi-ROM memory map (I think) (no I didn't)
- - Fixed most of the sprite-to-sprite priority problems.
- - Added sprite debug command, 'S'.
- - Added a debug command to show what missing hardware features a ROM was using.
- - Added horizontal and vertical beam position IRQ - horizontal always triggers
- at start of line at the moment.
- - Fixed SBC instruction to set carry flag the correct way around.
- Initial release 0.1
- - Ported Windows 95 version of Snes96 to Linux on a PC and Solaris on a
- SparcStation.
- - Corrected work RAM memory map.
-