0.7 released
- Fixed Allegro library keyboard handling (DOS port); it was missing key
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 uninitialised 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 (default 1)
-i (default 32768)
-h (default 45, some games allow a lower
setting resulting in a increased
emulated frame rate)
-t enable CPU tracing
-ss (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.