Modifications, fixed bugs and new features:


The early versions of 1581-Copy were 1581-Dump 0.00 and 0.20 and 1581-
Copy 0.00, 0.15, 0.20 and 0.30. These were internal design studies only
and so, feature lists or modification dates are not available anymore.
The first more or less working version was 0.40 and because it was the
first distribution, the documentation phase started there.



1581cp4:  1581-Copy, version 0.40   1998-09-28

  Mod: The whole track is read into a buffer, before writing it to disk.
       This makes the tool much more faster on systems, that run a disk
       cache in the background.

  Mod: The program isn't aborted anymore, if an error occurs, there are
       done default actions for the case of an error. Ex.: If a read
       sector fails, an empty buffer (0x00) is written to disk.

  Mod: The number of retries can now be defined via command line.

  New: Implemented the sector header Read ID command, so that track
       reading/writing can be started with the current sector number.

  Info: I gave up implementing a polling mode, because I am unable to
       handle it. So DMA based floppy disk access can be used only.



1581cp41: 1581-Copy, version 0.41   1998-10-04

  Fix: The "retry" variable wasn't initialized, so if the argument /T:xx
       is not given, the tool may fail to read and steps through all the
       tracks very quickly with an error message on each. That was an
       error combination, because I used variables that were "signed int"
       instead of "unsigned int".

  Fix: Writing wasn't possible, because I did a read operation within the
       CBM 1581 high level code.

  Fix: There was a weird condition, that prevented one of my drives from
       seeking on startup (I bought a brand new Teac 3,5" drive, so that
       I can test the tool on three different machines now). 

  Fix: Arguments weren't checked correctly



1581cp42: 1581-Copy, version 0.42   1998-10-18  (unreleased)

  Mod: Making ReadID faster, if an error occurs.

  New: One of my controllers (Adaptec AHA-2842 VL-to-SCSI, with
       integrated floppy support) has much problems with single sector
       reading, so I implemented new routines for multiple
       sector/multiple track reading (real "track access"). This could
       improve the performance under multitasking environments, too.



1581cp43: 1581-Copy, version 0.43   1998-10-18

  Fix: The multiple _track_ reading slows done the performance on some
       other controllers, so this is disabled now (see version 0.42).

  New: Introducing an interleave parameter, to increase the performance
       on unusual controllers (like my Adaptec). This is needed, because
       if the multiple sector read routine fails, the single sector read
       is used and an interleave of 2 is needed, so that the performance
       is not too low.

  New: Introducing a parameter, so that the using of the multiple read
       sector feature of the floppy disk controller can be switched off
       and it is not used for the first read/write try.



1581cp44: 1581-Copy, version 0.44   1998-11-01  (unreleased)

  Mod: Improving outFDC, so that TIMEOUTs can be detected by the caller
       of this low level function. If outFDC produces such a timeout, the
       whole operation must be cancelled, because the controller cannot
       be programmed properly.

  New: If the user presses Escape during operation, the transfer is
       aborted (this affects reading, formatting, writing).

  Mod: I disable all interrupts now, when I program the DMA controller.
       The '#defineable' option was already there, but I never tested it.
       Currently I _believe_, it would be better to do it.

  Mod: Setting single sector reading as default. The parameter "/P"
       selects "multiple sector reading" now. The new routines caused
       much more problems than they solved.



1581cp45: 1581-Copy, version 0.45   1998-11-08

  Mod: Inverted all the disk side descriptors in all the low level
       functions, so that transferring/formatting in the high level
       routines starts always with side 0 instead of side 1 (this is a
       beauty fix only). Take notice, that this doesn't change anything
       what really happens to the disk.

  New: After formatting a disk, but not writing some stuff on it, the
       BAM is written with an empty default BAM (?timer value label).

  New: Introducing a very simple BAM copier, to support people with
       heavy performance problems, that only want to transfer one file.

  New: Added a function, that is able to detect, if a disk is in, out or
       just inserted (the Disk-Change-Detection routine). I needed the
       whole last week to let it go work nearly perfect.

  Mod: Improved outFDC, so that the FDC data register is cleared, if
       there are result bytes from previous commands.

  New: Reimplementing Joe Forster's autolabel algorithm, so that mass
       importing and mass formatting becomes possible with least user
       interaction. This should be a demonstration of the new
       Disk-Change-Detection routine.

  New: Added a disk scanner util, that is able to test reading sector
       headers on all tracks and sides of the disk at all the different
       modulations (FM and MFM) and bitrates. Now some of you may be able
       to send me physical disk layouts of unknown disk types
       (CMD FD2000, FD4000 and other). Perhaps you are also able to
       identify copy protection mechanisms of some commercial sold
       software disks!



