This little program fixes two bugs I found in cdtv's file system (cdfs.library) It only works for cdfs v24 rev 9; it won't do anything if you don't have that version of cdfs. It has only been tested on my unaccelerated a500 w/ a570, v2.0 OS (should work with 1.3, though). If you have any comments or questions, I can be reached via internet email as dark@judy.indstate.edu. To run, just type run >nil: cdfix on your cdtv or a500 w/ a570 sometime before you insert a disk which would otherwise make it crash :) -- description of bugs -- Problem 1 [direct transcript of my post to comp.sys.amiga.programmer] As you probably know, the A570 and CDTV have problems reading non-CDTV ISO-9660 disks [those that I have tried and read by other means are AB20 and the OS/2 Devel. Kit. After looking throught the ROM on my A570 over the last couple of days, I found what I believe to be the problem. Of course since it's in ROM, I have no fix as yet, but I just thought I'd let you all know & see what you think. The problem is in cdfs (CD0:/cdfs.library), and the following refers to cdfs 24.9 (22.10.91) @ $f35544. The problem is after $f3654c: $f3654c tst.l -4(A5) bne $f36558 move.l D4,-4(A5) $36558 ... Which I believe should read: $f3654c tst.l -4(A5) bne $f36558 move.l D4,D0 add.l D6,D0 move.l D0,-4(A5) $36558 [not any more :)] ... Of course fixing the problem in ROM would be relatively easy if I were inclined to burn my own, since there are plenty of inefficient pieces of code even immediately surrounding the offensive code that the addition of 4 bytes could be offset, for instance, by making a few bra.w xxx into bra.s xxx in the near vicinity. To better explain the bug: The routine @ $F36464 checks the disk for ISO-9660 descriptors. In the routine, a buffer is allocated (A3 = "buf") which contains sectors from the disk. D4 ("i") keeps track of the number of the first sector in the buffer, and D6 ("j") keeps track of the offset into the buffer currently being on. (D5 ("o") is D6*2048, or the actual byte-offset into the buffer). -4(A5) ("vold") stores the volume descriptor when found. [Note: all iso struct names are from the "ctools" utility on ftp.cdrom.com] There is a loop similar to: /* irrelevant bs.. */ /* decl buf as struct iso_volume_descriptor *buf */ /* allocate buf = nsecs*2048 bytes; nsecs = 16 or 2 dep. on avail. mem. */ for(i=16;i<256;i+=nsecs) { dbprint3("\tp%lx.%lx\n",i,vold); readcd(buf,i,nsecs); /* read nsecs sectors starting @ i */ for(j=0,o=0;j