Revision history: 4.01 - Wed July 12 2017 - Now licensed under MIT License. - Minor documentation updates. 4.00 - Fri June 30 2017 - Updated to handle PSID/RSID files versions 1 through 4. - The text fields of 'title', 'author' and 'released' are now allowed to be exactly 32 chars in length as per the latest SID file format spec. - Added support for second and third SID model fields. - Added support for second and third SID address fields. - Fixed 'speed' field related algorithms for PSID v1 or PlaySID- specific files when the number of songs is more than 32 as per the latest SID file format spec. - Fixed MD5 calculation bug for files with more than 32 songs. (I'm hoping this will fix MD5 calculations once and for all. :-) - Fixed: v1 files are now always considered PlaySID specific. - Fixed: during validation, ROM area checks for the relocation range are now applied to RSID files only. 3.11 - Sun Aug 14 2005 - The textual fields of "title", "author" and "released" were handled as Unicode. They were supposed to be ISO 8859-1 ASCII single-byte chars in SID files. This is now enforced when doing a set(), write() or validate(). - getC64BASIC() returned undef for RSIDs, which was incorrect. 3.10 - Sun Jul 17 2005 - Fixed MD5 calculation for RSIDs. - The 'name' field is now called 'title' for consistency with HVSC and other SID-related programs. 'name' is still accepted for backwards compatibility. - New method isRSID() that returns 'true' if the file is a RealSID, 'false' otherwise. 3.03 - Tue Jan 31 2004 - Added check in validate() to make sure the initAddress is within the load range for PSIDs. - Added complete support for the 'C64 BASIC' RSID flag: added the new getC64BASIC(), isC64BASIC(), setC64BASIC() methods, changed the PlaySID flag related methods. See documentation for details. 3.02 - Fri Nov 22 2002 - The load range wasn't calculated correctly when checking for the relocation range. Fixed it. - Changed the "copyright" field name to "released", but "copyright" remains an accepted alias for "released". 3.01 - Sat Nov 03 2002 - There was a bug in the relocation page checking code. Fixed it. 3.00 - Tue Oct 29 2002 Major changes: - First of all, the module name was changed from Audio::PSID to Audio::SID. - The module now also handles RSID (Real SID) files, which are basically PSID v2NG files with 'RSID' as their magic ID (instead of 'PSID'). These files strictly require a C64 environment in SID emulators to run properly, appropriate PSID v2NG restrictions are enforced for it. - 'magicID' is a new field that can also be changed: it can be set either to 'PSID' or 'RSID'. - new(), read() and write() can also take named parameters (see POD for details). - The validate() method was updated so it produces a valid PSID v2NG or RSID file. - The included PSID_v2NG.txt file containing the file specification was extended to include RSID and renamed to SID_file_format.txt. Bugfixes: - The read() method didn't take a filehandle correctly. (Thanks to Niklas Bichinger for reporting it!) - The last byte of a file wasn't read if the C64 data was exactly 64 kB large (#$%@ boundary conditions!). - set() didn't always set the fields properly if a hash containing more than one field-value pair was passed to it. 2.02 - Tue Sep 5 2002 There was a bug in the new MD5 calculation when PSID version was 1. Fixed it. 2.01 - Tue Sep 3 2002 Changed the MD5 calculation to include the CLOCK field if it's set to NTSC. The old MD5 fingerprints can still be asked - see POD for details. 2.00 - Wed Apr 3 2002 Added PSID v2NG support. Major interface changes - see POD for details. 1.60 - Sun Jan 6 2002 First version released to CPAN. 1.00 - Fri Jun 11 1999 First publicly released version.