1581cp46: 1581-Copy, version 0.46   1998-11-24

  Mod: Changed the calculation of the "real" size of an sector from
       256*BytesPerSectorValue to 128u<<BytesPerSectorValue. The old
       method was definetly wrong. With the sector size of 512 bytes
       (CBM 1581 BpS value of 2), there was no difference in the result
       and so I didn't recognize it until now, where I started the
       DISKSCAN implementation of the Raw-Mode-Read-Track function, where
       I need sector sizes of 8192, 16384 and 32768 bytes (values 6, 7
       and 8).

  Mod: Changing disk drive descriptors from 0 & 1 to A: and B:

  Mod: Changed the format and R/W GAP sizes. The R/W GAP size does only
       affect the multiple sector reading or writing of disks. On a CBM
       1581 format the GAP sizes are a little bit smaller, than on the
       format I choosed and especially the CBM 1581 format GAP size was
       smaller than the 1581-Copy R/W GAP size. Now it is absolutely
       clear to me, that the multiple sector R/W couldn't work correctly
       with CBM 1581 formatted disks (and a test approved this:
       formatting a disk with version 0.46 and trying to read with
       version 0.45 and the switch /P).

       Old 1581-Copy format GAP size was: 46  0x2E
       Old 1581-Copy R/W GAP size was:    42  0x2A
       CBM 1581 format GAP size is:       35  0x23
       CBM 1581 R/W GAP size is:          ???
       New 1581-Copy format GAP size is:  35  0x23
       New 1581-Copy R/W GAP size is:     12  0x0C

       There's still another difference between the CBM 1581 and a PC
       floppy disk format: The PC FDC creates the so named System 34
       format, while the CBM 1581 creates the "ISO" format. The
       difference is, that on the "System 34", there's a header of 146
       bytes instead of 32 bytes with the "ISO" format (there are 114
       byte more with the "System 34"), but I think, that doesn't matter.
       When the track is beeing formatted, it may overwrite this header
       at the end of the format process. Until now no one detected any
       problems with this and because in the past the GAP sizes were
       bigger, the header was overwritten all the time.

  Fix: The low level command seek should be more reliable now, because it
       checks the internal controller track value against the destination
       track number (after sense interrupt status).

  Fix: The low level command recalibrate should be more reliable now by
       letting it check the track 0 signal (drive status command).

  Mod: Implemented a 1581 high level function for resetting the drive
       controller, so that the drive is recalibrated after.

  New: Implemented a Media-Detection routine, so that CBM 1581 compatible
       disks can be detected reliably. This routine should also check,
       which drive type (5,25" or 3,5") is currently used, this means a
       hardware check (asking the CMOS).



1581cp47: 1581-Copy, version 0.47   1998-11-29  (unreleased)

  Fix: One of the error messages said, that there was an error, when
       "writing" a track, but in fact, the track couldn't be _read_.



1581cp48: 1581-Copy, version 0.48   1998-12-02  (unreleased)

  Mod: A complete restructuring of the whole low level code, so that the
       CMD FD2000 disk format can be recognized in the future.
       Additionally I added some comments and changed the interface
       of many of the functions. This needs a change of the high level
       CBM programming library, too.

  Mod: All the different FDC command sets are now issued by one body
       function, that does the common programming sequences.

  Mod: I simplified and reduced the code by only reading one side of a
       cylinder (a track), but not the whole cylinder. This is needed
       before implementing the verify routine. It may result in a loss
       of transfer speed, but it saves more memory, because of the half
       buffer size is needed and less code.

  Mod: The multiple sector read/write routines don't automatically issue
       the single sector routines after an error anymore. This has to be
       done from the main program now.

  New: Removed the /W switch by making it possible to autodetect, if the
       source is an image or disk drive (the ':' of the disk drive
       descriptor is done for this).



