Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
538 lines (329 sloc) 18.2 KB
Release Notes 2.1.1:
Support for basic C64 tunes and direct running of C64 (.prg/.c64) files. Note that
prgs requiring user feedback (e.g. keyboard) or storage support (e.g. tape/disk
loads/saves) will not work.
VIC sprite emulation.
CIA Serial Port and I/O port emulation.
Tidied up handling of mono to stereo channel splitting, especially when driving a
Channel splitting can now be turned off when stereo output is enabled.
Utilise new hardsid calls to indicate user selected mixer changes from program
selected mixer changes. Prevents user constantly re-configuring the mixer
after stopping/starting a tune.
Updated all file formats to comply with latest RSID/PSIDv2NG specifications.
Stereo MUS files loaded in the wrong order will now display the credits
correctly and play the tunes on the correct channels (Amiga icon file
format needs testing).
Creation order of new sid-emulations was incorrect with respect to setting the
mute/volume properties (meaning the new emulation did not see the settings).
ROM/RAM memory not deleted on exit.
Emulated CPU instruction pipeline to overlap instructions on correct cycle.
Other minor fixes.
Release Notes 2.1.0:
Introduction of sidbuilder classes. These classes can be used to create new sid
emulations for libsidplay2. The front end player owns these emulations and passes
them into libsidplay2 at runtime. Such emulations could be a revised SID emulation,
HardSID driver, Sidstation driver, etc... This feature will be used by sidplay/w
and sidplay2 in future.
Implemetation of the component library classes. These classes provide a standard
way to create new components (e.g. VIC, CPU, etc). Note that the sidbuilder
classes use these. The current implementation is a half measure which sees
all components being seperated fully from the running environment. However,
due to the current design the components are static. A second version of these
classes will be released to allow dynamic allocation and linkage. This actually
means this project becomes a generic IC emulation test bed which are effectively
added and wired together at runtime. Given the right component emulations, this
project could be a C64, BBC, etc.
Support for exporting credits.
New event scheduler that is used by all components. The significantly improves
the speed of the emulation.
Start time and fastforward support.
Support for the PSID 2 proposal B (PSID 2NG). This allows relocation information
to be added to the tune such that it can be played on a real C64 (based emulation).
This is necessary as additional house keeping/contol code must be placed safely
in C64 ram without it running the risk of being overwritten by the song.
Code now builds under GCC3.
Supporting and config requirements of the new builder classes required modification
to libsidplay2's configuration interface.
Sidplay1 specific code moved to seperate components sid6510 and sid6526. This
provides the simple cut down versions of the CIA (6526) and a CPU which forgives
badly written tune code (6510). These components are only used in the old
sidplay/playsid modes.
Direct ReSID support removed. Now supported through extenal sidbuilder class.
Floating point code in critical code parts have been converted to fixed point.
Relocatable C64 assembly driver added using PSID 2NG.
Support for random tunes in Real C64 mode.
The library has sufficient emulation to run PRGs. As such I managed to run the
C64 Emulator Testsuite 2.15 by Wolfram Roemhild.
All CPU instructions (including extended ones) now run correctly with the correct
number of cycles. Results from other C64 environment tests are still being
worked on (nothing serious).
Release Notes 2.0.7-5:
Performance fix (corrected player.bin).
Release Notes 2.0.7-4:
GCC 2.96 fixes.
Release Notes 2.0.7-3:
Linux RPM fixes
Fixed SidTune ('/' directory seperators are allowed on Microsoft platforms with
programs that use standard c/c++ libraries).
Songs with there own interrupt handlers are no longer assumed to initialise
the VIC should the require it. Songs that do install there own handlers MUST
acknowledge the interrupt source else the song will play too fast.
Release Notes 2.0.7-2:
Linux RPM fixes
Release Notes 2.0.7:
This version sees a fully compliant C64 cycle based emulation. The emulation
only covers those parts which are necessary. Things like CIA and VIC are not
complete because it's not deemed usefull to play the tunes better. The
VIC emulation can still be improved a little to support bad cycles and perhaps
the light pen interrupt. The CIA emulation is also incomplete but now
supports both Timer A and B and all timer modes except those which use
external signals. The CIA emulation will probably be fully completed in a
near future release since I have the code pretty much written. It's not
been added because the rest of the player requires a design concept change to
use the C++ "observer model".
Please note this version has a totally different concept design to the last.
The previous version is the last "SIDPlay Compatible" version. Since this
is the case SIDPlay specific songs which are possibly bad may no longer
work. If such songs are found please report them as they will be fixed.
Lastly this version can run original tunes and even prgs taken from a real C64
without any modifications. In most cases it's just a simple case of locating
the tunes INIT address, making a sid info header and then rename the *.prg to
*.dat. SIDPlay2 can then run the tune, it's even possible to create a PSID
all in one file using a conversion tool. One thing to note is that these
real tunes will mostly not play (correctly) in other SID Players apart from
VSID (Vice SIDPlayer). However, VICE is not pretending to be fully or even
mostly SIDPlay compatible. It therefore wont run as many tunes or play
extended samples like those found all the HSVC sample tunes.
For those wishing to do the above you must set the play address to 0xffff.
This is an illegal address like 0 and behaves similiar, but it tells the
player to turn off extended sample support, ignore the CIA/VIC speed flag
and enable NMI support.
You will require libtool 1.3b or greater to be able to link against
the libsidplay2 libraries. Versions of libtool prior to this
(including 1.3.5) DO NOT import library dependency information from the
installed *.la files.
Libsidplay2 uses a modified version of ReSID. ReSID patches can be located
Partial VIC emulation which models both the NTSC and PAL chips. Full raster
interrupts supported and therefore VIC multispeed tunes.
Partial CIA emulation with full interrupt capability for Timer A and B. NMI
interrupts are also supported for "real C64 samples".
MOS6510s interrupts are now used. Interrupt/BRK now fixed to always run the
first instruction in the interrupt handler. This means the an IRQ cannot
interrupt an NMI should the first instruction in the handler be SEI.
SID6510. SID specialisation of the processor now improved and those bits from
the player enviroment which should have been here now are. This module
provides most of the SIDPlay1 compatibility, but not everything can now be
supported as in version 2.0.6 due to other environment changes.
XSID now is pretty much fixed for HardSID usage. It correctly determines
legal SID volume offsets and traps volume changes to the SID made by the
C64 program. This prevents song clicks, quiet main voices and even allows
the main voices to change there volume correctly whilst samples are playing.
The user now has the ability to select whether they would like samples through
SID or samples on there own idependent channel. The default is samples
through SID. Note that real Samples cannot be taken off the SID.
Due to the Interrupt support the C64 now allows code execution overlaping.
E.g. the play routine might trigger before the INIT has completed and multiple
play calls may overlap each other. This also happens on a real C64 and as to
whether it works depends on if the ripped code still has the capability to
deal with it. Since it seems that some tune DO NOT do this properly, nor do
they acknowledge interrupts correctly, C64 code has been provided by Dag Lem
to deal with this issue. This code is the PSIDDRV from the Vice project.
The version available here has been modified by me to support almost
all tunes and deals with some of the SIDPlay compatibility issues better.
There are known problems with this version, but the benefits are far greater.
Some tunes currently will just not play. These are tunes which install code
across the interrupt handlers and therefore don't behave correctly when an
interrupt occurs. These tunes are probably missing things which were setup
by the original game code. The methods used by SIDPlay1 and 2 to determine
the initial bank register state does not accomadate this fact. SIDPlay1
like release 2.0.6 does not have this problem because interrupts are not
There are performance issues with this version and specifications have increased
due to the extra/modified component emulations :(. I hope to fix/improve on
this in a next release.
Either the NMI or VIC interrupts seem to have jitter on them. For tunes in
HVSC this dosen't occur. For some real sample tunes the music can sound a little
distorted. This should be fixed for the next release.
The PSIDDRV has to sit in RAM and therefore can be trashed by the tune. To stop
this the zero page has been reserved to store the PSIDDRV and some special non
standard C64 bankswitching added to flip in and out the driver. This means that
the tune cannot put any code on the zero page but it can store data on this page.
Since benefits of using this page are only available when storing data on it there
is no tune currently in HSVC that causes a problem. It is possible to put this
driver into roms, some code must still go in RAM do deal the calls to play/init
routines that may lie under the ROMS. However, this would break some of the older
modes e.g. playsid mode does not have ROMS, sidplay1 combatibilty modes prevent
code execution in ROMS.
Changes since 2.0.6 (Note this version is intended mainly
for developers):
(ms) Fixed fake6526.cpp to unlock timer upon reset. When playing
sub-tunes and switching from CIA to VBI speed and vice versa, the
speed is now correct.
(ms) Fixed clock to [re]start at 0:00 upon [song] initialization.
(ms) Converted complete source tree from kdevelop to native Automake
and made it build a library and the console player. Developers are
advised to configure the package with --disable-shared, so that they
don't need to install a shared library and/or set the
LD_LIBRARY_PATH, respectively.
Resid now linked against library and not against application. This
means that a application linking to the library does not need to know it's
using resid.
External interface changed to hopefully allow better compatibilty.
For OSS left and right channels are reversed. According to OSS docs,
left channel in writing before right which is the order it's currently
being done (oss driver bug). Both Windows drivers are correct.
Bug Fixes:
Fixed bug when reading tunes from stdin.
Added new loadSong function to allow selecting another subsong without
reloading the file. This is important when reading files from stdin.
External interface changed to hopefully allow better compatibilty.
Fixed IO bug whereby a write to the IO registers could not be read back.
Keyboard input is now read from stderr. This allows the keyboard to be
read whilst a file is passed using stdin.
Stderr redefined as console output instead of stdout. This allows you to
redirect or pipe the output whilist allowing keyboard events to be processed
Changin any of the sid settings effects both sids.
The library can now be configured at run time by putting the library into paused
mode. If you are using a multiplte threads to drive the library, be carefull
as it's not thread safe. Use mutually exclusive semaphores to protect the library.
Use of extended keys quiting the program.
Null sound driver to allow faster songlength detection (Code for songlength
detection not provided in this library) and eventual hardsid support.
Cursor keys now work on Linux and Windows. But there is a bug in Windows 98
first Edition which prevents them from working properly. This information
has been admitted by Microsoft the the only proposed solution is to upgrade to
Win 98 Second Edition. (For the time being you can use the cursor keys on
the numpad).
Added a mileage count to help determine the sid usuage since the begining of time.
Added ability to use unforced PAL or NTSC.
For -s, mono songs now get converted to stereo by spliting the
channels between multiple sids.
Timer changed test. This can easily be worked out another way.
Release Notes 2.0.6:
This version mainly sees bug fixes and finally gets both the Linux and
Windows versions to exactly the same code state.
Bug Fixes:
Tunes which didn't play.
DirectX fixes.
Timers fixed for both directx and mmsystem drivers and will therefore
never cache ahead by more than 0.5 secs. This still needs doing under
Linux to prevent the timers getting 3 seconds ahead.
And more...
Most of the other features of the expermental version now classed as 2.0.5
apart from fastforward/rewind and filter redefinition.
Ability to skip to the prev/next subtune using the '<' and '>' keys.
And more...
Features for next release:
Ansi console support delayed till next release.
Songlength database support delayed.
Filter redefinition delayed.
Fastforward/rewind, delayed indefinately untill feedback is provided
on how good/bad it is (please any feedback at all!).
Player configuration file.
Release Notes 2.0.4-2:
Bug fixes to sid mixer.
Program termination now quicker from ^C.
New xSID code included for testing.
New man page added.
Thanks to those concerened for finding/fixing the bugs in this release.
To follow shortly:
Again 2.0.5 will follow, with the last of the features from my unofficial
experimental version (found on the sidplay2 ftp site). Be warned that there
are now bug fixes in the main version which the experimental one does not
From now on experimental versions will be released as patches on the
main release versions in CVS until they are determined to be stable.
Release Notes 2.0.4:
Temporary release to try and bring code upto date. A 2.0.5 will follow shortly
to achieve all that implemented in experimental release 2.0.4pre5 (This is available
Lots of new options added, bug fixes for Solaris drivers, 16 bit support... Other
additions will fall into 2.0.5 once they have stabalised.
CHANGES since 2.0.2:
* Timer
* Support for credits
* Option -fd, overrides values returned by sidtune and forces dual sid support
with the second sid being mapped at 0xd500. Use this to support stereo sids
(not stereo mus) until the format is changed to support them properly.
* Windows Drivers. Code now now be built as a Win32 console application.
The include paths need to be changed to Visual C++ so all the headers can
be seen. Paths need are PATH/libsidplay-<ver>/ and PATH/libsidplay-<ver>/win.
* Sparc Driver (This driver hasn't been tested or compiled)
* Support for playing of playsid smaples through reSID
* Changing the environment whilist the song is playing nolonger stops the song.
Environment changes are now delayed until a new song is loaded
* environment class renamed to SidEnvironment to avoid some naming issues with
Visual C++.
* xSID minior fixes to make code compile on Visual C++.
* Structure of audio drivers for better auto detection and Win32 support.
* Sidplayer structure now implements Cheshire Cat techniques to hide private members
This means that all header files required by private members no longer need to be
* Added workaround in CPU code for bug found in Visual C++ 5.
* Finally corrected all playsid digi modes using information provided bu
Michael Schwendt from the original source of Game Over.
* Removed nasty code hacks for Windows.
* xSID bug preventing it from not playing some samples.
* myTune now initialised to NULL (reported by Jarno)
* Placing of an invalid switch on an otherwise legal line did not throw an error.
* Use of bitfields which breaks portability of CPU emulation
* Unions on Big Endian machines where all variables are varying sizes
* Timer is actually what has been decoded rather than what has been
played. This is due to the soundcard drivers buffer the samples.
Anyway, it's better than nothing.
CHANGES since 2.0.1:
* Time count
* xsidplays audio drivers (well linux one)
* Command line options
* Volume controls for left and right
* 8 bit mixer
* Renamed the project to libsidplay (eventually this code will be a library).
main.cpp and the audio directory will form the basis of a new project called
* Sidtune. Only need one player emulation for stereo MUS files.
* WavFile now converted to be another driver. (Makes code have better re-use)
* New are now have error checking
* Configure files now work
* Prevented the loadSong function initialising the player twice.
CHANGES since 2.0.0:
* Extended sid support (xSID, written by myself from scratch). xSIDs interface is designed to look like reSID and can easily be used to help developers of other players.
* Support for all libsidplay-1.X.X environment modes.
* Stereo SID & MUS file support.
* Sid2Wav support (thanks to Michael Schwendt).
* CPU using wrong address for reset vector.
* The use of statics in CPU a member function (Required to play stereo MUS files).
* All data types now use _sidt namespace.
* Better handling of reSID clock calls to seriously reduce CPU overhead.
CHANGES from libsidplay 1.X.X
* Most of the code has been re-written by myself with all the new emulated IC's being cycle based.
* The interface has been revamped and is based on standard functions provided by a music player e.g. play, stop, pause, etc
* reSID is now the default and currently only provided SID emulation. (written by Dag Lem)
* Sidtune library taken from libsidplay-1.X.X for file support. (written by Michael Schwendt)
Something went wrong with that request. Please try again.