summaryrefslogtreecommitdiff
path: root/sid/sidplay-libs-2.1.0/libsidplay/ChangeLog
blob: 7a11e01a62f641bdc448d92d9db98980d8feac95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
Release Notes 2.1.0:

Added:

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.


Changes:

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.


Fixes:

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

Changes:

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.

NOTE FOR DEVELOPERS:

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
at:

ftp://sidplay2.sourceforge.net/pub/sidplay2/resid


Changes:

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.


Problems:

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
emulated.

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.


Changes:

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.


Problems:

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
correctly

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.

	
Added:

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.


Removed:

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...


Added:

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
contain!

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
at ftp://sidplay2.sourceforge.net/pub/sidplay2)

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:

Added:

* 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


Changed:

* 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
  installed

* 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.


Fixed:

* 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


Issues:

* 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:

Added:

* Time count

* xsidplays audio drivers (well linux one)

* Command line options

* Volume controls for left and right

* 8 bit mixer


Changed:

* 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
  sidplay-2.X.X.

* 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:

Added:

* 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).


Fixed:

* CPU using wrong address for reset vector.

* The use of statics in CPU a member function (Required to play stereo MUS files).


Changed:

* 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)