1581cp49: 1581-Copy, version 0.49   1998-12-16

  New: Adding performance measurements, so that the time needed for a
       transfer operation is printed out. 

  New: Added a verify routine for format and write operations, but take
       notice, that this doesn't mean, that the disk contents are
       compared against the source buffer. The written sectors are only
       CRC checked by the FDC again. The DMA controller knows a "verify"
       mode, but I couldn't find out, how to check, if there were
       differences or not.
  
  Mod: The high level library has been restructured, so that there are
       now only 2 body functions for single sector and multiple sector
       track reading, writing and verifying. This reduced the code size
       a lot. The format routines has not been added, because it needs
       some extra handling.

  Mod: Changing the error reporting in the high level library, so that
       the cylinder number and other parameters are corrected to the
       logical CBM naming.
  
  New: Added a media type FDC parameter change function, so that other
       formats can generally be supported with the low level routines.
       But there will not be all 1581-Copy parameters supported, like
       the BAM copy switch.
  
  New: A first version of CMD FD2000 disk support has been added for test
       purposes. Currently this format is not well supported, e.g. BAM
       copying is not able and most likely will never be, because the CMD
       partitioning system seem to be very complex. The writing of a
       default BAM and system partition is currently not supported too,
       but this will be added, after I got some (empty) images.

  Mod: Improved readSectorID, so that variable timeouts can be selected.
       This way I was able to realize a much faster media detection
       routine.

  New: Added default extension generation (D81 and D2M), if a filename is
       given, that doesn't contain an extension. Filenames, that should 
       not contain an extension can be specified by adding a dot to the
       end (IMAGE. ). If a disk is written, the routine searches for
       files with the different extensions until it finds a matching
       combination of an image and disk media type.



1581cp50: 1581-Copy, version 0.50   1999-05-13

  Mod: Changed the default disk formatting label from "1581 Copy format"
       to "1581 copy format" so that commodore users are no longer
       confused by graphical chars.

  New: If the disk is write protected and data has to be written or the
       disk has to be formatted, there comes a write protect error
       message now and the whole operation is aborted immediately.

  Mod: Added more support for CMD's FD 2000 disks. When formatting a
       disk only, there's some default data written to the disk now.
       The physical layout of such disks is as follows:
          81 cylinders per disk, 2 heads per cylinder (a track),
          10 sectors per track (per head), 1024 bytes per sector,
          sector header side ID descriptors are _swapped_ like with
          the CBM 1581 disks.
       BAM copying of FD2000 remains still disabled, I don't want to
       integrate the complex partitioning system of these disks.

  Mod: Integrated a very simple RLE decompressing routine for all the
       different headers.

  Mod: Integrated the formatting into the main transferring loop, so that
       it wouldn't be a so big problem to integrate intel's controller
       feature "format'n'write" later. By the way this change made the
       tool 5 seconds faster, if you format a disk and write an image to
       it.

  New: Now that formatting is integrated into the main transferring loop
       it was no further problem to add the special extended command of
       the intel 82078 FDC, that makes it possible to format and write a
       track at once.
       The problem is, that none of my machines is able to execute this
       command correctly. My 486 machine could be detected as an intel
       controller 82078 with the chipmask stepping 3. But the command
       seems not to work at this machine, too. All what happens is that
       the FDC does a normal formatting and so writes the wrong data to
       the disk. Well, I think, I have to search for some more
       ducumentation about different controller implementations to fix
       this.
       Because of this problems, verifying is forced when you use this
       feature. Please, if you have some success with this, report this
       to me.

  Rmv: I removed the DISKSCAN utility from the package, because it won't
       be needed anymore. I don't plan to integrate more different floppy
       disk formats into 1581-Copy.

  Mod: Again did some more integration of the format process. Now it has
       been added directly into the single/multiple sector high level
       functions. This way a track is beeing reformatted again, if
       verifying is enabled and fails. Additionally this brought me an
       fucking great speedup. Formatting, writing and verifying a disk
       should be done within 115 seconds (multiple sector enabled, but
       without the 82078 format'n'write feature).

  New: Created some user menu entries for The Star Commander, so that
       disk images can be directly transferred from within SC.



1581cp51: 1581-Copy, version 0.51   1999-08-17

  Fix: When calling the low level command "readSectorID" the function
       returned always "false (0)", when called with a timeout of less
       than 0, what means to not to wait for command completion. This is
       needed for the the disk change detection. This error caused no
       bug, but I discovered it while developing 1541-Copy, a hardware
       supported GCR disk reader.

  Fix: The function "readSectorID" is internally called with a NULL
       pointer for the result structure. This caused a segmentaion
       violation, when compiled with DJGPP. The pointer is tested against
       NULL now before any values are written to it.

  Mod: Disabling the extended floppy disk controller code again by
       commenting it out (#ifdef FDCintel82078), because there have not
       been any positive success reports and I don't see any use.

  New: Added support for some unusual CBM1581 disks, for an example such
       ones, that are copied with the Maverick suite. The side
       description IDs of the sector headers of such disks are marked
       with 0 on both sides instead of 1 (side 0) and 0 (side 1). Take
       notice that 1581-Copy does recogize such disks only in read mode,
       you will not be able to write any contents to such a disk, please
       reformat the disk, if you want to write anything to it.

  Mod: Extended the "ignore SideIDs" feature to the write and verify
       functions, but it can be disabled via compile a switche. I want to
       discuss this first and let some testers give me some results.
       Formatting still remains "hard wired" to swapped SideIDs, I don't
       see any reason, why to allow such sophisticated formats like the
       Maverick's one.

  Fix: Found and fixed a very annoing bug in the single sector copy
       routine. If no sector to do could be found anymore and the current
       retry loop is exited, the first sector to do in the next loop was
       calculated wrong. I had to restore the old value of the last
       sector done, if the loop is exited.

  Mod: After some test reports the "ignore SideIDs" feature is now always
       used in the read, write and verify routines.

  New: Added the URL of the fdutils-package for all the linux freaks,
       who want to have a more comfortable (technically aspect) way of
       transferring different disk layouts.

  New: Made the CBMcheckDisk function independent from the SideIDs, too.
       This required an additional parameter, so that the check can be
       disabled/enabled by user request (the default remains enabled).
       An additional command line parameter let's the user disable the
       "correct CBM side ID swap" check. But then 1581-Copy has nearly no
       chance to detect incompatibilities between source and destination.

  Info: All experimentations with a real verify or better named a compare
       routine, that utilizes the FDC command "ScanEqual" failed. It
       seems that ScanEqual doesn't work at least with my controller, so
       I did a "brute force" test by reading the disk contents into
       another buffer and letting the processor do the comparison, but
       this CPU based comparison was  much too much too slow, so I do the
       simple CRC verify again.

  Mod: Doubling the size of the track buffer, so that both sides of a
       track can be transferred to/from the harddisk at once. This
       synchronizes harddisk reads/writes with floppy drive head steps.
       It was no good solution to do harddisk transfers between diskette
       head changes, because harddisk transfers sometimes need more time,
       than changing the head of the floppy drive. I could detect bad
       performance effects especially on non SMARTDRIVEd systems. This
       should be a good compromise to the changes made to version 0.48.

  New: Added an additional performance analysis, that prints out the
       estimated time for completion. It's a track based analysis.

  Mod: Changed the "changeExtension" function, so that extension changing
       can be forced, if multiple disk operation is enabled.

  Mod: 1581-Copy is now distributed under the label "FairLight tools".
       Bacchus encouraged me to do this after beeing one of the main
       distribution sites of 1581-Copy for a long time. A positive side
       effect is, that 1581-Copy gets its own mail address this way.



My Could-Be-Done/To-Do list for further releases:

  Mod: Changing the sources, so that compiling with DJGPP becomes also
       possible. This would need a change of the DMA encapsulating
       function and all the pointers to correct low memory allocation
       (currently I don't know, which DPMI functions have to be used
       for this).

  New: Adding support for the very unusual FD1000 disks, what means, that
       the detection code has to be expanded. If a 800 KB disk has been
       detected (probably a native CBM1581 disk) it has to be checked, if
       there's a system partition at track 81. If it is, the would mostly
       be a CMD FD1000 disk and 81 tracks have to be copied into an D1M
       image.

  Mod: Trying to add FD2000 BAM copy support.

  Mod: Perhaps: Checking, if the use of virtual dma services is needed or
          at least useful (up to now, I couldn't find any reasons for
          needing this).

  New: Perhaps: Adding a possibility to list the main/root directory of
          an image or disk drive, so that disks can be distinguished
          easier (discarded, because I can't support this and BAM copy on
          FD2000 disks).

  New: Now, that I started implementing support for these extended
       controllers (format'n'write command), I could do some more to
       realize formatting disks in the ISO format instead of the IBM
       System 34 format). That would result in a better _emulation_ of
       the physical CBM disk layout. But I don't believe, that it
       increases the compatibility in any way.
       However, first I want to hear from, if the new format'n'write
       feature is working on anybodys system. In my very personal
       opinion only standard controllers/functions should be supported
       and that's that, what the NEC PD765 supports. The format'n'write
       is only a very special present to one of my most faithful testers
       and perhaps the only one, reading the fucking manuals :-)
          (This will possibly be discarded, because of no positive test
           results about general intel 82078 support until now and
           because I disabled the 82078 support in version 0.51 again).

  The following ideas are delayed until I realized some other projects,
  like e.g. SpeedDOS support for VC1541 from Torsten Paul and a really
  extensive test of The Star Commander (I plan to repeat all the tests I
  ever did).
  Bad news: I got an idea for a new project... I think, it should be
  possible to read GCR encoded 1541 disks with a little bit of hardware
  (one wire connected from the floppy's flat cable to a hardware counter
  at an ECP parallel printer port). This idea would be a combination of
  the ADF-Reader (Amiga disk importing program) and the Disksucker
  (direct 1541 disk controller connection). Check this for more info:
    http://home.t-online.de/home/ChristianK./adfreade.htm
    ftp://hld.c64.org/pub/hld_ware/disksuck
  

  Mod: Perhaps, don't know: Expanding the Media-Detection routine, so
           that all IBM-PC 3,5" standard disk formats are detected, too.
  
  Mod: Idea for the OO redesign: A "SetDriveParameter" (bitrate,
          modulation, header ID information to seek for) method, that
          is dependend from the selected drive, track and head, so
          that different sector schemes can be defined for each track
          and head (like with OS/2's XDF disks).

  Mod: Idea for the OO redesign: Implementing a great idea about an
          automatic registration process for new implemented custom
          objects for new disk types, that I got. A user should simply
          be able to implement a new object for his special disk type
          without changing anything from the main program. A simple
          init sequence (generating a static object, that does the
          registration with its default constructor) and a disk type
          detection method that the user has to implement should it
          make possible, that the main program can transfer disks
          without knowing anything about the disk layout. This will
          result in a _framework_ for all known and unknow disk types
          then. Will anybody really need this anymore, now that
          CD-Recordables and -Rewritables are the disks of today?



My planning for 1581cp52: 1581-Copy, version 0.52   2001-01-xx
                             (see you _in_ the next millenium)

  the next steps from my To-Do list:

  Fix: Fixing all bugs found and/or reported

  Mod: Trying to add FD2000 BAM copy support.

  New: Perhaps: Adding a possibility to list the main/root directory of
          an image or disk drive, so that disks can be distinguished
          easier (discarded, because I can't support this and BAM copy on
          FD2000 disks).



Note: There will be never a version greater 0.99 of 1581-Copy, because I
      want to develop only the basic routines for im- and exporting 1581
      disk images, testing and fixing it until there are no errors
      reported anymore.
